ARM compiler misbehaves ?
Richard Earnshaw
Richard.Earnshaw@arm.com
Thu Apr 29 14:34:00 GMT 2004
On Thu, 2004-04-29 at 15:17, Grant Edwards wrote:
> On Thu, Apr 29, 2004 at 10:44:14AM +0100, Richard Earnshaw wrote:
>
> > > >test_pointer now points to an odd address. Dereferencing it
> > > >will almost certainly not work right, since the compiler
> > > >doesn't generate run-time checks for misaligned pointers.
> >
> > Wrong.
>
> OK, which are you claiming?
>
> a) test_pointer points to an even address.
>
> b) Dereferencing the pointer works right.
>
> or
>
> c) The compiler generates run-time checks for misaligned
> pointers.
>
None of them. I was referring to the statement:
> Actually, I'm pretty sure it is guaranteed to work as long as the
> compiler can see the "packed" attribute during compilation (if it
> couldn't, that would be a serious structural problem in your source
code!).
Which claimed it should work. It doesn't, and isn't intended to.
> Can you provide any evidence for any of the three? I know for
> a fact that none of the three claims is true for 2.9x and 3.x
> versions of gcc targetted for ARM or H8 architectures. Which
> target architecture are you talking about?
>
> > You can't take the address of a packed element and store it in a
> > normal pointer.
>
> Last time I checked (with the ARM and H8 gcc's) you could. It's
> just that dereferencing the pointer won't work right. Copying
> to/from the value of the pointer with memcpy() works fine.
>
No, even that isn't guaranteed, since the compiler is entitled to "know"
the implementation of memcpy, and therefore to implement it inline.
If you assign a pointer to a 'short *' and then try to dereference it,
then the compiler is entitled to assume that the value really is a legal
short * and has all the properties required of such a pointer.
> > Normal pointers can't handle unaligned objects.
>
> What do you mean by "handle"?
Dereference.
R.
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
More information about the crossgcc
mailing list