[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: .gnu.warning.foo interferes with archive-member rules
From: |
H.J. Lu |
Subject: |
Re: .gnu.warning.foo interferes with archive-member rules |
Date: |
Tue, 7 Jun 2011 21:48:21 -0700 |
On Tue, Jun 7, 2011 at 2:08 AM, Alan Modra <address@hidden> wrote:
> On Mon, Jun 06, 2011 at 03:41:14PM -0700, Roland McGrath wrote:
>> Consider:
>>
>> % head ref.s def.s
>> ==> ref.s <==
>> .data
>> ptrsym:
>> .long badsym
>>
>> .section .gnu.warning.badsym,"",@progbits
>> .string "badsym warning"
>>
>> ==> def.s <==
>> .comm badsym,4
>> % as --32 -o ref.o ref.s
>> % as --32 -o def.o def.s
>> % ar cqs def.a def.o
>> % ./ld/ld-new -m elf_i386 -o foo ref.o def.a
>> ref.o: In function `ptrsym':
>> (.data+0x0): warning: badsym warning
>> ./ld/ld-new: warning: cannot find entry symbol _start; defaulting to
>> 0000000008048054
>> ref.o: In function `ptrsym':
>> (.data+0x0): undefined reference to `badsym'
>> [Exit 1]
>> %
>
> I think you've managed to hit two bugs. I'll commit the following
> after some testing.
>
> bfd/
> * elflink.c (_bfd_elf_archive_symbol_lookup): Follow warning and
> indirect links here.
> ld/
> * ldlang.c (lang_one_common): Handle warning symbols.
>
I checked in this testcase.
Thanks.
--
H.J.
---
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 5ee6f44..31d542d 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2011-06-07 H.J. Lu <address@hidden>
+
+ * ld-elf/elf.exp: Build symbol3.a and symbol3w.a.
+
+ * ld-elf/symbol3.s: New.
+ * ld-elf/symbol3w.s: Likewise.
+ * ld-elf/warn3.d: Likewise.
+
2011-06-02 Nathan Sidwell <address@hidden>
Adjust tests for zero offset formatting.
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index b9ff0bd..e991f83 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -40,6 +40,15 @@ if { [is_remote host] } then {
remote_download host merge.ld
}
+run_ld_link_tests {
+ {"Build symbol3.a"
+ "" ""
+ {symbol3.s} {} "symbol3.a"}
+ {"Build symbol3w.a"
+ "" ""
+ {symbol3w.s} {} "symbol3w.a"}
+}
+
set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
# We need to strip the ".d", but can leave the dirname.
diff --git a/ld/testsuite/ld-elf/symbol3.s b/ld/testsuite/ld-elf/symbol3.s
new file mode 100644
index 0000000..4fd76d5
--- /dev/null
+++ b/ld/testsuite/ld-elf/symbol3.s
@@ -0,0 +1 @@
+ .comm badsym,4
diff --git a/ld/testsuite/ld-elf/symbol3w.s b/ld/testsuite/ld-elf/symbol3w.s
new file mode 100644
index 0000000..33262a6
--- /dev/null
+++ b/ld/testsuite/ld-elf/symbol3w.s
@@ -0,0 +1,4 @@
+ .data
+ .dc.a badsym
+ .section .gnu.warning.badsym,"",%progbits
+ .string "badsym warning"
diff --git a/ld/testsuite/ld-elf/warn3.d b/ld/testsuite/ld-elf/warn3.d
new file mode 100644
index 0000000..c99618d
--- /dev/null
+++ b/ld/testsuite/ld-elf/warn3.d
@@ -0,0 +1,15 @@
+#source: start.s
+#ld: tmpdir/symbol3w.o tmpdir/symbol3.a
+#warning: .*: warning: badsym warning$
+#readelf: -s
+#notarget: "sparc64-*-solaris2*" "sparcv9-*-solaris2*"
+#xfail: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-elf i860-*-* i960-*-*
+#xfail: iq*-*-* mn10200-*-* moxie-*-* msp*-*-* mt-*-* or32-*-* pj*-*-*
+# if not using elf32.em, you don't get fancy section handling
+
+# Check that warnings are generated for the symbols in .gnu.warning
+# construct and that the symbol still appears as expected.
+
+#...
+ +[0-9]+: +[0-9a-f]+ +4 +OBJECT +GLOBAL +DEFAULT +[1-9] badsym
+#pass