Fix for gold linking tlsdesc into an executable with -pie.
authorHan Shen <shenhan@google.com>
Wed, 26 Nov 2014 18:34:46 +0000 (10:34 -0800)
committerHan Shen <shenhan@google.com>
Wed, 26 Nov 2014 18:34:46 +0000 (10:34 -0800)
commitbb779192aecf89975aef7a16e1ea67789b5f38dd
treec3c230aa3d4caa79a8a62eaa4b9de8ec6fa41f8a
parenta11652892c18324bf3abb8b25c01475e5a18632a
Fix for gold linking tlsdesc into an executable with -pie.
(Also included in this patch is a minor typo fix in gold/ChangeLog.)

When linking the following tlsdesc access sequence into an executable with -pie,

     adrp    x0, :tlsdesc:tls_gd
     ldr     x1, [x0, #:tlsdesc_lo12:tls_gd]
     add     x0, x0, :tlsdesc_lo12:tls_gd
     .tlsdesccall    tls_gd
     blr      x1
     mrs      x1, tpidr_el0
     add      x0, x1, x0
     ldr      w0, [x0]

current gold-aarch64 backend does tls-desc-gd-to-ie relaxation, into

       adrp    x0, 1000 <__FRAME_END__+0x720>
       ldr     x1, [x0,#4064]   ;; <=== the target register should be x0
       nop
       nop
       mrs x1, tpidr_el0
       add x0, x1, x0
       ldr w0, [x0]

This code is wrong. The fix changes ldr target register into x0.
gold/ChangeLog
gold/aarch64.cc