* elfcode.h (elf_set_section_contents): Support calling the backend

function elf_backend_begin_write_processing when just beginning to
	write an object file.

	* libelf.h (elf_backend_begin_write_processing): Declare.

	* elf{32,64}-target.h (elf_backend_begin_write_processing): Provide
	a default definition.
	(elf{32,64}_bed): Add elf_backend_begin_write_processing.

	* elf32-hppa.h (elf_hppa_tc_symbol): Delete extern declaration.
	(elf_hppa_tc_make_sections): Likewise.

	* elf32-hppa.c (symext_chain_built): Delete.
	(symext_chain_size): Renamed from symextn_contents_real_size.
	(elf32_hppa_backend_{begin,final}_write_processing): New functions.
	(add_entry_to_symext_chain): New function.
	(hppa_elf_set_section_contents): Ignore writes to the symbol extension
	section until it's been rebuilt internally.
	(hppa_elf_get_section_contents): Symbol extension section is no
	longer special.
	(elf_backend_{begin,final}_write_processing): Define.
	(elf_hppa_tc_make_sections): Simplify now that much code has
	migrated into elf32_hppa_backend_{being,final}_write_processing.
This commit is contained in:
Jeff Law 1994-04-07 18:12:25 +00:00
parent 0b503989f5
commit 99a6c7613c
5 changed files with 50 additions and 0 deletions

View File

@ -1,3 +1,30 @@
Thu Apr 7 11:10:51 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
* elfcode.h (elf_set_section_contents): Support calling the backend
function elf_backend_begin_write_processing when just beginning to
write an object file.
* libelf.h (elf_backend_begin_write_processing): Declare.
* elf{32,64}-target.h (elf_backend_begin_write_processing): Provide
a default definition.
(elf{32,64}_bed): Add elf_backend_begin_write_processing.
* elf32-hppa.h (elf_hppa_tc_symbol): Delete extern declaration.
(elf_hppa_tc_make_sections): Likewise.
* elf32-hppa.c (symext_chain_built): Delete.
(symext_chain_size): Renamed from symextn_contents_real_size.
(elf32_hppa_backend_{begin,final}_write_processing): New functions.
(add_entry_to_symext_chain): New function.
(hppa_elf_set_section_contents): Ignore writes to the symbol extension
section until it's been rebuilt internally.
(hppa_elf_get_section_contents): Symbol extension section is no
longer special.
(elf_backend_{begin,final}_write_processing): Define.
(elf_hppa_tc_make_sections): Simplify now that much code has
migrated into elf32_hppa_backend_{being,final}_write_processing.
Wed Apr 6 17:24:14 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
Add new target vectors to read the dynamic symbols and dynamic

View File

@ -91,6 +91,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef elf_backend_section_from_bfd_section
#define elf_backend_section_from_bfd_section 0
#endif
#ifndef elf_backend_begin_write_processing
#define elf_backend_begin_write_processing 0
#endif
#ifndef elf_backend_final_write_processing
#define elf_backend_final_write_processing 0
#endif
@ -119,6 +122,7 @@ static CONST struct elf_backend_data elf32_bed =
elf_backend_section_from_shdr,
elf_backend_fake_sections,
elf_backend_section_from_bfd_section,
elf_backend_begin_write_processing,
elf_backend_final_write_processing,
elf_backend_ecoff_debug_swap
};

View File

@ -94,6 +94,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef elf_backend_section_from_bfd_section
#define elf_backend_section_from_bfd_section 0
#endif
#ifndef elf_backend_begin_write_processing
#define elf_backend_begin_write_processing 0
#endif
#ifndef elf_backend_final_write_processing
#define elf_backend_final_write_processing 0
#endif
@ -122,6 +125,8 @@ static CONST struct elf_backend_data elf64_bed =
elf_backend_section_from_shdr,
elf_backend_fake_sections,
elf_backend_section_from_bfd_section,
elf_backend_begin_write_processing,
elf_backend_final_write_processing,
elf_backend_ecoff_debug_swap
};

View File

@ -2374,6 +2374,10 @@ NAME(bfd_elf,write_object_contents) (abfd)
if (abfd->output_has_begun == false)
{
/* Do any elf backend specific processing first. */
if (bed->elf_backend_begin_write_processing)
(*bed->elf_backend_begin_write_processing) (abfd);
if (prep_headers (abfd) == false)
return false;
if (elf_compute_section_file_positions (abfd) == false)
@ -3233,6 +3237,12 @@ elf_set_section_contents (abfd, section, location, offset, count)
if (abfd->output_has_begun == false) /* set by bfd.c handler? */
{
struct elf_backend_data *bed = get_elf_backend_data (abfd);
/* Do any elf backend specific processing first. */
if (bed->elf_backend_begin_write_processing)
(*bed->elf_backend_begin_write_processing) (abfd);
/* do setup calculations (FIXME) */
if (prep_headers (abfd) == false)
return false;

View File

@ -149,6 +149,10 @@ struct elf_backend_data
boolean (*elf_backend_section_from_bfd_section)
PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *retval));
/* A function to do any beginning processing needed for the ELF file
before building the ELF headers and computing file positions. */
void (*elf_backend_begin_write_processing) PARAMS ((bfd *));
/* A function to do any final processing needed for the ELF file
before writing it out. */
void (*elf_backend_final_write_processing) PARAMS ((bfd *));