aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1994-04-07 18:12:25 +0000
committerJeff Law <law@redhat.com>1994-04-07 18:12:25 +0000
commit99a6c7613c5c91c5c9b7738b85cc118116afaf65 (patch)
tree41fee94298f15d470c252a130f4d8e96ca4183a3
parent0b503989f524eabb6edf5090f4d2cdb40d12900d (diff)
downloadgdb-99a6c7613c5c91c5c9b7738b85cc118116afaf65.zip
gdb-99a6c7613c5c91c5c9b7738b85cc118116afaf65.tar.gz
gdb-99a6c7613c5c91c5c9b7738b85cc118116afaf65.tar.bz2
* 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.
-rw-r--r--bfd/ChangeLog27
-rw-r--r--bfd/elf32-target.h4
-rw-r--r--bfd/elf64-target.h5
-rw-r--r--bfd/elfcode.h10
-rw-r--r--bfd/libelf.h4
5 files changed, 50 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f2f946d..085fc84 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elf32-target.h b/bfd/elf32-target.h
index f5a1fae..dc0ccf6 100644
--- a/bfd/elf32-target.h
+++ b/bfd/elf32-target.h
@@ -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
};
diff --git a/bfd/elf64-target.h b/bfd/elf64-target.h
index e32f114..3194073 100644
--- a/bfd/elf64-target.h
+++ b/bfd/elf64-target.h
@@ -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
};
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index 8a54d4b..5fd4299 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -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;
diff --git a/bfd/libelf.h b/bfd/libelf.h
index 9eb93ec..ce22cc1 100644
--- a/bfd/libelf.h
+++ b/bfd/libelf.h
@@ -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 *));