This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Misaligned .bss section for PE?


On Thu, May 29, 2008 at 7:14 PM, Zuxy Meng
> "Zuxy Meng" <zuxy.meng@gmail.com> 写入消息新闻:g15ap1$2he$1@ger.gmane.org...
>>
>> "Zuxy Meng" <zuxy.meng@gmail.com> 写入消息新闻:g13f6l$t70$1@ger.gmane.org...
>>>
>>> Hi there,
>>>
>>> Recently I met a crash on MinGW32 caused by misaligned access of SSE
>>> instructions. The root cause was that a static var wasn't aligned to a
>>> 16-byte boundary. However, in gcc source this var had already been marked
>>> with "__attribute__((aligned(16)))".
>>>
>>> I then checked the output of "gcc -S" and it turned out that with PE you
>>> couldn't specify a symbol's alignment. Rather, the alignment was ensured by
>>> explicit padding. But gcc seemed to do it right, at least within a
>>> compilation unit. Unfortunately, after hundreds of objects got linked
>>> together, some symbols' alignment was broken.
>>>
>>> I'm just wondering if I should report it as a GCC bug or a binutils one.
>>> Any help? Thanks!
>>
>>
>> I guess I've figured it out; the object compiled with an older version of
>> "as" has an alignment of 2**4, while with the new "as" has 2**2. The source
>> if simple (just one line of "float var[512] __attribute__((aligned(16)));"

see
http://sourceware.org/bugzilla/show_bug.cgi?id=5226, in particular the
testcase in comment #1

Note PE COFF does not support aligned common , so you may need to add
__attribute__((no_common)) to variable.

Danny

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]