* xcofflink.c (xcoff_link_add_symbols): Set the alignment power of
authorIan Lance Taylor <ian@airs.com>
Mon, 6 Nov 1995 19:36:29 +0000 (19:36 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 6 Nov 1995 19:36:29 +0000 (19:36 +0000)
the created .tc section to 2.
(xcoff_mark): Don't keep a .loader reloc for a call to an
undefined symbol when creating a shared library.
(xcoff_build_ldsyms): When creating a shared library, generate
global linkage code for a call to an undefined symbol.

bfd/ChangeLog
bfd/xcofflink.c

index b8fc05081f7e54e780d3ac5e73856091e2dcd694..8720b17454339a3f96f4f2cfc7cdb5fdcccb918c 100644 (file)
@@ -1,3 +1,12 @@
+Mon Nov  6 14:34:07 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * xcofflink.c (xcoff_link_add_symbols): Set the alignment power of
+       the created .tc section to 2.
+       (xcoff_mark): Don't keep a .loader reloc for a call to an
+       undefined symbol when creating a shared library.
+       (xcoff_build_ldsyms): When creating a shared library, generate
+       global linkage code for a call to an undefined symbol.
+
 Sun Nov  5 21:44:13 1995  Ken Raeburn  <raeburn@cygnus.com>
 
        * Makefile.in (CFILES): Rebuild list from BFD_LIBS, ALL_MACHINES,
index 2c65879264ee02488bfebbb9bfee77d1c9560d4a..189d73b50c983886cb71574d8f74ba8cedb061e6 100644 (file)
@@ -939,6 +939,7 @@ xcoff_link_add_symbols (abfd, info)
        goto error_return;
       xcoff_hash_table (info)->toc_section = tsec;
       tsec->flags |= SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
+      tsec->alignment_power = 2;
     }
   /* Likewise for the .debug section.  */
   if (xcoff_hash_table (info)->debug_section == NULL)
@@ -2066,7 +2067,8 @@ xcoff_mark (info, sec)
                      || h->root.type == bfd_link_hash_common
                      || ((h->flags & XCOFF_CALLED) != 0
                          && (h->flags & XCOFF_DEF_REGULAR) == 0
-                         && (h->flags & XCOFF_REF_DYNAMIC) != 0
+                         && ((h->flags & XCOFF_REF_DYNAMIC) != 0
+                             || info->shared)
                          && (h->root.type == bfd_link_hash_undefined
                              || h->root.type == bfd_link_hash_undefweak)
                          && h->root.root.string[0] == '.'))
@@ -2734,13 +2736,15 @@ xcoff_build_ldsyms (h, p)
     h->flags |= XCOFF_MARK;
 
   /* If this symbol is called, and it is defined in a dynamic object,
-     then we need to set up global linkage code for it.  (Unless we
-     did garbage collection and we didn't need this symbol.)  */
+     or if we are creating a dynamic object and it is not defined at
+     all, then we need to set up global linkage code for it.  (Unless
+     we did garbage collection and we didn't need this symbol.)  */
   if ((h->flags & XCOFF_CALLED) != 0
       && (h->flags & XCOFF_DEF_REGULAR) == 0
-      && (h->flags & XCOFF_REF_DYNAMIC) != 0
       && (h->root.type == bfd_link_hash_undefined
          || h->root.type == bfd_link_hash_undefweak)
+      && ((h->flags & XCOFF_REF_DYNAMIC) != 0
+         || ldinfo->info->shared)
       && h->root.root.string[0] == '.'
       && (! xcoff_hash_table (ldinfo->info)->gc
          || (h->flags & XCOFF_MARK) != 0))
@@ -2761,7 +2765,8 @@ xcoff_build_ldsyms (h, p)
       BFD_ASSERT ((hds->root.type == bfd_link_hash_undefined
                   || hds->root.type == bfd_link_hash_undefweak)
                  && (hds->flags & XCOFF_DEF_REGULAR) == 0
-                 && (hds->flags & XCOFF_REF_DYNAMIC) != 0);
+                 && ((hds->flags & XCOFF_REF_DYNAMIC) != 0
+                     || ldinfo->info->shared));
       hds->flags |= XCOFF_MARK;
       if (hds->toc_section == NULL)
        {