aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2016-07-20 15:06:49 +0930
committerAlan Modra <amodra@gmail.com>2016-07-21 11:30:34 +0930
commit5df1bc570fcc5ef5257b7a044acdaeb6b95b9822 (patch)
treeb0992244c629eaa0646c2dfd99dcf6487066f4f3
parentc092a4d9154f09e6c67648efb723878d7a74f44f (diff)
downloadgdb-5df1bc570fcc5ef5257b7a044acdaeb6b95b9822.zip
gdb-5df1bc570fcc5ef5257b7a044acdaeb6b95b9822.tar.gz
gdb-5df1bc570fcc5ef5257b7a044acdaeb6b95b9822.tar.bz2
Fix implib test failures
bfd/ * elf.c (_bfd_elf_filter_global_symbols): Skip local symbols. (swap_out_syms): Return an error when not finding ELF output section rather than asserting. * elflink.c (elf_output_implib): Call bfd_set_error on no symbols. ld/ * testsuite/lib/ld-lib.exp (run_ld_link_tests): Add optional parameter to pass list of xfails. * testsuite/ld-elf/elf.exp: Add xfails for implib tests. Tidy implib test formatting. Don't set .data start address. * testsuite/ld-elf/implib.s: Remove first .bss directive and replace second one with equivalent .section directive. * testsuite/ld-elf/empty-implib.out: Add expected final error. * testsuite/ld-elf/implib.rd: Update.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elf.c10
-rw-r--r--bfd/elflink.c1
-rw-r--r--ld/ChangeLog11
-rw-r--r--ld/testsuite/ld-elf/elf.exp41
-rw-r--r--ld/testsuite/ld-elf/empty-implib.out1
-rw-r--r--ld/testsuite/ld-elf/implib.rd12
-rw-r--r--ld/testsuite/ld-elf/implib.s3
-rw-r--r--ld/testsuite/lib/ld-lib.exp8
9 files changed, 72 insertions, 25 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ddf29bf..b145feb 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2016-07-21 Nick Clifton <nickc@redhat.com>
+
+ * elf.c (_bfd_elf_filter_global_symbols): Skip local symbols.
+ (swap_out_syms): Return an error when not finding ELF output
+ section rather than asserting.
+
+2016-07-21 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ * elflink.c (elf_output_implib): Call bfd_set_error on no symbols.
+
2016-07-20 John Baldwin <jhb@FreeBSD.org>
* elf.c (elfcore_grok_freebsd_psinfo): Check for minimum note size
diff --git a/bfd/elf.c b/bfd/elf.c
index ba1774e..274cd53 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -3893,9 +3893,10 @@ _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
continue;
h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
+ if (h == NULL)
+ continue;
if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
continue;
-
if (h->linker_def || h->ldscript_def)
continue;
@@ -7643,7 +7644,9 @@ error_return:
section of a symbol to be a section that is
actually in the output file. */
sec2 = bfd_get_section_by_name (abfd, sec->name);
- if (sec2 == NULL)
+ if (sec2 != NULL)
+ shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
+ if (shndx == SHN_BAD)
{
_bfd_error_handler (_("\
Unable to find equivalent output section for symbol '%s' from section '%s'"),
@@ -7652,9 +7655,6 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"),
bfd_set_error (bfd_error_invalid_operation);
goto error_return;
}
-
- shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
- BFD_ASSERT (shndx != SHN_BAD);
}
}
diff --git a/bfd/elflink.c b/bfd/elflink.c
index a994b83..5bc5740 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -11091,6 +11091,7 @@ elf_output_implib (bfd *abfd, struct bfd_link_info *info)
symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount);
if (symcount == 0)
{
+ bfd_set_error (bfd_error_no_symbols);
(*_bfd_error_handler) (_("%B: no symbol found for import library"),
implib_bfd);
goto free_sym_buf;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a2493d0..ad26f62 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,14 @@
+2016-07-21 Alan Modra <amodra@gmail.com>
+
+ * testsuite/lib/ld-lib.exp (run_ld_link_tests): Add optional
+ parameter to pass list of xfails.
+ * testsuite/ld-elf/elf.exp: Add xfails for implib tests. Tidy
+ implib test formatting. Don't set .data start address.
+ * testsuite/ld-elf/implib.s: Remove first .bss directive and
+ replace second one with equivalent .section directive.
+ * testsuite/ld-elf/empty-implib.out: Add expected final error.
+ * testsuite/ld-elf/implib.rd: Update.
+
2016-07-20 H.J. Lu <hongjiu.lu@intel.com>
PR ld/20376
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 832f313..b67105f 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -136,21 +136,40 @@ foreach t $test_list {
run_dump_test [file rootname $t]
}
+# Targets using the generic linker backend don't support generating
+# an import library.
+set xfail_implib ""
+if { [istarget "d30v-*-*"]
+ || [istarget "dlx-*-*"]
+ || [istarget "fr30-*-*"]
+ || ([istarget "frv-*-*"] && ![istarget "frv-*-linux*"])
+ || [istarget "ft32-*-*"]
+ || [istarget "i860-*-*"]
+ || [istarget "i960-*-*"]
+ || [istarget "iq2000-*-*"]
+ || [istarget "mn10200-*-*"]
+ || [istarget "moxie-*-*"]
+ || [istarget "msp430-*-*"]
+ || [istarget "mt-*-*"]
+ || [istarget "pj*-*-*"] } {
+ set xfail_implib "*-*-*"
+}
+
# Check that the --out-implib option work correctly.
run_ld_link_tests {
{"Generate empty import library"
- "--out-implib=tmpdir/implib.lib" ""
- "--defsym NO_GLOBAL=1"
- {implib.s}
- {{ld empty-implib.out}}
- "implib"}
+ "--out-implib=tmpdir/implib.lib" ""
+ "--defsym NO_GLOBAL=1"
+ {implib.s}
+ {{ld empty-implib.out}}
+ "implib"}
{"Generate import library"
- "-Tdata=0x1000 --out-implib=tmpdir/implib.lib" ""
- ""
- {implib.s}
- {{readelf {-s tmpdir/implib.lib} implib.rd}}
- "implib"}
-}
+ "--out-implib=tmpdir/implib.lib" ""
+ ""
+ {implib.s}
+ {{readelf {-s tmpdir/implib.lib} implib.rd}}
+ "implib"}
+} $xfail_implib
if { [istarget *-*-linux*]
|| [istarget *-*-nacl*]
diff --git a/ld/testsuite/ld-elf/empty-implib.out b/ld/testsuite/ld-elf/empty-implib.out
index b123064..f611eb7 100644
--- a/ld/testsuite/ld-elf/empty-implib.out
+++ b/ld/testsuite/ld-elf/empty-implib.out
@@ -1,2 +1,3 @@
.*: .*: no symbol found for import library
.*: .*: failed to generate import library
+.*: final link failed: No symbols
diff --git a/ld/testsuite/ld-elf/implib.rd b/ld/testsuite/ld-elf/implib.rd
index 9f854a5..6835f39 100644
--- a/ld/testsuite/ld-elf/implib.rd
+++ b/ld/testsuite/ld-elf/implib.rd
@@ -1,10 +1,10 @@
-File: tmpdir/implib.lib
+File: tmpdir/implib\.lib
-Symbol table '.symtab' contains 3 entries:
- Num: Value +Size Type Bind Vis Ndx Name
- 0: [0-9a-f]+ 0 NOTYPE LOCAL DEFAULT UND
- 1: 0+100[0-3] 1 OBJECT GLOBAL DEFAULT ABS exported1
- 2: 0+100[0-3] 1 OBJECT GLOBAL DEFAULT ABS exported2
+Symbol table '\.symtab' contains 3 entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+ +0: [0-9a-f]+ +0 NOTYPE +LOCAL +DEFAULT +UND
+ +1: [0-9a-f]+ +1 OBJECT +GLOBAL DEFAULT +ABS exported1
+ +2: [0-9a-f]+ +1 OBJECT +GLOBAL DEFAULT +ABS exported2
File: tmpdir/implib
diff --git a/ld/testsuite/ld-elf/implib.s b/ld/testsuite/ld-elf/implib.s
index a86a940..e4d527b 100644
--- a/ld/testsuite/ld-elf/implib.s
+++ b/ld/testsuite/ld-elf/implib.s
@@ -1,5 +1,4 @@
.ifndef NO_GLOBAL
- .bss
.comm exported1,1
.data
@@ -10,7 +9,7 @@ exported2:
.byte 21
.endif
- .bss
+ .section ".bss", "aw", %nobits
not_exported1:
.space 1
.size not_exported1, 1
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 62f9768..9cd1959 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1159,7 +1159,9 @@ proc ar_simple_create { ar aropts target objects } {
# in all other cases, any output from the linker during linking is
# treated as a sign of an error and FAILs the test.
#
-proc run_ld_link_tests { ldtests } {
+# args is an optional list of target triplets to be xfailed.
+#
+proc run_ld_link_tests { ldtests args } {
global ld
global as
global nm
@@ -1188,6 +1190,10 @@ proc run_ld_link_tests { ldtests } {
continue
}
+ foreach target $args {
+ setup_xfail $target
+ }
+
set ld_options [lindex $testitem 1]
set ld_after [lindex $testitem 2]
set as_options [lindex $testitem 3]