This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: PATCH: PR 414: Linker crashes with mixed TLS/non-TLS symbols
- From: "H. J. Lu" <hjl at lucon dot org>
- To: binutils at sources dot redhat dot com
- Date: Fri, 1 Oct 2004 13:03:47 -0700
- Subject: Re: PATCH: PR 414: Linker crashes with mixed TLS/non-TLS symbols
- References: <200409221737.06059.pluto@pld-linux.org> <20040922155522.GB12940@lucon.org> <200409221827.29089.pluto@pld-linux.org> <20040929164702.GA21672@lucon.org> <20040929173833.GA22511@lucon.org> <20040929232640.GA3241@bubble.modra.org> <20041001021814.GA23666@bubble.modra.org> <20041001111220.GF17331@bubble.modra.org>
On Fri, Oct 01, 2004 at 08:42:20PM +0930, Alan Modra wrote:
> On Fri, Oct 01, 2004 at 11:48:14AM +0930, Alan Modra wrote:
> > HJ's patch brought to light some errors in the ld testsuite.
>
> Some more.
>
> * ld-s390/tlsbin.s: Set tls type for undefined syms.
> * ld-s390/tlsbin_64.s: Likewise.
> * ld-s390/tlsbinpic.s: Likewise.
> * ld-s390/tlsbinpic_64.s: Likewise.
> * ld-s390/tlspic1.s: Likewise.
> * ld-s390/tlspic1_64.s: Likewise.
> * ld-sparc/tlssunbin32.s: Likewise.
> * ld-sparc/tlssunbinpic32.s: Likewise.
> * ld-sparc/tlssunnopic32.s: Likewise.
> * ld-sparc/tlssunpic32.s: Likewise.
>
Those testsuite changes aren't needed. We should fix the assembler
instead. Here is a patch. I will check in my testsuite change first.
If there is no objection to my assembler change, I will check it in
later.
H.J.
---
gas/
2004-10-01 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-ppc.c (md_apply_fix3): Call S_SET_THREAD_LOCAL for
TLS relocations.
* config/tc-s390.c (md_apply_fix3): Likewise.
* config/tc-sparc.c (md_apply_fix3): Likewise.
ld/testsuite/
2004-10-01 H.J. Lu <hongjiu.lu@intel.com>
* ld-powerpc/tls.s: Don't set tls type for undefined syms.
* ld-powerpc/tls32.s: Likewise.
* ld-powerpc/tlstoc.s: Likewise.
* ld-s390/tlsbin.s: Likewise.
* ld-s390/tlsbin_64.s: Likewise.
* ld-s390/tlsbinpic.s: Likewise.
* ld-s390/tlsbinpic_64.s: Likewise.
* ld-s390/tlspic1.s: Likewise.
* ld-s390/tlspic1_64.s: Likewise.
* ld-sparc/tlssunbin32.s: Likewise.
* ld-sparc/tlssunbinpic32.s: Likewise.
* ld-sparc/tlssunnopic32.s: Likewise.
* ld-sparc/tlssunpic32.s: Likewise.
--- binutils/gas/config/tc-ppc.c.tls 2004-08-20 07:55:40.000000000 -0700
+++ binutils/gas/config/tc-ppc.c 2004-10-01 12:34:21.000000000 -0700
@@ -5885,6 +5885,7 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_PPC64_DTPREL16_HIGHERA:
case BFD_RELOC_PPC64_DTPREL16_HIGHEST:
case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
break;
#endif
/* Because SDA21 modifies the register field, the size is set to 4
--- binutils/gas/config/tc-s390.c.tls 2004-06-21 14:05:34.000000000 -0700
+++ binutils/gas/config/tc-s390.c 2004-10-01 12:53:55.000000000 -0700
@@ -2217,10 +2217,12 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_390_TLS_DTPMOD:
case BFD_RELOC_390_TLS_DTPOFF:
case BFD_RELOC_390_TLS_TPOFF:
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
/* Fully resolved at link time. */
break;
case BFD_RELOC_390_TLS_IEENT:
/* Fully resolved at link time. */
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
value += 2;
break;
--- binutils/gas/config/tc-sparc.c.tls 2004-03-15 10:51:08.000000000 -0800
+++ binutils/gas/config/tc-sparc.c 2004-10-01 12:51:06.000000000 -0700
@@ -3012,7 +3012,41 @@ md_apply_fix3 (fixP, valP, segment)
#ifdef OBJ_ELF
/* SPARC ELF relocations don't use an addend in the data field. */
if (fixP->fx_addsy != NULL)
- return;
+ {
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_SPARC_TLS_GD_HI22:
+ case BFD_RELOC_SPARC_TLS_GD_LO10:
+ case BFD_RELOC_SPARC_TLS_GD_ADD:
+ case BFD_RELOC_SPARC_TLS_GD_CALL:
+ case BFD_RELOC_SPARC_TLS_LDM_HI22:
+ case BFD_RELOC_SPARC_TLS_LDM_LO10:
+ case BFD_RELOC_SPARC_TLS_LDM_ADD:
+ case BFD_RELOC_SPARC_TLS_LDM_CALL:
+ case BFD_RELOC_SPARC_TLS_LDO_HIX22:
+ case BFD_RELOC_SPARC_TLS_LDO_LOX10:
+ case BFD_RELOC_SPARC_TLS_LDO_ADD:
+ case BFD_RELOC_SPARC_TLS_IE_HI22:
+ case BFD_RELOC_SPARC_TLS_IE_LO10:
+ case BFD_RELOC_SPARC_TLS_IE_LD:
+ case BFD_RELOC_SPARC_TLS_IE_LDX:
+ case BFD_RELOC_SPARC_TLS_IE_ADD:
+ case BFD_RELOC_SPARC_TLS_LE_HIX22:
+ case BFD_RELOC_SPARC_TLS_LE_LOX10:
+ case BFD_RELOC_SPARC_TLS_DTPMOD32:
+ case BFD_RELOC_SPARC_TLS_DTPMOD64:
+ case BFD_RELOC_SPARC_TLS_DTPOFF32:
+ case BFD_RELOC_SPARC_TLS_DTPOFF64:
+ case BFD_RELOC_SPARC_TLS_TPOFF32:
+ case BFD_RELOC_SPARC_TLS_TPOFF64:
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
+
+ default:
+ break;
+ }
+
+ return;
+ }
#endif
/* This is a hack. There should be a better way to
@@ -3330,6 +3364,33 @@ md_apply_fix3 (fixP, valP, segment)
insn |= 0x1c00 | (val & 0x3ff);
break;
+ case BFD_RELOC_SPARC_TLS_GD_HI22:
+ case BFD_RELOC_SPARC_TLS_GD_LO10:
+ case BFD_RELOC_SPARC_TLS_GD_ADD:
+ case BFD_RELOC_SPARC_TLS_GD_CALL:
+ case BFD_RELOC_SPARC_TLS_LDM_HI22:
+ case BFD_RELOC_SPARC_TLS_LDM_LO10:
+ case BFD_RELOC_SPARC_TLS_LDM_ADD:
+ case BFD_RELOC_SPARC_TLS_LDM_CALL:
+ case BFD_RELOC_SPARC_TLS_LDO_HIX22:
+ case BFD_RELOC_SPARC_TLS_LDO_LOX10:
+ case BFD_RELOC_SPARC_TLS_LDO_ADD:
+ case BFD_RELOC_SPARC_TLS_IE_HI22:
+ case BFD_RELOC_SPARC_TLS_IE_LO10:
+ case BFD_RELOC_SPARC_TLS_IE_LD:
+ case BFD_RELOC_SPARC_TLS_IE_LDX:
+ case BFD_RELOC_SPARC_TLS_IE_ADD:
+ case BFD_RELOC_SPARC_TLS_LE_HIX22:
+ case BFD_RELOC_SPARC_TLS_LE_LOX10:
+ case BFD_RELOC_SPARC_TLS_DTPMOD32:
+ case BFD_RELOC_SPARC_TLS_DTPMOD64:
+ case BFD_RELOC_SPARC_TLS_DTPOFF32:
+ case BFD_RELOC_SPARC_TLS_DTPOFF64:
+ case BFD_RELOC_SPARC_TLS_TPOFF32:
+ case BFD_RELOC_SPARC_TLS_TPOFF64:
+ S_SET_THREAD_LOCAL (fixP->fx_addsy);
+ break;
+
case BFD_RELOC_NONE:
default:
as_bad_where (fixP->fx_file, fixP->fx_line,
--- binutils/ld/testsuite/ld-powerpc/tls.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-powerpc/tls.s 2004-10-01 12:38:16.000000000 -0700
@@ -19,9 +19,6 @@ ie4: .quad 0x56789abcdef01234
le4: .quad 0x6789abcdef012345
le5: .quad 0x789abcdef0123456
- .type gd,@tls_object
- .type ld,@tls_object
-
.text
_start:
#extern syms
--- binutils/ld/testsuite/ld-powerpc/tls32.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-powerpc/tls32.s 2004-10-01 12:38:16.000000000 -0700
@@ -19,9 +19,6 @@ ie4: .long 0x56789abc
le4: .long 0x6789abcd
le5: .long 0x789abcde
- .type gd,@tls_object
- .type ld,@tls_object
-
.text
_start:
#extern syms
--- binutils/ld/testsuite/ld-powerpc/tlstoc.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-powerpc/tlstoc.s 2004-10-01 12:38:16.000000000 -0700
@@ -19,9 +19,6 @@ ie4: .quad 0x56789abcdef01234
le4: .quad 0x6789abcdef012345
le5: .quad 0x789abcdef0123456
- .type gd,@tls_object
- .type ld,@tls_object
-
.text
_start:
#extern syms
--- binutils/ld/testsuite/ld-s390/tlsbin.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlsbin.s 2004-10-01 12:41:50.000000000 -0700
@@ -16,11 +16,6 @@ bl5: .space 4
bl6: .space 4
bl7: .space 4
bl8: .space 4
-
- .type sG6,@tls_object
- .type sh6,@tls_object
- .type sg3,@tls_object
-
.text
.globl _start
.type _start,@function
--- binutils/ld/testsuite/ld-s390/tlsbin_64.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlsbin_64.s 2004-10-01 12:41:50.000000000 -0700
@@ -16,11 +16,6 @@ bl5: .space 4
bl6: .space 4
bl7: .space 4
bl8: .space 4
-
- .type sG6,@tls_object
- .type sh6,@tls_object
- .type sg3,@tls_object
-
.text
.globl _start
.type _start,@function
--- binutils/ld/testsuite/ld-s390/tlsbinpic.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlsbinpic.s 2004-10-01 12:41:50.000000000 -0700
@@ -28,11 +28,6 @@ sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
-
- .type sG1,@tls_object
- .type sG2,@tls_object
- .type sG3,@tls_object
-
.text
.globl fn2
.type fn2,@function
--- binutils/ld/testsuite/ld-s390/tlsbinpic_64.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlsbinpic_64.s 2004-10-01 12:41:50.000000000 -0700
@@ -28,11 +28,6 @@ sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
-
- .type sG1,@tls_object
- .type sG2,@tls_object
- .type sG3,@tls_object
-
.text
.globl fn2
.type fn2,@function
--- binutils/ld/testsuite/ld-s390/tlspic1.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlspic1.s 2004-10-01 12:41:50.000000000 -0700
@@ -27,11 +27,6 @@ sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
-
- .type sH1,@tls_object
- .type sH2,@tls_object
- .type sH5,@tls_object
-
.text
.globl fn1
.type fn1,@function
--- binutils/ld/testsuite/ld-s390/tlspic1_64.s.tls 2004-10-01 12:01:56.000000000 -0700
+++ binutils/ld/testsuite/ld-s390/tlspic1_64.s 2004-10-01 12:41:50.000000000 -0700
@@ -27,11 +27,6 @@ sh5: .long 261
sh6: .long 262
sh7: .long 263
sh8: .long 264
-
- .type sH1,@tls_object
- .type sH2,@tls_object
- .type sH5,@tls_object
-
.text
.globl fn1
.type fn1,@function
--- binutils/ld/testsuite/ld-sparc/tlssunbin32.s.tls 2004-10-01 12:01:57.000000000 -0700
+++ binutils/ld/testsuite/ld-sparc/tlssunbin32.s 2004-10-01 12:41:50.000000000 -0700
@@ -17,14 +17,6 @@ bl5: .word 0
bl6: .word 0
bl7: .word 0
bl8: .word 0
-
- .type sg2,@tls_object
- .type sg3,@tls_object
- .type sG6,@tls_object
- .type sh2,@tls_object
- .type sh3,@tls_object
- .type sh6,@tls_object
-
.text
.globl _start
.type _start,#function
--- binutils/ld/testsuite/ld-sparc/tlssunbinpic32.s.tls 2004-10-01 12:01:57.000000000 -0700
+++ binutils/ld/testsuite/ld-sparc/tlssunbinpic32.s 2004-10-01 12:41:50.000000000 -0700
@@ -30,11 +30,6 @@ sh5: .word 261
sh6: .word 262
sh7: .word 263
sh8: .word 264
-
- .type sG1,@tls_object
- .type sG2,@tls_object
- .type sG5,@tls_object
-
.text
.align 4096
.LLGETPC0:
--- binutils/ld/testsuite/ld-sparc/tlssunnopic32.s.tls 2004-10-01 12:01:57.000000000 -0700
+++ binutils/ld/testsuite/ld-sparc/tlssunnopic32.s 2004-10-01 12:41:50.000000000 -0700
@@ -7,11 +7,6 @@ bl2: .word 0
bl3: .word 0
bl4: .word 0
bl5: .word 0
-
- .type sh1,@tls_object
- .type sh2,@tls_object
- .type sh3,@tls_object
-
.text
.align 4096
.globl fn3
--- binutils/ld/testsuite/ld-sparc/tlssunpic32.s.tls 2004-10-01 12:01:57.000000000 -0700
+++ binutils/ld/testsuite/ld-sparc/tlssunpic32.s 2004-10-01 12:41:50.000000000 -0700
@@ -30,10 +30,6 @@ sh6: .word 262
sh7: .word 263
sh8: .word 264
- .type sH1,@tls_object
- .type sH2,@tls_object
- .type sH5,@tls_object
-
.text
.align 4096
.LLGETPC0: