libmudflap and emutls question

Jie Zhang jie.zhang@analog.com
Wed Jan 7 09:55:00 GMT 2009


Hi Paolo,

Paolo Bonzini wrote:
>> Both are same.
> 
> Ah, I see, the call is optimized out because __emutls_get_address is
> const.  You can try
> 
>   __thread int a;
>   int main () {
>     return *(int *)__emutls_get_address ((void *)0) == a;
>   }
> 
> I don't have an emutls target at hand, but it does fail on Linux.
> 
Which version of gcc did you use? gcc 4.1 (maybe and 4.2) will report 
error. But gcc 4.3 compiles OK. I tested using x86_64 native gcc from 
Debian unstable.  __emutls_get_address is defined in libgcc even the 
target has real TLS.

/usr/lib/gcc/x86_64-linux-gnu$ readelf -a ./4.3/libgcc_s.so | grep emutls
     28: 0000000000013a80   390 FUNC    GLOBAL DEFAULT   12 
__emutls_get_address@@GCC_4.3.0
    136: 0000000000013970    57 FUNC    GLOBAL DEFAULT   12 
__emutls_register_common@@GCC_4.3.0


Regards,
Jie



More information about the Gcc mailing list