diff options
author | Ian Lance Taylor <ian@airs.com> | 1995-09-26 16:56:28 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1995-09-26 16:56:28 +0000 |
commit | fcf490c05f5bfe2a302c3309f51a863606a2a972 (patch) | |
tree | cc0f37fc2b13f2bebac8fec6850fa8236b2157a4 /bfd/ecoff.c | |
parent | 7a7fbffb25e87d2399478a82f6f41343ea78450a (diff) | |
download | gdb-fcf490c05f5bfe2a302c3309f51a863606a2a972.zip gdb-fcf490c05f5bfe2a302c3309f51a863606a2a972.tar.gz gdb-fcf490c05f5bfe2a302c3309f51a863606a2a972.tar.bz2 |
* aoutx.h (translate_from_native_sym_flags): Don't try to stuff
pointers into value field for warning and indirect symbols; just
leave the value field alone.
* linker.c (generic_link_add_symbol_list): Use next symbol for
warning and indirect symbols, rather than looking in symbol value.
* ecoff.c (ecoff_set_symbol_info): Remove indirect_ptr_ptr
parameter. Change all callers. Remove support for indirect
symbols; it didn't work anyhow.
(_bfd_ecoff_slurp_symbol_table): Remove indirect_ptr variable.
* syms.c: Change comments about BSF_WARNING and BSF_INDIRECT.
* bfd-in2.h: Rebuild.
Diffstat (limited to 'bfd/ecoff.c')
-rw-r--r-- | bfd/ecoff.c | 42 |
1 files changed, 4 insertions, 38 deletions
diff --git a/bfd/ecoff.c b/bfd/ecoff.c index 37af7ab..1fe4f75 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -50,8 +50,7 @@ static long ecoff_sec_to_styp_flags PARAMS ((const char *name, flagword flags)); static boolean ecoff_slurp_symbolic_header PARAMS ((bfd *abfd)); static boolean ecoff_set_symbol_info PARAMS ((bfd *abfd, SYMR *ecoff_sym, - asymbol *asym, int ext, - asymbol **indirect_ptr_ptr)); + asymbol *asym, int ext)); static void ecoff_emit_aggregate PARAMS ((bfd *abfd, FDR *fdr, char *string, RNDXR *rndx, long isym, @@ -658,46 +657,17 @@ _bfd_ecoff_make_empty_symbol (abfd) /* Set the BFD flags and section for an ECOFF symbol. */ static boolean -ecoff_set_symbol_info (abfd, ecoff_sym, asym, ext, indirect_ptr_ptr) +ecoff_set_symbol_info (abfd, ecoff_sym, asym, ext) bfd *abfd; SYMR *ecoff_sym; asymbol *asym; int ext; - asymbol **indirect_ptr_ptr; { asym->the_bfd = abfd; asym->value = ecoff_sym->value; asym->section = &bfd_debug_section; asym->udata.i = 0; - /* An indirect symbol requires two consecutive stabs symbols. */ - if (*indirect_ptr_ptr != (asymbol *) NULL) - { - BFD_ASSERT (ECOFF_IS_STAB (ecoff_sym)); - - /* @@ Stuffing pointers into integers is a no-no. - We can usually get away with it if the integer is - large enough though. */ - if (sizeof (asym) > sizeof (bfd_vma)) - abort (); - (*indirect_ptr_ptr)->value = (bfd_vma) asym; - - asym->flags = BSF_DEBUGGING; - asym->section = bfd_und_section_ptr; - *indirect_ptr_ptr = NULL; - return true; - } - - if (ECOFF_IS_STAB (ecoff_sym) - && (ECOFF_UNMARK_STAB (ecoff_sym->index) | N_EXT) == (N_INDR | N_EXT)) - { - asym->flags = BSF_DEBUGGING | BSF_INDIRECT; - asym->section = bfd_ind_section_ptr; - /* Pass this symbol on to the next call to this function. */ - *indirect_ptr_ptr = asym; - return true; - } - /* Most symbol types are just for debugging. */ switch (ecoff_sym->st) { @@ -948,7 +918,6 @@ _bfd_ecoff_slurp_symbol_table (abfd) bfd_size_type internal_size; ecoff_symbol_type *internal; ecoff_symbol_type *internal_ptr; - asymbol *indirect_ptr; char *eraw_src; char *eraw_end; FDR *fdr_ptr; @@ -974,7 +943,6 @@ _bfd_ecoff_slurp_symbol_table (abfd) } internal_ptr = internal; - indirect_ptr = NULL; eraw_src = (char *) ecoff_data (abfd)->debug_info.external_ext; eraw_end = (eraw_src + (ecoff_data (abfd)->debug_info.symbolic_header.iextMax @@ -987,7 +955,7 @@ _bfd_ecoff_slurp_symbol_table (abfd) internal_ptr->symbol.name = (ecoff_data (abfd)->debug_info.ssext + internal_esym.asym.iss); if (!ecoff_set_symbol_info (abfd, &internal_esym.asym, - &internal_ptr->symbol, 1, &indirect_ptr)) + &internal_ptr->symbol, 1)) return false; /* The alpha uses a negative ifd field for section symbols. */ if (internal_esym.ifd >= 0) @@ -998,7 +966,6 @@ _bfd_ecoff_slurp_symbol_table (abfd) internal_ptr->local = false; internal_ptr->native = (PTR) eraw_src; } - BFD_ASSERT (indirect_ptr == (asymbol *) NULL); /* The local symbols must be accessed via the fdr's, because the string and aux indices are relative to the fdr information. */ @@ -1023,14 +990,13 @@ _bfd_ecoff_slurp_symbol_table (abfd) + fdr_ptr->issBase + internal_sym.iss); if (!ecoff_set_symbol_info (abfd, &internal_sym, - &internal_ptr->symbol, 0, &indirect_ptr)) + &internal_ptr->symbol, 0)) return false; internal_ptr->fdr = fdr_ptr; internal_ptr->local = true; internal_ptr->native = (PTR) lraw_src; } } - BFD_ASSERT (indirect_ptr == (asymbol *) NULL); ecoff_data (abfd)->canonical_symbols = internal; |