+Thu Apr 2 19:38:31 1992 Stu Grossman (grossman at cygnus.com)
+
+ * mipsread.c (fixup_sigtramp): Also look for _sigtramp as a real
+ routine (for Irix-4.x). Make many funcs static and void.
+ * mips-tdep.c (mips-frame-chain): Clean up, simplify.
+ * (init_extra_frame_info): Don't trash cached value of frame
+ pointer register. This fixes backtracing through routines that use
+ alloca(). Generally clean up declarations of functions, and use
+ typedefs and macros to reference data structures as appropriate.
+ * tm-irix3.h, tm-mips.h (EXTRA_FRAME_INFO): use proper type for
+ proc_desc element.
+
Thu Apr 2 09:47:11 1992 Fred Fish (fnf@cygnus.com)
* values.c (unpack_long): Fix unpacking error for signed chars
CORE_ADDR sigtramp_address, sigtramp_end;
-void
+static void
mipscoff_new_init (ignore)
struct objfile *ignore;
{
}
-void
+static void
mipscoff_symfile_init (objfile)
struct objfile *objfile;
{
objfile -> sym_private = NULL;
}
-void
+static void
mipscoff_symfile_read (objfile, addr, mainline)
struct objfile *objfile;
CORE_ADDR addr;
/* Enter a new lexical context */
-static push_parse_stack()
+static void
+push_parse_stack()
{
struct parse_stack *new;
/* Exit a lexical context */
-static pop_parse_stack()
+static void
+pop_parse_stack()
{
if (!top_stack)
return;
/* Check whether we already saw symbol SH in file FH as undefined */
-static
-struct mips_pending *is_pending_symbol(fh, sh)
+static struct mips_pending *
+is_pending_symbol(fh, sh)
FDR *fh;
SYMR *sh;
{
/* Add a new undef symbol SH of type T */
-static
+static void
add_pending(fh, sh, t)
FDR *fh;
SYMR *sh;
/* Throw away undef entries when done with file index F_IDX */
/* FIXME -- storage leak. This is never called!!! --gnu */
-static
+static void
free_pending(f_idx)
{
register struct mips_pending *p, *q;
pending_list[f_idx] = 0;
}
-char*
+static char *
prepend_tag_kind(tag_name, type_code)
char *tag_name;
int type_code;
add_block(b, top_stack->cur_st);
}
- s = mylookup_symbol(".gdbinfo.", b, LABEL_NAMESPACE, LOC_CONST);
+ i = mylookup_symbol(".gdbinfo.", b, LABEL_NAMESPACE, LOC_CONST);
- if (s)
+ if (i)
{
- e = (struct mips_extra_func_info *)SYMBOL_VALUE(s);
+ e = (struct mips_extra_func_info *)SYMBOL_VALUE(i);
e->pdr = *pr;
e->pdr.isym = (long)s;
}
This routine clobbers top_stack->cur_block and ->cur_st. */
-static
+static void
parse_external(es, skip_procedures, bigend)
EXTR *es;
int skip_procedures;
numbers can go back and forth, apparently we can live
with that and do not need to reorder our linetables */
-static
+static void
parse_lines(fh, lt)
FDR *fh;
struct linetable *lt;
/* Allocate a new symtab for NAME. Needs an estimate of how many symbols
MAXSYMS and linenumbers MAXLINES we'll put in it */
-static
-struct symtab *
+static struct symtab *
new_symtab(name, maxsyms, maxlines, objfile)
char *name;
int maxsyms;
/* Allocate and zero a new blockvector of NBLOCKS blocks. */
-static
-struct blockvector *
+static struct blockvector *
new_bvect(nblocks)
int nblocks;
{
/* Allocate and zero a new block of MAXSYMS symbols */
-static
-struct block *
+static struct block *
new_block(maxsyms)
int maxsyms;
{
/* Create a new symbol with printname NAME */
-static
-struct symbol *
+static struct symbol *
new_symbol(name)
char *name;
{
/* Create a new type with printname NAME */
-static
-struct type *
+static struct type *
new_type(name)
char *name;
{
/* Most programs do not play with signals */
if (s == 0)
- return;
-
- b0 = SYMBOL_BLOCK_VALUE(s);
+ s = lookup_symbol("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
+ else
+ {
+ b0 = SYMBOL_BLOCK_VALUE(s);
- /* A label of sigvec, to be more precise */
- s = lookup_symbol("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
+ /* A label of sigvec, to be more precise */
+ s = lookup_symbol("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
+ }
/* But maybe this program uses its own version of sigvec */
if (s == 0)
return;
- sigtramp_address = SYMBOL_VALUE(s);
- sigtramp_end = sigtramp_address + 0x88; /* black magic */
-
/* Did we or MIPSco fix the library ? */
if (SYMBOL_CLASS(s) == LOC_BLOCK)
- return;
+ {
+ sigtramp_address = BLOCK_START(SYMBOL_BLOCK_VALUE(s));
+ sigtramp_end = BLOCK_END(SYMBOL_BLOCK_VALUE(s));
+ return;
+ }
+
+ sigtramp_address = SYMBOL_VALUE(s);
+ sigtramp_end = sigtramp_address + 0x88; /* black magic */
/* But what symtab does it live in ? */
st = find_pc_symtab(SYMBOL_VALUE(s));
};
+void
_initialize_mipsread ()
{
add_symtab_fns (&ecoff_sym_fns);