* som.h (som_symbol_type): Delete unwind field.

* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
	unwind information from the addend field of the R_ENTRY, get the
	other 32bits from the addend field of the R_EXIT.
	(bfd_som_attach_unwind_info): Delete function and all references.
This commit is contained in:
Jeff Law 1994-09-14 02:28:52 +00:00
parent 75c28b4966
commit e10639db44
3 changed files with 27 additions and 34 deletions

View File

@ -1,5 +1,12 @@
Tue Sep 13 17:57:00 1994 Jeff Law (law@snake.cs.utah.edu)
* som.h (som_symbol_type): Delete unwind field.
* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
unwind information from the addend field of the R_ENTRY, get the
other 32bits from the addend field of the R_EXIT.
(bfd_som_attach_unwind_info): Delete function and all references.
* som.h (som_symbol_type): Delete unused a.out-related fields.
* som.c (bfd_section_from_som_symbol): Use bfd_abs_section_ptr

View File

@ -2536,25 +2536,30 @@ som_write_fixups (abfd, current_offset, total_reloc_sizep)
case R_ENTRY:
{
int *descp = (int *)
som_symbol_data (*bfd_reloc->sym_ptr_ptr)->unwind;
int tmp;
arelent *tmp_reloc;
bfd_put_8 (abfd, R_ENTRY, p);
/* FIXME: We should set the sym_ptr for the R_ENTRY
reloc to point to the appropriate function symbol,
and attach unwind bits to the function symbol as
we canonicalize the relocs. Doing so would ensure
descp would always point to something useful. */
if (descp)
/* R_ENTRY relocations have 64 bits of associated
data. Unfortunately the addend field of a bfd
relocation is only 32 bits. So, we split up
the 64bit unwind information and store part in
the R_ENTRY relocation, and the rest in the R_EXIT
relocation. */
bfd_put_32 (abfd, bfd_reloc->addend, p + 1);
/* Find the next R_EXIT relocation. */
for (tmp = j; tmp < subsection->reloc_count; tmp++)
{
bfd_put_32 (abfd, descp[0], p + 1);
bfd_put_32 (abfd, descp[1], p + 5);
}
else
{
bfd_put_32 (abfd, 0, p + 1);
bfd_put_32 (abfd, 0, p + 5);
tmp_reloc = subsection->orelocation[tmp];
if (tmp_reloc->howto->type == R_EXIT)
break;
}
if (tmp == subsection->reloc_count)
abort ();
bfd_put_32 (abfd, tmp_reloc->addend, p + 5);
p = try_prev_fixup (abfd, &subspace_reloc_size,
p, 9, reloc_queue);
break;
@ -4485,18 +4490,6 @@ bfd_som_set_symbol_type (symbol, type)
som_symbol_data (symbol)->som_type = type;
}
/* Attach 64bits of unwind information to a symbol (which hopefully
is a function of some kind!). It would be better to keep this
in the R_ENTRY relocation, but there is not enough space. */
void
bfd_som_attach_unwind_info (symbol, unwind_desc)
asymbol *symbol;
char *unwind_desc;
{
som_symbol_data (symbol)->unwind = unwind_desc;
}
/* Attach an auxiliary header to the BFD backend so that it may be
written into the object file. */
boolean

View File

@ -64,12 +64,6 @@ typedef struct som_symbol
the symbols from most used to least used we can significantly
reduce the size of the relocation stream for incomplete objects. */
int reloc_count;
/* The unwind descriptor bits associated with R_ENTRY relocations
for functions (not enough room in a BFD reloc to store all the
information, so we tack it onto the symbol associated with the
function. */
char *unwind;
}
som_symbol_type;
@ -210,7 +204,6 @@ boolean bfd_som_set_section_attributes PARAMS ((asection *, int, int,
boolean bfd_som_set_subsection_attributes PARAMS ((asection *, asection *,
int, unsigned int, int));
void bfd_som_set_symbol_type PARAMS ((asymbol *, unsigned int));
void bfd_som_attach_unwind_info PARAMS ((asymbol *, char *));
boolean bfd_som_attach_aux_hdr PARAMS ((bfd *, int, char *));
int ** hppa_som_gen_reloc_type
PARAMS ((bfd *, int, int, enum hppa_reloc_field_selector_type_alt));