aboutsummaryrefslogtreecommitdiff
path: root/bfd/elflink.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2001-08-08 13:09:33 +0000
committerAlan Modra <amodra@gmail.com>2001-08-08 13:09:33 +0000
commit2517a57fdf395c6e5068577d1d4f86b3c6935e6d (patch)
tree4d215ffb01898e890e9512c20a263b5086460b96 /bfd/elflink.c
parentc0e047e0e5090fe5148f5230e7e4abb3ff2c50ee (diff)
downloadgdb-2517a57fdf395c6e5068577d1d4f86b3c6935e6d.zip
gdb-2517a57fdf395c6e5068577d1d4f86b3c6935e6d.tar.gz
gdb-2517a57fdf395c6e5068577d1d4f86b3c6935e6d.tar.bz2
* 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.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r--bfd/elflink.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index b971311..f06a49b 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -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;