/* bfd back-end for HP PA-RISC SOM objects.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001
+ 2000, 2001, 2002
Free Software Foundation, Inc.
Contributed by the Center for Software Science at the
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;
char *space_strings;
unsigned int space_index, i;
unsigned int total_subspaces = 0;
- asection **subspace_sections, *section;
+ asection **subspace_sections = NULL;
+ asection *section;
bfd_size_type amt;
/* First, read in space names. */
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. */
break;
case R_END_TRY:
- /* The end of a exception handling region. The reloc's
+ /* The end of an exception handling region. The reloc's
addend contains the offset of the exception handling
code. */
if (bfd_reloc->addend == 0)
/* Ensure a minimum growth factor to avoid O(n**2) space
consumption for n strings. The optimal minimum
factor seems to be 2, as no other value can guarantee
- wasting less then 50% space. (Note that we cannot
+ wasting less than 50% space. (Note that we cannot
deallocate space allocated by `alloca' without
returning from this function.) The same technique is
used a few more times below when a buffer is
/* Seek to the start of the space strings in preparation for writing
them out. */
- if (bfd_seek (abfd, current_offset, SEEK_SET) != 0)
+ if (bfd_seek (abfd, (file_ptr) current_offset, SEEK_SET) != 0)
return false;
if (compilation_unit)
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