gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Alignment issue?


From: Laurent Michel
Subject: Re: Alignment issue?
Date: Sat, 6 Jul 2013 07:56:29 -0400

Thanks. That's good to know. At the moment a fix to NSAllocateObject will solve my problem, but one may never know, I could end up with structures requiring 16 bytes alignments in any objects. (btw, this is coming from intrinsic accessing SSE2 registers). 

Thanks for looking into this!

--
  Laurent

On Jul 6, 2013, at 3:58 AM, Richard Frith-Macdonald <address@hidden> wrote:


On 5 Jul 2013, at 14:41, Laurent Michel <address@hidden> wrote:

Ok, so that's a bug then. On x64, one should add 8 bytes of padding before (or after) the counter in front of any NSObject to preserve a clean alignment.

NSAllocateObject() already contained code to do that, but was getting it wrong using the alignment of double.
With gcc it can use __BIGGEST_ALIGNMENT__ to get the right calculation, but that's not available with clang.
So I changed the code in svn trunk to always use 16 if we are compiling with clang.

If anyone knows a clang equiivalent of __BIGGEST_ALIGNMENT__, we could/should change to use it, since using 16 may waste space on some architectures and may not be enough on others (though I know of none).

PS. this is for NSAllocateObject() ... if you call class_createInstance() then the runtime will probably not provide the required padding :-(

However, if you are using the old runtime, the compatibility layer in gnustep-base now implements  class_createInstance() by calling NSDAllocateObject(), so in this case it should be safe to use that runtime function.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]