* 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.
This commit is contained in:
Alan Modra 2001-08-08 13:09:33 +00:00
parent c0e047e0e5
commit 2517a57fdf
4 changed files with 34 additions and 17 deletions

View 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.

View 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;
};

View 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;

View 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