public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] ld: Improve thin archive member error message
@ 2021-12-25  0:13 H.J. Lu
  2022-01-04 16:11 ` H.J. Lu
  0 siblings, 1 reply; 3+ messages in thread
From: H.J. Lu @ 2021-12-25  0:13 UTC (permalink / raw)
  To: binutils

Improve thin archive member error message with:

ld: libbar.a(bar.o): error opening thin archive member: No such file or directory

instead of

ld: libbar.a: error adding symbols: No such file or directory

	PR ld/28722
	* archive.c (_bfd_get_elt_at_filepos): Add a pointer argument
	for struct bfd_link_info.  Call linker callback when failing to
	open thin archive member.
	(_bfd_generic_get_elt_at_index): Pass NULL to
	_bfd_get_elt_at_filepos.
	(bfd_generic_openr_next_archived_file): Likewise.
	* coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Add a pointer
	argument for struct bfd_link_info and pass it to
	_bfd_get_elt_at_filepos.
	(alpha_ecoff_openr_next_archived_file): Pass NULL to
	_bfd_get_elt_at_filepos.
	(alpha_ecoff_get_elt_at_index): Likewise.
	* coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Likewise.
	* ecoff.c (ecoff_link_add_archive_symbols): Pass info to
	backend->get_elt_at_filepos.
	* elflink.c (elf_link_is_defined_archive_symbol): info to
	_bfd_get_elt_at_filepos.
	* libbfd-in.h (_bfd_get_elt_at_filepos): Add a pointer argument
	for struct bfd_link_info.
	* libbfd.h: Regenerate.
	* libecoff.h (ecoff_backend_data): Add a pointer argument for
	struct bfd_link_info to get_elt_at_filepos.
	* linker.c (_bfd_generic_link_add_archive_symbols): Pass info to
	_bfd_get_elt_at_filepos.
---
 bfd/archive.c     | 32 ++++++++++++++++++++++++++------
 bfd/coff-alpha.c  | 10 ++++++----
 bfd/coff-rs6000.c |  2 +-
 bfd/ecoff.c       |  4 +++-
 bfd/elflink.c     |  5 +++--
 bfd/libbfd-in.h   |  2 +-
 bfd/libbfd.h      |  2 +-
 bfd/libecoff.h    |  2 +-
 bfd/linker.c      |  3 ++-
 9 files changed, 44 insertions(+), 18 deletions(-)

diff --git a/bfd/archive.c b/bfd/archive.c
index dc173560130..7003a5d8866 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -651,7 +651,8 @@ _bfd_append_relative_path (bfd *arch, char *elt_name)
    element, since it handles the bookkeeping so nicely for us.  */
 
 bfd *
-_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
+_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos,
+			 struct bfd_link_info *info)
 {
   struct areltdata *new_areldata;
   bfd *n_bfd;
@@ -694,7 +695,8 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 	      free (new_areldata);
 	      return NULL;
 	    }
-	  n_bfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
+	  n_bfd = _bfd_get_elt_at_filepos (ext_arch,
+					   new_areldata->origin, info);
 	  if (n_bfd == NULL)
 	    {
 	      free (new_areldata);
@@ -715,8 +717,26 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 	 open the external file as a bfd.  */
       bfd_set_error (bfd_error_no_error);
       n_bfd = open_nested_file (filename, archive);
-      if (n_bfd == NULL && bfd_get_error () == bfd_error_no_error)
-	bfd_set_error (bfd_error_malformed_archive);
+      if (n_bfd == NULL)
+	{
+	  switch (bfd_get_error ())
+	    {
+	    default:
+	      break;
+	    case bfd_error_no_error:
+	      bfd_set_error (bfd_error_malformed_archive);
+	      break;
+	    case bfd_error_system_call:
+	      if (info != NULL)
+		{
+		  info->callbacks->einfo
+		    (_("%F%P: %pB(%s): error opening thin archive member: %E\n"),
+		     archive, filename);
+		  break;
+		}
+	      break;
+	    }
+	}
     }
   else
     {
@@ -772,7 +792,7 @@ _bfd_generic_get_elt_at_index (bfd *abfd, symindex sym_index)
   carsym *entry;
 
   entry = bfd_ardata (abfd)->symdefs + sym_index;
-  return _bfd_get_elt_at_filepos (abfd, entry->file_offset);
+  return _bfd_get_elt_at_filepos (abfd, entry->file_offset, NULL);
 }
 
 bfd *
@@ -841,7 +861,7 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file)
 	}
     }
 
-  return _bfd_get_elt_at_filepos (archive, filestart);
+  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 bfd *
diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c
index 15fea1fde34..3d25ca59f2b 100644
--- a/bfd/coff-alpha.c
+++ b/bfd/coff-alpha.c
@@ -2045,7 +2045,8 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
    we uncompress the archive element if necessary.  */
 
 static bfd *
-alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
+alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos,
+				struct bfd_link_info *info)
 {
   bfd *nbfd = NULL;
   struct areltdata *tdata;
@@ -2057,7 +2058,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
   ufile_ptr filesize;
 
   buf = NULL;
-  nbfd = _bfd_get_elt_at_filepos (archive, filepos);
+  nbfd = _bfd_get_elt_at_filepos (archive, filepos, info);
   if (nbfd == NULL)
     goto error_return;
 
@@ -2215,7 +2216,7 @@ alpha_ecoff_openr_next_archived_file (bfd *archive, bfd *last_file)
 	}
     }
 
-  return alpha_ecoff_get_elt_at_filepos (archive, filestart);
+  return alpha_ecoff_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 /* Open the archive file given an index into the armap.  */
@@ -2226,7 +2227,8 @@ alpha_ecoff_get_elt_at_index (bfd *abfd, symindex sym_index)
   carsym *entry;
 
   entry = bfd_ardata (abfd)->symdefs + sym_index;
-  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset);
+  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset,
+					 NULL);
 }
 
 static void
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 1cc2162e7d8..0cb53f0decb 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -1763,7 +1763,7 @@ _bfd_xcoff_openr_next_archived_file (bfd *archive, bfd *last_file)
 	}
     }
 
-  return _bfd_get_elt_at_filepos (archive, filestart);
+  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
 }
 
 /* Stat an element in an XCOFF archive.  */
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index c660af13265..d3dee79e703 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -3639,7 +3639,9 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 	  hash = srch;
 	}
 
-      element = (*backend->get_elt_at_filepos) (abfd, (file_ptr) file_offset);
+      element = (*backend->get_elt_at_filepos) (abfd,
+						(file_ptr) file_offset,
+						info);
       if (element == NULL)
 	return false;
 
diff --git a/bfd/elflink.c b/bfd/elflink.c
index dc38548b23b..9e989d0d43f 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -3470,7 +3470,7 @@ elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
   Elf_Internal_Sym *isymend;
   bool result;
 
-  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
+  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset, NULL);
   if (abfd == NULL)
     return false;
 
@@ -5948,7 +5948,8 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 	    }
 
 	  /* We need to include this archive member.  */
-	  element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
+	  element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset,
+					     info);
 	  if (element == NULL)
 	    goto error_return;
 
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index 89d2997aedf..5d16139cdd6 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -172,7 +172,7 @@ extern bool _bfd_write_archive_contents
 extern bool _bfd_compute_and_write_armap
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_get_elt_at_filepos
-  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
+  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_generic_get_elt_at_index
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_new_bfd
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 382a574d954..0d0fc016662 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -177,7 +177,7 @@ extern bool _bfd_write_archive_contents
 extern bool _bfd_compute_and_write_armap
   (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_get_elt_at_filepos
-  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
+  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
 extern bfd *_bfd_generic_get_elt_at_index
   (bfd *, symindex) ATTRIBUTE_HIDDEN;
 extern bfd * _bfd_new_bfd
diff --git a/bfd/libecoff.h b/bfd/libecoff.h
index c7eaba533b9..975e5ca7d54 100644
--- a/bfd/libecoff.h
+++ b/bfd/libecoff.h
@@ -72,7 +72,7 @@ struct ecoff_backend_data
     (bfd *, struct internal_filehdr *, struct internal_aouthdr *);
   /* Read an element from an archive at a given file position.  This
      is needed because OSF/1 3.2 uses a weird archive format.  */
-  bfd *(*get_elt_at_filepos) (bfd *, file_ptr);
+  bfd *(*get_elt_at_filepos) (bfd *, file_ptr, struct bfd_link_info *);
 };
 
 /* ECOFF targets don't support COFF long section names, so this
diff --git a/bfd/linker.c b/bfd/linker.c
index 3019daea3a5..283e812ae17 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -981,7 +981,8 @@ _bfd_generic_link_add_archive_symbols
 	  if (last_ar_offset != arsym->file_offset)
 	    {
 	      last_ar_offset = arsym->file_offset;
-	      element = _bfd_get_elt_at_filepos (abfd, last_ar_offset);
+	      element = _bfd_get_elt_at_filepos (abfd, last_ar_offset,
+						 info);
 	      if (element == NULL
 		  || !bfd_check_format (element, bfd_object))
 		goto error_return;
-- 
2.33.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] ld: Improve thin archive member error message
  2021-12-25  0:13 [PATCH] ld: Improve thin archive member error message H.J. Lu
@ 2022-01-04 16:11 ` H.J. Lu
  2022-01-04 17:48   ` Nick Clifton
  0 siblings, 1 reply; 3+ messages in thread
From: H.J. Lu @ 2022-01-04 16:11 UTC (permalink / raw)
  To: Binutils, Nick Clifton, Alan Modra

On Fri, Dec 24, 2021 at 4:13 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Improve thin archive member error message with:
>
> ld: libbar.a(bar.o): error opening thin archive member: No such file or directory
>
> instead of
>
> ld: libbar.a: error adding symbols: No such file or directory
>
>         PR ld/28722
>         * archive.c (_bfd_get_elt_at_filepos): Add a pointer argument
>         for struct bfd_link_info.  Call linker callback when failing to
>         open thin archive member.
>         (_bfd_generic_get_elt_at_index): Pass NULL to
>         _bfd_get_elt_at_filepos.
>         (bfd_generic_openr_next_archived_file): Likewise.
>         * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Add a pointer
>         argument for struct bfd_link_info and pass it to
>         _bfd_get_elt_at_filepos.
>         (alpha_ecoff_openr_next_archived_file): Pass NULL to
>         _bfd_get_elt_at_filepos.
>         (alpha_ecoff_get_elt_at_index): Likewise.
>         * coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Likewise.
>         * ecoff.c (ecoff_link_add_archive_symbols): Pass info to
>         backend->get_elt_at_filepos.
>         * elflink.c (elf_link_is_defined_archive_symbol): info to
>         _bfd_get_elt_at_filepos.
>         * libbfd-in.h (_bfd_get_elt_at_filepos): Add a pointer argument
>         for struct bfd_link_info.
>         * libbfd.h: Regenerate.
>         * libecoff.h (ecoff_backend_data): Add a pointer argument for
>         struct bfd_link_info to get_elt_at_filepos.
>         * linker.c (_bfd_generic_link_add_archive_symbols): Pass info to
>         _bfd_get_elt_at_filepos.
> ---
>  bfd/archive.c     | 32 ++++++++++++++++++++++++++------
>  bfd/coff-alpha.c  | 10 ++++++----
>  bfd/coff-rs6000.c |  2 +-
>  bfd/ecoff.c       |  4 +++-
>  bfd/elflink.c     |  5 +++--
>  bfd/libbfd-in.h   |  2 +-
>  bfd/libbfd.h      |  2 +-
>  bfd/libecoff.h    |  2 +-
>  bfd/linker.c      |  3 ++-
>  9 files changed, 44 insertions(+), 18 deletions(-)
>
> diff --git a/bfd/archive.c b/bfd/archive.c
> index dc173560130..7003a5d8866 100644
> --- a/bfd/archive.c
> +++ b/bfd/archive.c
> @@ -651,7 +651,8 @@ _bfd_append_relative_path (bfd *arch, char *elt_name)
>     element, since it handles the bookkeeping so nicely for us.  */
>
>  bfd *
> -_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
> +_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos,
> +                        struct bfd_link_info *info)
>  {
>    struct areltdata *new_areldata;
>    bfd *n_bfd;
> @@ -694,7 +695,8 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
>               free (new_areldata);
>               return NULL;
>             }
> -         n_bfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
> +         n_bfd = _bfd_get_elt_at_filepos (ext_arch,
> +                                          new_areldata->origin, info);
>           if (n_bfd == NULL)
>             {
>               free (new_areldata);
> @@ -715,8 +717,26 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
>          open the external file as a bfd.  */
>        bfd_set_error (bfd_error_no_error);
>        n_bfd = open_nested_file (filename, archive);
> -      if (n_bfd == NULL && bfd_get_error () == bfd_error_no_error)
> -       bfd_set_error (bfd_error_malformed_archive);
> +      if (n_bfd == NULL)
> +       {
> +         switch (bfd_get_error ())
> +           {
> +           default:
> +             break;
> +           case bfd_error_no_error:
> +             bfd_set_error (bfd_error_malformed_archive);
> +             break;
> +           case bfd_error_system_call:
> +             if (info != NULL)
> +               {
> +                 info->callbacks->einfo
> +                   (_("%F%P: %pB(%s): error opening thin archive member: %E\n"),
> +                    archive, filename);
> +                 break;
> +               }
> +             break;
> +           }
> +       }
>      }
>    else
>      {
> @@ -772,7 +792,7 @@ _bfd_generic_get_elt_at_index (bfd *abfd, symindex sym_index)
>    carsym *entry;
>
>    entry = bfd_ardata (abfd)->symdefs + sym_index;
> -  return _bfd_get_elt_at_filepos (abfd, entry->file_offset);
> +  return _bfd_get_elt_at_filepos (abfd, entry->file_offset, NULL);
>  }
>
>  bfd *
> @@ -841,7 +861,7 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file)
>         }
>      }
>
> -  return _bfd_get_elt_at_filepos (archive, filestart);
> +  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
>  }
>
>  bfd *
> diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c
> index 15fea1fde34..3d25ca59f2b 100644
> --- a/bfd/coff-alpha.c
> +++ b/bfd/coff-alpha.c
> @@ -2045,7 +2045,8 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
>     we uncompress the archive element if necessary.  */
>
>  static bfd *
> -alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
> +alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos,
> +                               struct bfd_link_info *info)
>  {
>    bfd *nbfd = NULL;
>    struct areltdata *tdata;
> @@ -2057,7 +2058,7 @@ alpha_ecoff_get_elt_at_filepos (bfd *archive, file_ptr filepos)
>    ufile_ptr filesize;
>
>    buf = NULL;
> -  nbfd = _bfd_get_elt_at_filepos (archive, filepos);
> +  nbfd = _bfd_get_elt_at_filepos (archive, filepos, info);
>    if (nbfd == NULL)
>      goto error_return;
>
> @@ -2215,7 +2216,7 @@ alpha_ecoff_openr_next_archived_file (bfd *archive, bfd *last_file)
>         }
>      }
>
> -  return alpha_ecoff_get_elt_at_filepos (archive, filestart);
> +  return alpha_ecoff_get_elt_at_filepos (archive, filestart, NULL);
>  }
>
>  /* Open the archive file given an index into the armap.  */
> @@ -2226,7 +2227,8 @@ alpha_ecoff_get_elt_at_index (bfd *abfd, symindex sym_index)
>    carsym *entry;
>
>    entry = bfd_ardata (abfd)->symdefs + sym_index;
> -  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset);
> +  return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset,
> +                                        NULL);
>  }
>
>  static void
> diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
> index 1cc2162e7d8..0cb53f0decb 100644
> --- a/bfd/coff-rs6000.c
> +++ b/bfd/coff-rs6000.c
> @@ -1763,7 +1763,7 @@ _bfd_xcoff_openr_next_archived_file (bfd *archive, bfd *last_file)
>         }
>      }
>
> -  return _bfd_get_elt_at_filepos (archive, filestart);
> +  return _bfd_get_elt_at_filepos (archive, filestart, NULL);
>  }
>
>  /* Stat an element in an XCOFF archive.  */
> diff --git a/bfd/ecoff.c b/bfd/ecoff.c
> index c660af13265..d3dee79e703 100644
> --- a/bfd/ecoff.c
> +++ b/bfd/ecoff.c
> @@ -3639,7 +3639,9 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
>           hash = srch;
>         }
>
> -      element = (*backend->get_elt_at_filepos) (abfd, (file_ptr) file_offset);
> +      element = (*backend->get_elt_at_filepos) (abfd,
> +                                               (file_ptr) file_offset,
> +                                               info);
>        if (element == NULL)
>         return false;
>
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index dc38548b23b..9e989d0d43f 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -3470,7 +3470,7 @@ elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
>    Elf_Internal_Sym *isymend;
>    bool result;
>
> -  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
> +  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset, NULL);
>    if (abfd == NULL)
>      return false;
>
> @@ -5948,7 +5948,8 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
>             }
>
>           /* We need to include this archive member.  */
> -         element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
> +         element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset,
> +                                            info);
>           if (element == NULL)
>             goto error_return;
>
> diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
> index 89d2997aedf..5d16139cdd6 100644
> --- a/bfd/libbfd-in.h
> +++ b/bfd/libbfd-in.h
> @@ -172,7 +172,7 @@ extern bool _bfd_write_archive_contents
>  extern bool _bfd_compute_and_write_armap
>    (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
>  extern bfd *_bfd_get_elt_at_filepos
> -  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
> +  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
>  extern bfd *_bfd_generic_get_elt_at_index
>    (bfd *, symindex) ATTRIBUTE_HIDDEN;
>  extern bfd * _bfd_new_bfd
> diff --git a/bfd/libbfd.h b/bfd/libbfd.h
> index 382a574d954..0d0fc016662 100644
> --- a/bfd/libbfd.h
> +++ b/bfd/libbfd.h
> @@ -177,7 +177,7 @@ extern bool _bfd_write_archive_contents
>  extern bool _bfd_compute_and_write_armap
>    (bfd *, unsigned int) ATTRIBUTE_HIDDEN;
>  extern bfd *_bfd_get_elt_at_filepos
> -  (bfd *, file_ptr) ATTRIBUTE_HIDDEN;
> +  (bfd *, file_ptr, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
>  extern bfd *_bfd_generic_get_elt_at_index
>    (bfd *, symindex) ATTRIBUTE_HIDDEN;
>  extern bfd * _bfd_new_bfd
> diff --git a/bfd/libecoff.h b/bfd/libecoff.h
> index c7eaba533b9..975e5ca7d54 100644
> --- a/bfd/libecoff.h
> +++ b/bfd/libecoff.h
> @@ -72,7 +72,7 @@ struct ecoff_backend_data
>      (bfd *, struct internal_filehdr *, struct internal_aouthdr *);
>    /* Read an element from an archive at a given file position.  This
>       is needed because OSF/1 3.2 uses a weird archive format.  */
> -  bfd *(*get_elt_at_filepos) (bfd *, file_ptr);
> +  bfd *(*get_elt_at_filepos) (bfd *, file_ptr, struct bfd_link_info *);
>  };
>
>  /* ECOFF targets don't support COFF long section names, so this
> diff --git a/bfd/linker.c b/bfd/linker.c
> index 3019daea3a5..283e812ae17 100644
> --- a/bfd/linker.c
> +++ b/bfd/linker.c
> @@ -981,7 +981,8 @@ _bfd_generic_link_add_archive_symbols
>           if (last_ar_offset != arsym->file_offset)
>             {
>               last_ar_offset = arsym->file_offset;
> -             element = _bfd_get_elt_at_filepos (abfd, last_ar_offset);
> +             element = _bfd_get_elt_at_filepos (abfd, last_ar_offset,
> +                                                info);
>               if (element == NULL
>                   || !bfd_check_format (element, bfd_object))
>                 goto error_return;
> --
> 2.33.1
>

Hi Nick, Alan,

Is it OK for master?

Thanks.

-- 
H.J.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] ld: Improve thin archive member error message
  2022-01-04 16:11 ` H.J. Lu
@ 2022-01-04 17:48   ` Nick Clifton
  0 siblings, 0 replies; 3+ messages in thread
From: Nick Clifton @ 2022-01-04 17:48 UTC (permalink / raw)
  To: H.J. Lu, Binutils, Alan Modra

Hi H.J.

>>          PR ld/28722
>>          * archive.c (_bfd_get_elt_at_filepos): Add a pointer argument
>>          for struct bfd_link_info.  Call linker callback when failing to
>>          open thin archive member.
>>          (_bfd_generic_get_elt_at_index): Pass NULL to
>>          _bfd_get_elt_at_filepos.
>>          (bfd_generic_openr_next_archived_file): Likewise.
>>          * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Add a pointer
>>          argument for struct bfd_link_info and pass it to
>>          _bfd_get_elt_at_filepos.
>>          (alpha_ecoff_openr_next_archived_file): Pass NULL to
>>          _bfd_get_elt_at_filepos.
>>          (alpha_ecoff_get_elt_at_index): Likewise.
>>          * coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Likewise.
>>          * ecoff.c (ecoff_link_add_archive_symbols): Pass info to
>>          backend->get_elt_at_filepos.
>>          * elflink.c (elf_link_is_defined_archive_symbol): info to
>>          _bfd_get_elt_at_filepos.
>>          * libbfd-in.h (_bfd_get_elt_at_filepos): Add a pointer argument
>>          for struct bfd_link_info.
>>          * libbfd.h: Regenerate.
>>          * libecoff.h (ecoff_backend_data): Add a pointer argument for
>>          struct bfd_link_info to get_elt_at_filepos.
>>          * linker.c (_bfd_generic_link_add_archive_symbols): Pass info to
>>          _bfd_get_elt_at_filepos.

> Is it OK for master?

Yes - this is fine.  Please apply.

Cheers
   Nick



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-04 17:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-25  0:13 [PATCH] ld: Improve thin archive member error message H.J. Lu
2022-01-04 16:11 ` H.J. Lu
2022-01-04 17:48   ` Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).