public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
From: jkratoch@sourceware.org
To: archer-commits@sourceware.org
Subject: [SCM]  archer-jankratochvil-ifunc: Merge remote branch 'origin/master' into archer-jankratochvil-ifunc
Date: Thu, 14 Oct 2010 20:58:00 -0000	[thread overview]
Message-ID: <20101014205805.6367.qmail@sourceware.org> (raw)

The branch, archer-jankratochvil-ifunc has been updated
       via  9d2ff67dc14ceb423aaa3273ad61d92741be78f4 (commit)
       via  d8d2c40696f0b959f9a997b05f10e92646ae6997 (commit)
       via  c619812c381908704dd4d385be9a7f74d2b6e49a (commit)
       via  0dec04cd391afbd7848a83092d1fbfc5dfbdb0e1 (commit)
       via  715c8705f637e8505d601c1ccf86fc3e00d58c95 (commit)
       via  c0dab19a92624ea7778c8c10a46acf2e7fa5b0a7 (commit)
       via  18adfa0ebdbcf5bc5b83209a72c1bd7c112b1193 (commit)
       via  8be50900be59aee3d98bfd3739efc43879ecf59d (commit)
       via  cee21f54f10cbc59edd243eead62003426680657 (commit)
       via  1f66ce293dcf912e856512ab042685442cb1a604 (commit)
       via  ba4425ae906ea625835613f9152d5f0e8d4f6208 (commit)
      from  31c39a82c03398809d542d0da4d9de4ca12d38fb (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 9d2ff67dc14ceb423aaa3273ad61d92741be78f4
Merge: 31c39a8 d8d2c40
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Oct 14 22:57:08 2010 +0200

    Merge remote branch 'origin/master' into archer-jankratochvil-ifunc

-----------------------------------------------------------------------

Summary of changes:
 bfd/ChangeLog                          |   32 +
 bfd/aoutx.h                            |   24 +-
 bfd/cofflink.c                         |   19 +-
 bfd/ecoff.c                            |  101 +-
 bfd/elflink.c                          |    9 +-
 bfd/linker.c                           |   41 +-
 bfd/pdp11.c                            |   18 +-
 bfd/version.h                          |    2 +-
 bfd/vms-alpha.c                        |   11 +-
 bfd/xcofflink.c                        |   23 +-
 gdb/ChangeLog                          |   33 +
 gdb/NEWS                               |    4 +
 gdb/c-typeprint.c                      |   20 +-
 gdb/data-directory/Makefile.in         |    3 +-
 gdb/doc/ChangeLog                      |    6 +
 gdb/doc/gdb.texinfo                    |   54 +
 gdb/gdbtypes.c                         |   94 +-
 gdb/gdbtypes.h                         |    3 +
 gdb/language.h                         |    2 +-
 gdb/p-lang.c                           |    6 +-
 gdb/python/lib/gdb/types.py            |   91 +
 gdb/testsuite/ChangeLog                |   15 +
 gdb/testsuite/gdb.cp/converts.cc       |   53 +
 gdb/testsuite/gdb.cp/converts.exp      |   48 +
 gdb/testsuite/gdb.cp/oranking.exp      |    1 -
 gdb/testsuite/gdb.cp/overload.cc       |    7 +
 gdb/testsuite/gdb.cp/overload.exp      |   10 +
 gdb/testsuite/gdb.python/Makefile.in   |    2 +-
 gdb/testsuite/gdb.python/lib-types.cc  |   61 +
 gdb/testsuite/gdb.python/lib-types.exp |  143 +
 gdb/testsuite/lib/gdb-python.exp       |   18 +
 gdb/version.in                         |    2 +-
 include/ChangeLog                      |   12 +
 include/bfdlink.h                      |    6 +-
 include/plugin-api.h                   |    3 +-
 opcodes/ChangeLog                      |   11 +
 opcodes/i386-gen.c                     |    1 +
 opcodes/i386-opc.h                     |    3 +
 opcodes/i386-opc.tbl                   |  368 +-
 opcodes/i386-tbl.h                     |14834 ++++++++++++++++----------------
 40 files changed, 8475 insertions(+), 7719 deletions(-)
 create mode 100644 gdb/python/lib/gdb/types.py
 create mode 100644 gdb/testsuite/gdb.cp/converts.cc
 create mode 100644 gdb/testsuite/gdb.cp/converts.exp
 create mode 100644 gdb/testsuite/gdb.python/lib-types.cc
 create mode 100644 gdb/testsuite/gdb.python/lib-types.exp

First 500 lines of diff:
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 2e18e8c..7981dce 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,35 @@
+2010-10-14  Dave Korn  <dave.korn.cygwin@gmail.com> 
+
+	Apply LD plugin patch series (part 6/6).
+	* aoutx.h (aout_link_check_ar_symbols): Take new "subsbfd" reference
+	parameter and pass it when invoking add_archive_element callback.
+	(aout_link_check_archive_element): Handle substitute bfd if it
+	was set during add_archive_element callback in the above.
+	* cofflink.c (coff_link_check_ar_symbols): Take new "subsbfd" reference
+	parameter and pass it when invoking add_archive_element callback.
+	(coff_link_check_archive_element): Handle substitute bfd if it
+	was set during add_archive_element callback in the above.
+	* ecoff.c (read_ext_syms_and_strs): New function holds symbol-reading
+	code factored-out from ecoff_link_check_archive_element.
+	(reread_ext_syms_and_strs): Clear old symbols and call it.
+	(ecoff_link_check_archive_element):  Use the above.  Handle substitute
+	BFD if one is set by add_archive_element callback.
+	(ecoff_link_add_archive_symbols): Likewise allow bfd substitution.
+	* elflink.c (elf_link_add_archive_symbols): Likewise.
+	* linker.c (generic_link_check_archive_element): Likewise.
+	* pdp11.c (aout_link_check_ar_symbols): Take new "subsbfd" reference
+	parameter and pass it when invoking add_archive_element callback.
+	(aout_link_check_archive_element): Handle substitute bfd if it was
+	set during add_archive_element callback in the above.
+	* vms-alpha.c (alpha_vms_link_add_archive_symbols): Handle substitute
+	BFD if one is set by add_archive_element callback.
+	* xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Take new "subsbfd"
+	reference parameter and pass it when invoking add_archive_element
+	callback.
+	(xcoff_link_check_ar_symbols): Likewise.
+	(xcoff_link_check_archive_element): Handle bfd substitution if it was
+	set by callback in the above.
+
 2010-10-11  Alan Modra  <amodra@gmail.com>
 
 	* elf32-frv.c (elf32_frv_relocate_section): Set "name" for global syms.
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 11598a0..efa9d47 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -3210,7 +3210,8 @@ aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 static bfd_boolean
 aout_link_check_ar_symbols (bfd *abfd,
 			    struct bfd_link_info *info,
-			    bfd_boolean *pneeded)
+			    bfd_boolean *pneeded,
+			    bfd **subsbfd)
 {
   struct external_nlist *p;
   struct external_nlist *pend;
@@ -3304,7 +3305,8 @@ aout_link_check_ar_symbols (bfd *abfd,
 		continue;
 	    }
 
-	  if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+	  if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, subsbfd))
 	    return FALSE;
 	  *pneeded = TRUE;
 	  return TRUE;
@@ -3331,9 +3333,8 @@ aout_link_check_ar_symbols (bfd *abfd,
 			 outside BFD.  We assume that we should link
 			 in the object file.  This is done for the -u
 			 option in the linker.  */
-		      if (! (*info->callbacks->add_archive_element) (info,
-								     abfd,
-								     name))
+		      if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, subsbfd))
 			return FALSE;
 		      *pneeded = TRUE;
 		      return TRUE;
@@ -3381,7 +3382,8 @@ aout_link_check_ar_symbols (bfd *abfd,
 	     it if the current link symbol is common.  */
 	  if (h->type == bfd_link_hash_undefined)
 	    {
-	      if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+	      if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, subsbfd))
 		return FALSE;
 	      *pneeded = TRUE;
 	      return TRUE;
@@ -3402,15 +3404,21 @@ aout_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 bfd_boolean *pneeded)
 {
+  bfd *subsbfd = NULL;
+
   if (! aout_get_external_symbols (abfd))
     return FALSE;
 
-  if (! aout_link_check_ar_symbols (abfd, info, pneeded))
+  if (! aout_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
     return FALSE;
 
   if (*pneeded)
     {
-      if (! aout_link_add_symbols (abfd, info))
+      /* Potentially, the add_archive_element hook may have set a
+	 substitute BFD for us.  */
+      if (subsbfd && !aout_get_external_symbols (subsbfd))
+	return FALSE;
+      if (! aout_link_add_symbols (subsbfd ? subsbfd : abfd, info))
 	return FALSE;
     }
 
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index a29b687..a28d396 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -197,7 +197,8 @@ coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 static bfd_boolean
 coff_link_check_ar_symbols (bfd *abfd,
 			    struct bfd_link_info *info,
-			    bfd_boolean *pneeded)
+			    bfd_boolean *pneeded,
+			    bfd **subsbfd)
 {
   bfd_size_type symesz;
   bfd_byte *esym;
@@ -243,7 +244,8 @@ coff_link_check_ar_symbols (bfd *abfd,
 	  if (h != (struct bfd_link_hash_entry *) NULL
 	      && h->type == bfd_link_hash_undefined)
 	    {
-	      if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+	      if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, subsbfd))
 		return FALSE;
 	      *pneeded = TRUE;
 	      return TRUE;
@@ -267,14 +269,23 @@ coff_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 bfd_boolean *pneeded)
 {
+  bfd *subsbfd = NULL;
+
   if (! _bfd_coff_get_external_symbols (abfd))
     return FALSE;
 
-  if (! coff_link_check_ar_symbols (abfd, info, pneeded))
+  if (! coff_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
+    return FALSE;
+
+  /* Potentially, the add_archive_element hook may have set a
+     substitute BFD for us.  */
+  if (*pneeded
+      && subsbfd
+      && ! _bfd_coff_get_external_symbols (subsbfd))
     return FALSE;
 
   if (*pneeded
-      && ! coff_link_add_symbols (abfd, info))
+      && ! coff_link_add_symbols (subsbfd ? subsbfd : abfd, info))
     return FALSE;
 
   if ((! info->keep_memory || ! *pneeded)
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index af9d7d6..37003d2 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -3509,6 +3509,58 @@ ecoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
   return FALSE;
 }
 
+/* Factored out from ecoff_link_check_archive_element.  */
+
+static bfd_boolean
+read_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size,
+	bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd,
+	const struct ecoff_backend_data * const backend)
+{
+  if (! ecoff_slurp_symbolic_header (abfd))
+    return FALSE;
+
+  /* If there are no symbols, we don't want it.  */
+  if (bfd_get_symcount (abfd) == 0)
+    return TRUE;
+
+  *symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
+
+  *external_ext_size = backend->debug_swap.external_ext_size;
+  *esize = (*symhdr)->iextMax * *external_ext_size;
+  *external_ext = bfd_malloc (*esize);
+  if (*external_ext == NULL && *esize != 0)
+    return FALSE;
+
+  if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbExtOffset, SEEK_SET) != 0
+      || bfd_bread (*external_ext, *esize, abfd) != *esize)
+    return FALSE;
+
+  *ssext = (char *) bfd_malloc ((bfd_size_type) (*symhdr)->issExtMax);
+  if (*ssext == NULL && (*symhdr)->issExtMax != 0)
+    return FALSE;
+
+  if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbSsExtOffset, SEEK_SET) != 0
+      || (bfd_bread (*ssext, (bfd_size_type) (*symhdr)->issExtMax, abfd)
+	  != (bfd_size_type) (*symhdr)->issExtMax))
+    return FALSE;
+  return TRUE;
+}
+
+static bfd_boolean
+reread_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size,
+	bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd,
+	const struct ecoff_backend_data * const backend)
+{
+  if (*external_ext != NULL)
+    free (*external_ext);
+  *external_ext = NULL;
+  if (*ssext != NULL)
+    free (*ssext);
+  *ssext = NULL;
+  return read_ext_syms_and_strs (symhdr, external_ext_size, esize,
+				external_ext, ssext, abfd, backend);
+}
+
 /* This is called if we used _bfd_generic_link_add_archive_symbols
    because we were not dealing with an ECOFF archive.  */
 
@@ -3530,35 +3582,15 @@ ecoff_link_check_archive_element (bfd *abfd,
 
   *pneeded = FALSE;
 
-  if (! ecoff_slurp_symbolic_header (abfd))
+  /* Read in the external symbols and external strings.  */
+  if (!read_ext_syms_and_strs (&symhdr, &external_ext_size, &esize,
+	&external_ext, &ssext, abfd, backend))
     goto error_return;
 
   /* If there are no symbols, we don't want it.  */
   if (bfd_get_symcount (abfd) == 0)
     goto successful_return;
 
-  symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
-
-  /* Read in the external symbols and external strings.  */
-  external_ext_size = backend->debug_swap.external_ext_size;
-  esize = symhdr->iextMax * external_ext_size;
-  external_ext = bfd_malloc (esize);
-  if (external_ext == NULL && esize != 0)
-    goto error_return;
-
-  if (bfd_seek (abfd, (file_ptr) symhdr->cbExtOffset, SEEK_SET) != 0
-      || bfd_bread (external_ext, esize, abfd) != esize)
-    goto error_return;
-
-  ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax);
-  if (ssext == NULL && symhdr->issExtMax != 0)
-    goto error_return;
-
-  if (bfd_seek (abfd, (file_ptr) symhdr->cbSsExtOffset, SEEK_SET) != 0
-      || (bfd_bread (ssext, (bfd_size_type) symhdr->issExtMax, abfd)
-	  != (bfd_size_type) symhdr->issExtMax))
-    goto error_return;
-
   /* Look through the external symbols to see if they define some
      symbol that is currently undefined.  */
   ext_ptr = (char *) external_ext;
@@ -3568,6 +3600,7 @@ ecoff_link_check_archive_element (bfd *abfd,
       EXTR esym;
       bfd_boolean def;
       const char *name;
+      bfd *subsbfd;
       struct bfd_link_hash_entry *h;
 
       (*swap_ext_in) (abfd, (void *) ext_ptr, &esym);
@@ -3612,9 +3645,18 @@ ecoff_link_check_archive_element (bfd *abfd,
 	continue;
 
       /* Include this element.  */
-      if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+      subsbfd = NULL;
+      if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, &subsbfd))
+	goto error_return;
+      /* Potentially, the add_archive_element hook may have set a
+	 substitute BFD for us.  */
+      if (subsbfd
+	  && !reread_ext_syms_and_strs (&symhdr, &external_ext_size, &esize,
+				&external_ext, &ssext, subsbfd, backend))
 	goto error_return;
-      if (! ecoff_link_add_externals (abfd, info, external_ext, ssext))
+      if (! ecoff_link_add_externals (subsbfd ? subsbfd : abfd, info,
+				external_ext, ssext))
 	goto error_return;
 
       *pneeded = TRUE;
@@ -3691,6 +3733,7 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
       unsigned int file_offset;
       const char *name;
       bfd *element;
+      bfd *subsbfd;
 
       h = *pundef;
 
@@ -3777,9 +3820,13 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
       /* Unlike the generic linker, we know that this element provides
 	 a definition for an undefined symbol and we know that we want
 	 to include it.  We don't need to check anything.  */
-      if (! (*info->callbacks->add_archive_element) (info, element, name))
+      subsbfd = NULL;
+      if (! (*info->callbacks->add_archive_element)
+					(info, element, name, &subsbfd))
 	return FALSE;
-      if (! ecoff_link_add_object_symbols (element, info))
+      /* Potentially, the add_archive_element hook may have set a
+	 substitute BFD for us.  */
+      if (! ecoff_link_add_object_symbols (subsbfd ? subsbfd : element, info))
 	return FALSE;
 
       pundef = &(*pundef)->u.undef.next;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 41fba17..6d37dc8 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -5011,6 +5011,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 	{
 	  struct elf_link_hash_entry *h;
 	  bfd *element;
+	  bfd *subsbfd = NULL;
 	  struct bfd_link_hash_entry *undefs_tail;
 	  symindex mark;
 
@@ -5073,10 +5074,12 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
 
 	  undefs_tail = info->hash->undefs_tail;
 
-	  if (! (*info->callbacks->add_archive_element) (info, element,
-							 symdef->name))
+	  if (! (*info->callbacks->add_archive_element)
+				(info, element, symdef->name, &subsbfd))
 	    goto error_return;
-	  if (! bfd_link_add_symbols (element, info))
+	  /* Potentially, the add_archive_element hook may have set a
+	     substitute BFD for us.  */
+	  if (! bfd_link_add_symbols (subsbfd ? subsbfd : element, info))
 	    goto error_return;
 
 	  /* If there are any new undefined symbols, we need to make
diff --git a/bfd/linker.c b/bfd/linker.c
index 76bc70a..fc52b51 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -223,7 +223,10 @@ SUBSUBSECTION
 	archive and decide which elements of the archive should be
 	included in the link.  For each such element it must call the
 	<<add_archive_element>> linker callback, and it must add the
-	symbols from the object file to the linker hash table.
+	symbols from the object file to the linker hash table.  (The
+	callback may in fact indicate that a replacement BFD should be
+	used, in which case the symbols from that BFD should be added
+	to the linker hash table instead.)
 
 @findex _bfd_generic_link_add_archive_symbols
 	In most cases the work of looking through the symbols in the
@@ -243,9 +246,13 @@ SUBSUBSECTION
 	element should be included in the link.  If the element is to
 	be included, the <<add_archive_element>> linker callback
 	routine must be called with the element as an argument, and
-	the elements symbols must be added to the linker hash table
+	the element's symbols must be added to the linker hash table
 	just as though the element had itself been passed to the
-	<<_bfd_link_add_symbols>> function.
+	<<_bfd_link_add_symbols>> function.  The <<add_archive_element>>
+	callback has the option to indicate that it would like to
+	replace the element archive with a substitute BFD, in which
+	case it is the symbols of that substitute BFD that must be
+	added to the linker hash table instead.
 
 	When the a.out <<_bfd_link_add_symbols>> function receives an
 	archive, it calls <<_bfd_generic_link_add_archive_symbols>>
@@ -257,7 +264,8 @@ SUBSUBSECTION
 	symbol) it calls the <<add_archive_element>> callback and then
 	<<aout_link_check_archive_element>> calls
 	<<aout_link_add_symbols>> to actually add the symbols to the
-	linker hash table.
+	linker hash table - possibly those of a substitute BFD, if the
+	<<add_archive_element>> callback avails itself of that option.
 
 	The ECOFF back end is unusual in that it does not normally
 	call <<_bfd_generic_link_add_archive_symbols>>, because ECOFF
@@ -957,8 +965,10 @@ archive_hash_table_init
    included.  CHECKFN should set *PNEEDED to TRUE if the object file
    should be included, and must also call the bfd_link_info
    add_archive_element callback function and handle adding the symbols
-   to the global hash table.  CHECKFN should only return FALSE if some
-   sort of error occurs.
+   to the global hash table.  CHECKFN must notice if the callback
+   indicates a substitute BFD, and arrange to add those symbols instead
+   if it does so.  CHECKFN should only return FALSE if some sort of
+   error occurs.
 
    For some formats, such as a.out, it is possible to look through an
    object file but not actually include it in the link.  The
@@ -1213,11 +1223,20 @@ generic_link_check_archive_element (bfd *abfd,
 	{
 	  bfd_size_type symcount;
 	  asymbol **symbols;
+	  bfd *subsbfd = NULL;
 
 	  /* This object file defines this symbol, so pull it in.  */
-	  if (! (*info->callbacks->add_archive_element) (info, abfd,
-							 bfd_asymbol_name (p)))
+	  if (! (*info->callbacks->add_archive_element)
+				(info, abfd, bfd_asymbol_name (p), &subsbfd))
 	    return FALSE;
+	  /* Potentially, the add_archive_element hook may have set a
+	     substitute BFD for us.  */
+	  if (subsbfd)
+	    {
+	      abfd = subsbfd;
+	      if (!bfd_generic_link_read_symbols (abfd))
+		return FALSE;
+	    }
 	  symcount = _bfd_generic_link_get_symcount (abfd);
 	  symbols = _bfd_generic_link_get_symbols (abfd);
 	  if (! generic_link_add_symbol_list (abfd, info, symcount,
@@ -1238,12 +1257,16 @@ generic_link_check_archive_element (bfd *abfd,
 	  symbfd = h->u.undef.abfd;
 	  if (symbfd == NULL)
 	    {
+	      bfd *subsbfd = NULL;
 	      /* This symbol was created as undefined from outside
 		 BFD.  We assume that we should link in the object
 		 file.  This is for the -u option in the linker.  */
 	      if (! (*info->callbacks->add_archive_element)
-		  (info, abfd, bfd_asymbol_name (p)))
+				(info, abfd, bfd_asymbol_name (p), &subsbfd))
 		return FALSE;
+	      /* Potentially, the add_archive_element hook may have set a
+		 substitute BFD for us.  But no symbols are going to get
+		 registered by anything we're returning to from here.  */
 	      *pneeded = TRUE;
 	      return TRUE;
 	    }
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index 1a7694c..5f4d28c 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -2545,7 +2545,8 @@ aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 static bfd_boolean
 aout_link_check_ar_symbols (bfd *abfd,
 			    struct bfd_link_info *info,
-			    bfd_boolean *pneeded)
+			    bfd_boolean *pneeded,
+			    bfd **subsbfd)
 {
   struct external_nlist *p;
   struct external_nlist *pend;
@@ -2600,7 +2601,8 @@ aout_link_check_ar_symbols (bfd *abfd,
 	     but not if it is defined in the .text section.  That
 	     seems a bit crazy to me, and I haven't implemented it.
 	     However, it might be correct.  */
-	  if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+	  if (! (*info->callbacks->add_archive_element)
+					(info, abfd, name, subsbfd))
 	    return FALSE;
 	  *pneeded = TRUE;
 	  return TRUE;
@@ -2628,7 +2630,7 @@ aout_link_check_ar_symbols (bfd *abfd,
 			 in the object file.  This is done for the -u
 			 option in the linker.  */
 		      if (! (*info->callbacks->add_archive_element)
-			  (info, abfd, name))
+			  (info, abfd, name, subsbfd))
 			return FALSE;
 		      *pneeded = TRUE;
 		      return TRUE;
@@ -2680,15 +2682,21 @@ aout_link_check_archive_element (bfd *abfd,
 				 struct bfd_link_info *info,
 				 bfd_boolean *pneeded)
 {
+  bfd *subsbfd = NULL;
+
   if (! aout_get_external_symbols (abfd))
     return FALSE;
 
-  if (! aout_link_check_ar_symbols (abfd, info, pneeded))
+  if (! aout_link_check_ar_symbols (abfd, info, pneeded, &subsbfd))
     return FALSE;
 
   if (*pneeded)
     {
-      if (! aout_link_add_symbols (abfd, info))
+      /* Potentially, the add_archive_element hook may have set a
+	 substitute BFD for us.  */
+      if (subsbfd && ! aout_get_external_symbols (subsbfd))
+	return FALSE;
+      if (! aout_link_add_symbols (subsbfd ? subsbfd : abfd, info))
 	return FALSE;
     }
 
diff --git a/bfd/version.h b/bfd/version.h
index 6ec0248..39625fd 100644
--- a/bfd/version.h
+++ b/bfd/version.h


hooks/post-receive
--
Repository for Project Archer.


             reply	other threads:[~2010-10-14 20:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-14 20:58 jkratoch [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-01-17 14:12 jkratoch
2011-01-07  7:32 jkratoch
2010-11-16  6:02 jkratoch
2010-10-15 17:11 jkratoch
2010-10-13 15:10 jkratoch
2010-10-11  9:30 jkratoch
2010-04-04 12:12 jkratoch
2010-02-26 17:59 jkratoch
2010-02-13 23:11 jkratoch
2010-02-03  4:56 jkratoch
2010-01-28 11:49 jkratoch
2010-01-21  1:02 jkratoch
2010-01-20  0:13 jkratoch
2009-12-06 17:45 jkratoch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101014205805.6367.qmail@sourceware.org \
    --to=jkratoch@sourceware.org \
    --cc=archer-commits@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).