* elf-bfd.h (struct elf_backend_data): Add want_got_sym.
authorAlan Modra <amodra@gmail.com>
Wed, 8 Aug 2001 13:09:33 +0000 (13:09 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 8 Aug 2001 13:09:33 +0000 (13:09 +0000)
* elfxx-target.h (elf_backend_want_got_sym): Define.
(elfNN_bed): Add elf_backend_want_got_sym.
* elflink.c (_bfd_elf_create_got_section): Define
_GLOBAL_OFFSET_TABLE_ only if bed->want_got_sym.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elflink.c
bfd/elfxx-target.h

index 9429b02..c487e46 100644 (file)
@@ -1,3 +1,12 @@
+2001-08-08  Alan Modra  <amodra@bigpond.net.au>
+
+       1999-10-19  Linus Nordberg  <linus@swox.se>
+       * elf-bfd.h (struct elf_backend_data): Add want_got_sym.
+       * elfxx-target.h (elf_backend_want_got_sym): Define.
+       (elfNN_bed): Add elf_backend_want_got_sym.
+       * elflink.c (_bfd_elf_create_got_section): Define
+       _GLOBAL_OFFSET_TABLE_ only if bed->want_got_sym.
+
 2001-08-08  Alexandre Oliva  <aoliva@redhat.com>
 
        * dwarf2.c (struct dwarf2_debug): Add sec, sec_info_ptr and syms.
index 85e1e30..7c67cb5 100644 (file)
@@ -694,6 +694,7 @@ struct elf_backend_data
   unsigned plt_not_loaded : 1;
   unsigned plt_alignment : 4;
   unsigned can_gc_sections : 1;
+  unsigned want_got_sym : 1;
   unsigned want_dynbss : 1;
 };
 
index b971311..f06a49b 100644 (file)
@@ -73,24 +73,27 @@ _bfd_elf_create_got_section (abfd, info)
        return false;
     }
 
-  /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
-     (or .got.plt) section.  We don't do this in the linker script
-     because we don't want to define the symbol if we are not creating
-     a global offset table.  */
-  h = NULL;
-  if (!(_bfd_generic_link_add_one_symbol
-       (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
-        bed->got_symbol_offset, (const char *) NULL, false,
-        bed->collect, (struct bfd_link_hash_entry **) &h)))
-    return false;
-  h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
-  h->type = STT_OBJECT;
+  if (bed->want_got_sym)
+    {
+      /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
+        (or .got.plt) section.  We don't do this in the linker script
+        because we don't want to define the symbol if we are not creating
+        a global offset table.  */
+      h = NULL;
+      if (!(_bfd_generic_link_add_one_symbol
+           (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
+            bed->got_symbol_offset, (const char *) NULL, false,
+            bed->collect, (struct bfd_link_hash_entry **) &h)))
+       return false;
+      h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+      h->type = STT_OBJECT;
 
-  if (info->shared
-      && ! _bfd_elf_link_record_dynamic_symbol (info, h))
-    return false;
+      if (info->shared
+         && ! _bfd_elf_link_record_dynamic_symbol (info, h))
+       return false;
 
-  elf_hash_table (info)->hgot = h;
+      elf_hash_table (info)->hgot = h;
+    }
 
   /* The first bit of the global offset table is the header.  */
   s->_raw_size += bed->got_header_size + bed->got_symbol_offset;
index 5f413d2..2b86aac 100644 (file)
@@ -101,6 +101,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifndef elf_backend_can_gc_sections
 #define elf_backend_can_gc_sections 0
 #endif
+#ifndef elf_backend_want_got_sym
+#define elf_backend_want_got_sym 1
+#endif
 #ifndef elf_backend_gc_mark_hook
 #define elf_backend_gc_mark_hook       NULL
 #endif
@@ -439,7 +442,8 @@ static CONST struct elf_backend_data elfNN_bed =
   elf_backend_plt_not_loaded,
   elf_backend_plt_alignment,
   elf_backend_can_gc_sections,
-  elf_backend_want_dynbss
+  elf_backend_want_dynbss,
+  elf_backend_want_got_sym
 };
 #endif