From f83d594e4f8a49d3a6f5e199b48b42d4d6e75c2d Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 5 Oct 2001 21:55:12 +0000 Subject: [PATCH] * som.h (som_exec_data): New field "version_id". * som.c (som_object_setup): Record the version_id if it exists. (som_prep_headers): Do not initialize version_id here. (som_finish_writing): Initialize version_id here. --- bfd/ChangeLog | 10 +++++++++- bfd/som.c | 13 ++++++++++--- bfd/som.h | 4 ++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d637d48bf..01412b689 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,4 +1,12 @@ -2001-10-05 Thiemo Seufer +2001-10-05 Jeff Law + + * som.h (som_exec_data): New field "version_id". + * som.c (som_object_setup): Record the version_id if it + exists. + (som_prep_headers): Do not initialize version_id here. + (som_finish_writing): Initialize version_id here. + +2000-10-05 Thiemo Seufer * elf32-mips.c (elf_mips_howto_table): Fix some relocation howtos according to the MIPS/SGI ELF64 ABI Draft. diff --git a/bfd/som.c b/bfd/som.c index 0f1fc09e8..95735f595 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -1814,6 +1814,8 @@ som_object_setup (abfd, file_hdrp, aux_hdrp, current_offset) obj_som_exec_data (abfd)->exec_flags = aux_hdrp->exec_flags; } + obj_som_exec_data (abfd)->version_id = file_hdrp->version_id; + bfd_default_set_arch_mach (abfd, bfd_arch_hppa, pa10); bfd_get_symcount (abfd) = file_hdrp->symbol_total; @@ -2320,9 +2322,6 @@ som_prep_headers (abfd) else file_hdr->a_magic = RELOC_MAGIC; - /* Only new format SOM is supported. */ - file_hdr->version_id = NEW_VERSION_ID; - /* These fields are optional, and embedding timestamps is not always a wise thing to do, it makes comparing objects during a multi-stage bootstrap difficult. */ @@ -3688,6 +3687,14 @@ som_finish_writing (abfd) unsigned int total_reloc_size; bfd_size_type amt; + /* We must set up the version identifier here as objcopy/strip copy + private BFD data too late for us to handle this in som_begin_writing. */ + if (obj_som_exec_data (abfd) + && obj_som_exec_data (abfd)->version_id) + obj_som_file_hdr (abfd)->version_id = obj_som_exec_data (abfd)->version_id; + else + obj_som_file_hdr (abfd)->version_id = NEW_VERSION_ID; + /* Next is the symbol table. These are fixed length records. Count the number of symbols to determine how much room is needed diff --git a/bfd/som.h b/bfd/som.h index 5f0d1839d..158c96f91 100644 --- a/bfd/som.h +++ b/bfd/som.h @@ -94,6 +94,10 @@ struct som_exec_data null pointer dereferencing is allowed and the like. */ long exec_flags; + /* We must preserve the version identifier too. Some versions + of the HP linker do not grok NEW_VERSION_ID for reasons unknown. */ + unsigned int version_id; + /* Add more stuff here as needed. Good examples of information we might want to pass would be presumed_dp, entry_* and maybe others from the file header. */ -- 2.11.4.GIT