PATCH: PR target/47715: [x32] TLS doesn't work

Uros Bizjak ubizjak@gmail.com
Thu Jul 28 07:44:00 GMT 2011


On Thu, Jul 28, 2011 at 4:55 AM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> TLS on X32 is almost identical to TLS on x86-64.  The only difference is
> x32 address space is 32bit.  That means TLS symbols can be in either
> SImode or DImode with upper 32bit zero.  This patch updates
> tls_global_dynamic_64 to support x32.  OK for trunk?

> 2011-07-27  H.J. Lu  <hongjiu.lu@intel.com>
>
>        PR target/47715
>        * config/i386/i386.md (PTR64): New.
>        (*tls_global_dynamic_64): Rename to ...
>        (*tls_global_dynamic_64_<mode>): This.  Put PTR64 on operand 1.
>        (tls_global_dynamic_64): Rename to ...
>        (tls_global_dynamic_64_<mode>): This.  Put PTR64 on operand 1.
>        * config/i386/i386.c (legitimize_tls_address): Updated.

Just remove mode check, so:

(unspec:DI [(match_operand 1 "tls_symbolic_operand" "")]

at both sites.

-  fputs (ASM_BYTE "0x66\n", asm_out_file);
+  if (!TARGET_X32)
+    fputs (ASM_BYTE "0x66\n", asm_out_file);

Are you sure? There are some scary comments in binutils that these
sequences have to be written _exactly_ as shown to enable certain
linker relaxations w.r.t. TLS relocs.

Uros.



More information about the Gcc-patches mailing list