This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, binutils] Fix implib test failures


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]