mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-01 13:26:47 +08:00
* som.c (som_prep_headers): New function.
This commit is contained in:
parent
3e330968cd
commit
0ffa24b979
@ -1,5 +1,7 @@
|
|||||||
Fri Nov 12 15:29:36 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
Fri Nov 12 15:29:36 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
|
* som.c (som_prep_headers): New function.
|
||||||
|
|
||||||
* som.c (som_count_spaces): New function.
|
* som.c (som_count_spaces): New function.
|
||||||
(som_count_subspaces): New function.
|
(som_count_subspaces): New function.
|
||||||
(compare_syms): New function.
|
(compare_syms): New function.
|
||||||
|
95
bfd/som.c
95
bfd/som.c
@ -153,7 +153,8 @@ static unsigned long som_count_spaces PARAMS ((bfd *));
|
|||||||
static unsigned long som_count_subspaces PARAMS ((bfd *));
|
static unsigned long som_count_subspaces PARAMS ((bfd *));
|
||||||
static int compare_syms PARAMS ((asymbol **, asymbol **));
|
static int compare_syms PARAMS ((asymbol **, asymbol **));
|
||||||
static unsigned long som_compute_checksum PARAMS ((bfd *));
|
static unsigned long som_compute_checksum PARAMS ((bfd *));
|
||||||
|
static boolean som_prep_headers PARAMS ((bfd *));
|
||||||
|
|
||||||
static reloc_howto_type som_hppa_howto_table[] =
|
static reloc_howto_type som_hppa_howto_table[] =
|
||||||
{
|
{
|
||||||
{R_NO_RELOCATION, 0, 0, 32, false, 0, 0, hppa_som_reloc, "R_NO_RELOCATION"},
|
{R_NO_RELOCATION, 0, 0, 32, false, 0, 0, hppa_som_reloc, "R_NO_RELOCATION"},
|
||||||
@ -1165,6 +1166,98 @@ som_mkobject (abfd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize some information in the file header. This routine makes
|
||||||
|
not attempt at doing the right thing for a full executable; it
|
||||||
|
is only meant to handle relocatable objects. */
|
||||||
|
|
||||||
|
static boolean
|
||||||
|
som_prep_headers (abfd)
|
||||||
|
bfd *abfd;
|
||||||
|
{
|
||||||
|
struct header *file_hdr = obj_som_file_hdr (abfd);
|
||||||
|
asection *section;
|
||||||
|
|
||||||
|
/* FIXME. This should really be conditional based on whether or not
|
||||||
|
PA1.1 instructions/registers have been used. */
|
||||||
|
file_hdr->system_id = HP9000S800_ID;
|
||||||
|
|
||||||
|
/* FIXME. Only correct for building relocatable objects. */
|
||||||
|
if (abfd->flags & EXEC_P)
|
||||||
|
abort ();
|
||||||
|
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. */
|
||||||
|
file_hdr->file_time.secs = 0;
|
||||||
|
file_hdr->file_time.nanosecs = 0;
|
||||||
|
|
||||||
|
if (abfd->flags & EXEC_P)
|
||||||
|
abort ();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file_hdr->entry_space = 0;
|
||||||
|
file_hdr->entry_subspace = 0;
|
||||||
|
file_hdr->entry_offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME. I do not know if we ever need to put anything other
|
||||||
|
than zero in this field. */
|
||||||
|
file_hdr->presumed_dp = 0;
|
||||||
|
|
||||||
|
/* Now iterate over the sections translating information from
|
||||||
|
BFD sections to SOM spaces/subspaces. */
|
||||||
|
|
||||||
|
for (section = abfd->sections; section != NULL; section = section->next)
|
||||||
|
{
|
||||||
|
/* Ignore anything which has not been marked as a space or
|
||||||
|
subspace. */
|
||||||
|
if (som_section_data (section)->is_space == 0
|
||||||
|
|
||||||
|
&& som_section_data (section)->is_subspace == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (som_section_data (section)->is_space)
|
||||||
|
{
|
||||||
|
/* Set space attributes. Note most attributes of SOM spaces
|
||||||
|
are set based on the subspaces it contains. */
|
||||||
|
som_section_data (section)->space_dict.loader_fix_index = -1;
|
||||||
|
som_section_data (section)->space_dict.init_pointer_index = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set subspace attributes. Basic stuff is done here, additional
|
||||||
|
attributes are filled in later as more information becomes
|
||||||
|
available. */
|
||||||
|
if (section->flags & SEC_IS_COMMON)
|
||||||
|
{
|
||||||
|
som_section_data (section)->subspace_dict.dup_common = 1;
|
||||||
|
som_section_data (section)->subspace_dict.is_common = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section->flags & SEC_ALLOC)
|
||||||
|
som_section_data (section)->subspace_dict.is_loadable = 1;
|
||||||
|
|
||||||
|
if (section->flags & SEC_CODE)
|
||||||
|
som_section_data (section)->subspace_dict.code_only = 1;
|
||||||
|
|
||||||
|
som_section_data (section)->subspace_dict.subspace_start =
|
||||||
|
section->vma;
|
||||||
|
som_section_data (section)->subspace_dict.subspace_length =
|
||||||
|
bfd_section_size (abfd, section);
|
||||||
|
som_section_data (section)->subspace_dict.initialization_length =
|
||||||
|
bfd_section_size (abfd, section);
|
||||||
|
som_section_data (section)->subspace_dict.alignment =
|
||||||
|
1 << section->alignment_power;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Count and return the number of spaces attached to the given BFD. */
|
/* Count and return the number of spaces attached to the given BFD. */
|
||||||
|
|
||||||
static unsigned long
|
static unsigned long
|
||||||
|
Loading…
Reference in New Issue
Block a user