This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH, binutils] Fix implib test failures
- From: Thomas Preudhomme <thomas dot preudhomme at foss dot arm dot com>
- To: binutils at sourceware dot org
- Cc: Nick Clifton <nickc at redhat dot com>, amodra at gmail dot com
- Date: Wed, 20 Jul 2016 17:16:32 +0100
- Subject: Re: [PATCH, binutils] Fix implib test failures
- Authentication-results: sourceware.org; auth=none
- References: <1550516.5AJhRDy2yK@e108577-lin> <2932070.2gxsOoQsSX@e108577-lin> <473bc94e-2c40-4e9b-8893-6c2ddc0ca68c@redhat.com>
On Tuesday 19 July 2016 16:34:26 Nick Clifton wrote:
> Hi Thomas,
>
> >> +setup_xfail "am33lin-*-*" "d30v-*-*" "dlx-*-*" "i960-*-*" "m68hc1x-*-*"
> >> +setup_xfail "m88k-*-*" "pj-*-*" "score7-*-*" "sh64-*-*" "vxworks-*-*"
> >>
> >> There are other score targets apart from score7. score-elf and
> >> score3-elf
> >>
> >> for example. How about score*-*-* instead ?
> >
> > I did not know how to get the affected triplet. All I got was a list of
> > bfd/elf*-*.c that do not define elf_backend_relocate_section. I use the
> > the
> > value for the second * as the machine bit of the triplet.
>
> Right, and you skipped the elfxx-*.c targets that matched this test as well,
> right. I think that the test should be any elf*.c file that does not
> define elf_backend_relocate section or reference bfd_elf_final_link and
> which *does* include elfNN-target.h - ie one which creates an
> elf_backend_data structure.
>
> So I think that you can skip vxworks entirely here, since elf-vxworks.c is
> just a support file for vxworks targets, and not a cpu type by itself.
> (Similarly for am33lin which just #include's elf-m10300.c which then does
> define elf_backend_relocate_section.
>
> > Are there other
> > triplet in this list you see as not being inclusive enough?
>
> Nope.
>
> > How can I find the
> > list of triplet corresponding to a given bfd file?
>
> Look in bfd/configure.ac. Starting at around line 382 there is a list
> of targets and the target specific files that they need. A little bit
> of searching can tell you which files are used by which targets.
Alright, I removed vxworks and am33lin and use score*-*-* as suggested. I also
removed m68hc1x (either elf32-m68hc11.c or bfd/elf32-m68hc12.c are used and
they define elf_backend_relocate_section). I'm still puzzled at score since I
only see one line for it which does not suggest me that there is several value
possible. I'm also unsure about sh64 whose sh64_elf32_vec variant does not
define elf_backend_relocate_section.
Alan, you seem to already have an automated build setup with all possible
targets. Would you mind letting me know if the attached updated patch fixes
everything?
Best regards,
Thomas
diff --git a/bfd/elf.c b/bfd/elf.c
index ebcf40a92578b588c19312b1e4e521fff8ddad14..2d5f69c5f4392cf4dec73edd4e95a5260d2db239 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;
@@ -7641,7 +7642,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'"),
@@ -7650,9 +7653,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 a994b839f9c152b276912ee0b596eda822bd2acc..5bc57408e47056d8c393f7247ab6312927c598cc 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/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
index 832f313c5b4f290a37df83d5e5dfcd4c3e624cb0..702c9b51a9a268b70f802b78dddf9b8f8389dd51 100644
--- a/ld/testsuite/ld-elf/elf.exp
+++ b/ld/testsuite/ld-elf/elf.exp
@@ -136,6 +136,10 @@ foreach t $test_list {
run_dump_test [file rootname $t]
}
+# These targets use bfd_generic_final_link rather than bfd_elf_final_link and
+# thus do not have support for ELF import library
+setup_xfail "d30v-*-*" "dlx-*-*" "i960-*-*" "m88k-*-*" "pj-*-*" "score*-*-*"
+setup_xfail "sh64-*-*"
# Check that the --out-implib option work correctly.
run_ld_link_tests {
{"Generate empty import library"
@@ -145,7 +149,7 @@ run_ld_link_tests {
{{ld empty-implib.out}}
"implib"}
{"Generate import library"
- "-Tdata=0x1000 --out-implib=tmpdir/implib.lib" ""
+ "--out-implib=tmpdir/implib.lib" ""
""
{implib.s}
{{readelf {-s tmpdir/implib.lib} implib.rd}}
diff --git a/ld/testsuite/ld-elf/empty-implib.out b/ld/testsuite/ld-elf/empty-implib.out
index b123064df3f6f429c59fe204d57e57ed76a8d5be..cc6a9f47726c93be36b33e1b5252684b65573c84 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
+#...
diff --git a/ld/testsuite/ld-elf/implib.rd b/ld/testsuite/ld-elf/implib.rd
index 9f854a59bd26054a8fdb49f6dbaac4120b2c7ef1..41ee435ec5d14f283a3aaca97355a956e097a97f 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
+ +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 a86a940c138d7dd65e42c609adbe594c579061ac..e4d527b22939163f796b73109ee63680bd030aed 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