/* FIXME: coff/internal.h and aout/aout64.h both define N_ABS. We
want the definition from aout/aout64.h. */
#undef N_ABS
-/* FIXME: coff/mips.h and aout/aout64.h both define ZMAGIC. We don't
- use it. */
-#undef ZMAGIC
#include "libaout.h" /* Private BFD a.out information. */
#include "aout/aout64.h"
images that have been partially stripped (ld -x) have been deprived
of local symbols, and we have to cope with them here. FIRST_OFF is
the offset of the first procedure for this FDR; we adjust the
- address by this amount, but I don't know why. */
+ address by this amount, but I don't know why. SEARCH_SYMTAB is the symtab
+ to look for the function which contains the MIPS_EFI_SYMBOL_NAME symbol
+ in question, or NULL to use top_stack->cur_block. */
+
+static void parse_procedure PARAMS ((PDR *, struct symtab *, unsigned long));
static void
-parse_procedure (pr, have_stabs, first_off)
+parse_procedure (pr, search_symtab, first_off)
PDR *pr;
- int have_stabs;
+ struct symtab *search_symtab;
unsigned long first_off;
{
struct symbol *s, *i;
sh_name = ecoff_data (cur_bfd)->ss + cur_fdr->issBase + sh.iss;
}
- if (have_stabs)
+ if (search_symtab != NULL)
{
+#if 0
+ /* This loses both in the case mentioned (want a static, find a global),
+ but also if we are looking up a non-mangled name which happens to
+ match the name of a mangled function. */
/* We have to save the cur_fdr across the call to lookup_symbol.
If the pdr is for a static function and if a global function with
the same name exists, lookup_symbol will eventually read in the symtab
FDR *save_cur_fdr = cur_fdr;
s = lookup_symbol (sh_name, NULL, VAR_NAMESPACE, 0, NULL);
cur_fdr = save_cur_fdr;
+#else
+ s = mylookup_symbol
+ (sh_name,
+ BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
+ VAR_NAMESPACE,
+ LOC_BLOCK);
+#endif
}
else
s = mylookup_symbol (sh_name, top_stack->cur_block,
first_off = pr.adr;
first_pdr = 0;
}
- parse_procedure (&pr, 1, first_off);
+ parse_procedure (&pr, st, first_off);
}
}
else
if (SYMBOL_NAME (sym)[0] == inc
&& SYMBOL_NAMESPACE (sym) == namespace
&& SYMBOL_CLASS (sym) == class
- && STREQ (SYMBOL_NAME (sym), name))
+ && strcmp (SYMBOL_NAME (sym), name) == 0)
return sym;
bot++;
}
e->pdr.fregmask = -1;
e->pdr.fregoffset = -(7 * sizeof (int));
e->pdr.isym = (long) s;
+ e->pdr.adr = sigtramp_address;
current_objfile = st->objfile; /* Keep new_symbol happy */
s = new_symbol (MIPS_EFI_SYMBOL_NAME);