On Nov 11, 2008, at 3:51 PM, Peter Shugalev wrote:
> Owen Anderson wrote:
>> If you configure it as a cross-compiler for 64-bit x86 Linux and
>> feed it
>> the appropriate header files, it will produce the same output on any
>> platform. However, that output will not be executable on most
>> platforms, just on 64-bit x86 Linux. The problems go beyond pointer
>> size. The size of int is implementation dependent, etc. The
>> layout and
>> padding of structs is implementation dependent. While all
>> implementations on a given target-triple will generally agree to
>> ensure
>> binary compatibility, there is no guarantee of things being the same
>> once you go to another target-triple.
>
> Do you mean that cross-target execution CAN break on examples like
> this
> one? [eventually on this example it doesn't]
>
> struct X {
> void *a;
> int b;
> } x;
>
> *(int *) ((char *)&x + sizeof(void*)) = 1;
>
What about something much simpler: memcpy'ing an array of structs
around. The number of bytes to be memcpy'd is dependent on the
padding of the struct.
--Owen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2624 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20081111/1c65ef3d/attachment.bin>