Fix problem with linking shared libstdc++-v3 on AIX.
authorTom Rix <trix@redhat.com>
Wed, 20 Mar 2002 12:03:27 +0000 (12:03 +0000)
committerTom Rix <trix@redhat.com>
Wed, 20 Mar 2002 12:03:27 +0000 (12:03 +0000)
bfd/ChangeLog
bfd/xcofflink.c

index 7570b23c4749d9fce34c0cebe7067e0587819567..c0e8dee858242136283a492b8d7224ab09387cf8 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-19  Tom Rix  <trix@redhat.com>
+
+       * xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Look through all 
+       dynamic objects in archives.
+
 2002-03-19  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * elflink.h (NAME(bfd_elf,record_link_assignment)): Don't set
index b817426ae68205dd91841ae6f8cbe78782854cd6..c122aeffb80f16c8ab6d71c7a1ccafc789b35ac8 100644 (file)
@@ -588,11 +588,11 @@ _bfd_xcoff_bfd_link_add_symbols (abfd, info)
 
     case bfd_archive:
       /* If the archive has a map, do the usual search.  We then need
-         to check the archive for stripped dynamic objects, because
-         they will not appear in the archive map even though they
-         should, perhaps, be included.  If the archive has no map, we
-         just consider each object file in turn, since that apparently
-         is what the AIX native linker does.  */
+         to check the archive for dynamic objects, because they may not 
+        appear in the archive map even though they should, perhaps, be 
+        included.  If the archive has no map, we just consider each object 
+        file in turn, since that apparently is what the AIX native linker 
+        does.  */
       if (bfd_has_map (abfd))
        {
          if (! (_bfd_generic_link_add_archive_symbols
@@ -602,18 +602,18 @@ _bfd_xcoff_bfd_link_add_symbols (abfd, info)
 
       {
        bfd *member;
-
+       
        member = bfd_openr_next_archived_file (abfd, (bfd *) NULL);
        while (member != NULL)
          {
            if (bfd_check_format (member, bfd_object)
-               && (! bfd_has_map (abfd)
-                   || ((member->flags & DYNAMIC) != 0
-                       && (member->flags & HAS_SYMS) == 0)))
+               && (info->hash->creator == member->xvec)
+               && (! bfd_has_map (abfd) || (member->flags & DYNAMIC) != 0))
              {
                boolean needed;
-
-               if (! xcoff_link_check_archive_element (member, info, &needed))
+               
+               if (! xcoff_link_check_archive_element (member, info, 
+                                                       &needed))
                  return false;
                if (needed)
                  member->archive_pass = -1;