[patch bfd]: Fix generation of .tls directory entry

Kai Tietz ktietz70@googlemail.com
Tue Dec 21 14:15:00 GMT 2010


2010/12/21 Dave Korn <dave.korn.cygwin@gmail.com>:
> On 21/12/2010 11:03, Kai Tietz wrote:
>> 2010/12/21 Kai Tietz <ktietz70@googlemail.com>:
>
>>> I found the issue.
>
>  Thanks for persisting.
>
>>> The cause for this is that bfd searches for
>>> '__tls_used', which is the underscored version of '_tls_used'
>>> variable. Caused by the fact that x64 windows doesn't prefix symbols
>>> by underscore, the symbol wasn't found, as it remains '_tls_used'.
>>>
>>> So we have two chances here to solve this: a) Change for windows x64
>>> the symbol to '__tls_used', or b) search in bfd for x64 windows for
>>> '_tls_used' instead of '_tls_used'.
>
>  We should do whatever MSVC does when targeting 64-bit windows, shouldn't we?
>
>> This patch should fix this underscoring issue (should affect wince arm too).
>
>  This is clearly a much better solution! :)
>
>>         * peXXigen.c (_bfd_XXi_final_link_postscript): Use
>>         TARGET_UNDERSCORE to determine "_tls_used" name.
>>         (TARGET_UNDERSCORE): Define to default zero, if not present.
>>
>>         * ld-pe/pe.exp: Add TLS directory test.
>>         * ld-pe/tlssec.s: New.
>>         * ld-pe/tlssec64.d: New.
>>         * ld-pe/tlssec32.d: New.
>>
>> Tested for x86_64-w64-mingw32, i686-pc-mingw32, and i686-pc-cygwin. Ok
>> for apply?
>
>  OK with one change: please move the TARGET_UNDERSCORE default definition up
> to the top of the file, underneath the header includes, where there are
> already some other macro definitions getting adjusted.  (I think it's cleaner
> not to have supposedly global symbols suddenly entering scope half way through
> a file...)
>
>  Also, please do verify that the MS 64-bit compiler does the same thing.  (It
> seems very highly likely that it does, which is why I'm OK for the patch to go
> in first and you to adjust it afterwards if necessary.)
>
>    cheers,
>      DaveK
>
>

Ok, I remove this TARGET_UNDERSCORE use at all. It would be always the
default definition, which is for 32-bit wrong. Instead I replace in
patch its use by bfd_get_symbol_leading_char(abfd). Updated patch
comes soon, after testing.

Kai

-- 
|  (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination



More information about the Binutils mailing list