* elf-bfd.h (struct elf_backend_data): Add want_dynbss.

* elflink.c (_bfd_elf_create_dynamic_sections): Only create
        .dynbss and .rel[a].bss if want_dynbss.
        * elfxx-target.h (elf_backend_want_dynbss): Provide default.
This commit is contained in:
Richard Henderson 1999-07-13 18:31:17 +00:00
parent 30b30c2181
commit 3018b44153
4 changed files with 36 additions and 20 deletions

View File

@ -1,7 +1,16 @@
1999-07-13 Richard Henderson <rth@cygnus.com>
* elf-bfd.h (struct elf_backend_data): Add want_dynbss.
* elflink.c (_bfd_elf_create_dynamic_sections): Only create
.dynbss and .rel[a].bss if want_dynbss.
* elfxx-target.h (elf_backend_want_dynbss): Provide default.
1999-07-13 Richard Henderson <rth@cygnus.com> 1999-07-13 Richard Henderson <rth@cygnus.com>
* elf.c (assign_file_positions_for_segments): Don't overwrite p_flags. * elf.c (assign_file_positions_for_segments): Don't overwrite p_flags.
1999-07-13 Richard Henderson <rth@cygnus.com>
* elf-bfd.h (struct elf_link_local_dynamic_entry): New. * elf-bfd.h (struct elf_link_local_dynamic_entry): New.
(struct elf_link_hash_table): Add dynlocal. (struct elf_link_hash_table): Add dynlocal.
(_bfd_elf_link_lookup_local_dynindx): Prototype. (_bfd_elf_link_lookup_local_dynindx): Prototype.

View File

@ -623,6 +623,7 @@ struct elf_backend_data
unsigned plt_not_loaded : 1; unsigned plt_not_loaded : 1;
unsigned plt_alignment : 4; unsigned plt_alignment : 4;
unsigned can_gc_sections : 1; unsigned can_gc_sections : 1;
unsigned want_dynbss : 1;
}; };
/* Information stored for each BFD section in an ELF file. This /* Information stored for each BFD section in an ELF file. This

View File

@ -157,18 +157,20 @@ _bfd_elf_create_dynamic_sections (abfd, info)
if (! _bfd_elf_create_got_section (abfd, info)) if (! _bfd_elf_create_got_section (abfd, info))
return false; return false;
/* The .dynbss section is a place to put symbols which are defined if (bed->want_dynbss)
by dynamic objects, are referenced by regular objects, and are {
not functions. We must allocate space for them in the process /* The .dynbss section is a place to put symbols which are defined
image and use a R_*_COPY reloc to tell the dynamic linker to by dynamic objects, are referenced by regular objects, and are
initialize them at run time. The linker script puts the .dynbss not functions. We must allocate space for them in the process
section into the .bss section of the final image. */ image and use a R_*_COPY reloc to tell the dynamic linker to
s = bfd_make_section (abfd, ".dynbss"); initialize them at run time. The linker script puts the .dynbss
if (s == NULL section into the .bss section of the final image. */
|| ! bfd_set_section_flags (abfd, s, SEC_ALLOC)) s = bfd_make_section (abfd, ".dynbss");
return false; if (s == NULL
|| ! bfd_set_section_flags (abfd, s, SEC_ALLOC))
return false;
/* The .rel[a].bss section holds copy relocs. This section is not /* The .rel[a].bss section holds copy relocs. This section is not
normally needed. We need to create it here, though, so that the normally needed. We need to create it here, though, so that the
linker will map it to an output section. We can't just create it linker will map it to an output section. We can't just create it
only if we need it, because we will not know whether we need it only if we need it, because we will not know whether we need it
@ -179,15 +181,16 @@ _bfd_elf_create_dynamic_sections (abfd, info)
be needed, we can discard it later. We will never need this be needed, we can discard it later. We will never need this
section when generating a shared object, since they do not use section when generating a shared object, since they do not use
copy relocs. */ copy relocs. */
if (! info->shared) if (! info->shared)
{ {
s = bfd_make_section (abfd, s = bfd_make_section (abfd,
(bed->default_use_rela_p (bed->default_use_rela_p
? ".rela.bss" : ".rel.bss")); ? ".rela.bss" : ".rel.bss"));
if (s == NULL if (s == NULL
|| ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY) || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|| ! bfd_set_section_alignment (abfd, s, ptralign)) || ! bfd_set_section_alignment (abfd, s, ptralign))
return false; return false;
}
} }
return true; return true;

View File

@ -80,6 +80,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef elf_backend_plt_alignment #ifndef elf_backend_plt_alignment
#define elf_backend_plt_alignment 2 #define elf_backend_plt_alignment 2
#endif #endif
#ifndef elf_backend_want_dynbss
#define elf_backend_want_dynbss 1
#endif
#define bfd_elfNN_bfd_debug_info_start bfd_void #define bfd_elfNN_bfd_debug_info_start bfd_void
#define bfd_elfNN_bfd_debug_info_end bfd_void #define bfd_elfNN_bfd_debug_info_end bfd_void