Committed: fix a few COMMON bugs in elf32-cris.c

Hans-Peter Nilsson hans-peter.nilsson@axis.com
Wed Mar 25 03:07:00 GMT 2009


Many more places miss a check for ELF_COMMON_DEF_P (h),
including regular relocations.  I won't "fix" anything here
without adding test-cases here, though.

Tested cris-elf and cris-axis-linux-gnu, committed.

bfd:
	* elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_32_GD>
	<R_CRIS_16_GOT_GD, case R_CRIS_32_GOT_GD>: Handle COMMON symbols.
	<case R_CRIS_16_TPREL, R_CRIS_32_TPREL>: Ditto.

ld/testsuite:
	* ld-cris/tls-e-dtpoffd3.d, ld-cris/tls-e-tpoffcomm1.d,
	ld-cris/tls-e-tpoffcomm1.s: New tests.


Index: elf32-cris.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-cris.c,v
retrieving revision 1.103
diff -p -u -r1.103 elf32-cris.c
--- elf32-cris.c	24 Mar 2009 07:57:21 -0000	1.103
+++ elf32-cris.c	25 Mar 2009 02:51:28 -0000
@@ -1733,7 +1733,8 @@ cris_elf_relocate_section (output_bfd, i
 	      return FALSE;
 	    }
 
-	  if (!info->shared && (h == NULL || h->def_regular))
+	  if (!info->shared
+	      && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h)))
 	    {
 	      /* Known contents of the GOT.  */
 	      bfd_vma off;
@@ -2000,7 +2001,7 @@ cris_elf_relocate_section (output_bfd, i
 
 	  if (h != NULL
 	      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-	      && !h->def_regular
+	      && !(h->def_regular || ELF_COMMON_DEF_P (h))
 	      /* If it's undefined, then an error message has already
 		 been emitted.  */
 	      && h->root.type != bfd_link_hash_undefined)

Index: ld-cris/tls-e-dtpoffd3.d
===================================================================
RCS file: ld-cris/tls-e-dtpoffd3.d
diff -N ld-cris/tls-e-dtpoffd3.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld-cris/tls-e-dtpoffd3.d	25 Mar 2009 03:00:47 -0000
@@ -0,0 +1,32 @@
+#source: start1.s
+#source: tls-dtpoffdx.s
+#source: tls-gd-1.s
+#source: tls128.s
+#source: tls-commx.s
+#as: --no-underscore --em=criself --pic -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -t -r -p
+
+.*:     file format elf32-cris
+
+Program Header:
+#...
+     TLS off  .*
+         filesz 0x0+80 memsz 0x0+84 flags r--
+private flags = 0:
+
+SYMBOL TABLE:
+#...
+0+80 g       .tbss	0+4 x
+#...
+Contents of section .text:
+ 80094 41b20000 5fae0c00                    .*
+Contents of section .tdata:
+#...
+Contents of section .got:
+ 8211c 00000000 00000000 00000000 01000000  .*
+ 8212c 80000000                             .*
+Contents of section .debug_info:
+ 0000 fcffffff                             .*
+Contents of section .debug_line:
+#pass
Index: ld-cris/tls-e-tpoffcomm1.d
===================================================================
RCS file: ld-cris/tls-e-tpoffcomm1.d
diff -N ld-cris/tls-e-tpoffcomm1.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld-cris/tls-e-tpoffcomm1.d	25 Mar 2009 03:00:47 -0000
@@ -0,0 +1,45 @@
+#source: start1.s
+#source: tls-e-tpoffcomm1.s
+#as: --no-underscore --em=criself -I$srcdir/$subdir
+#ld: -m crislinux
+#objdump: -d -s -h -t -r -p
+
+# Make sure we can link a file with TPOFF relocs against common
+# symbols.
+
+.*:     file format elf32-cris
+
+Program Header:
+    LOAD off    0x0+ vaddr 0x0+80000 paddr 0x0+80000 align 2\*\*13
+         filesz 0x0+a4 memsz 0x0+a4 flags r-x
+    LOAD off    0x0+a4 vaddr 0x0+820a4 paddr 0x0+820a4 align 2\*\*13
+         filesz 0x0+ memsz 0x0+ flags rw-
+     TLS off    0x0+a4 vaddr 0x0+820a4 paddr 0x0+820a4 align 2\*\*2
+         filesz 0x0+ memsz 0x0+8 flags r--
+private flags = 0:
+
+Sections:
+Idx Name          Size      VMA       LMA       File off  Algn
+  0 .text         0+10  0+80094  0+80094  0+94  2\*\*1
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+  1 .tbss         0+8  0+820a4  0+820a4  0+a4  2\*\*2
+                  ALLOC, THREAD_LOCAL
+SYMBOL TABLE:
+0+80094 l    d  .text	0+ .text
+0+820a4 l    d  .tbss	0+ .tbss
+0+80098 l     F .text	0+c do_test
+0+80094 g       .text	0+ _start
+0+820a4 g       \*ABS\*	0+ __bss_start
+0+ g       .tbss	0+4 foo
+0+820a4 g       \*ABS\*	0+ _edata
+0+820c0 g       \*ABS\*	0+ _end
+0+4 g       .tbss	0+4 bar
+#...
+Disassembly of section .text:
+
+00080094 <_start>:
+   80094:	41b2                	moveq 1,\$r11
+#...
+00080098 <do_test>:
+   80098:	2f0e f8ff ffff      	add.d 0xfffffff8,\$r0
+   8009e:	2f1e fcff ffff      	add.d 0xfffffffc,\$r1
Index: ld-cris/tls-e-tpoffcomm1.s
===================================================================
RCS file: ld-cris/tls-e-tpoffcomm1.s
diff -N ld-cris/tls-e-tpoffcomm1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld-cris/tls-e-tpoffcomm1.s	25 Mar 2009 03:00:47 -0000
@@ -0,0 +1,9 @@
+	.tls_common foo,4,4
+	.tls_common bar,4,4
+	.text
+	.align 1
+	.type	do_test, @function
+do_test:
+	add.d foo:TPOFF,$r0
+	add.d bar:TPOFF,$r1
+	.size	do_test, .-do_test

brgds, H-P



More information about the Binutils mailing list