* 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:
parent
c0e047e0e5
commit
2517a57fdf
4 changed files with 34 additions and 17 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue