This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Committed: fix a few COMMON bugs in elf32-cris.c
- From: Hans-Peter Nilsson <hans-peter dot nilsson at axis dot com>
- To: binutils at sourceware dot org
- Date: Wed, 25 Mar 2009 04:07:35 +0100
- Subject: Committed: fix a few COMMON bugs in elf32-cris.c
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