This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: PR 414: Linker crashes with mixed TLS/non-TLS symbols


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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]