* mdebugread.c (new_psymtab): Pass in section_offsets and set

them in the pst.
	* mdebugread.c (handle_psymbol_enumerators):  New function to enter
	the enumerators of an ecoff enum into the partial symbol table.
	* mdebugread.c (parse_partial_symbols):  Call it.
	* symfile.c (reread_symbols):  Initialize objfile->*_psymbols.next.
	* symmisc.c (dump_psymtab):  Fix typo, clean up output of section
	offsets. Cast psymtab->read_symtab to PTR before passing it to
	gdb_print_address.
	* i386-tdep.c (i386_skip_prologue):  Skip over instructions that
	set up the global offset table pointer in pic compiled code.
	* config/mips/tm-mips.h (FIX_CALL_DUMMY):  For big endian targets,
	error() on TYPE_CODE_FLT arguments whose size is greater than 8,
	swap all other TYPE_CODE_FLT arguments as mips_push_arguments
	ensures that floats are promoted to doubles before they are pushed
	on the stack.
This commit is contained in:
Peter Schauer 1994-02-19 11:24:36 +00:00
parent 9f35e15a65
commit 847d977530
2 changed files with 91 additions and 3 deletions

View file

@ -1,3 +1,22 @@
Sat Feb 19 03:17:32 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* mdebugread.c (new_psymtab): Pass in section_offsets and set
them in the pst.
* mdebugread.c (handle_psymbol_enumerators): New function to enter
the enumerators of an ecoff enum into the partial symbol table.
* mdebugread.c (parse_partial_symbols): Call it.
* symfile.c (reread_symbols): Initialize objfile->*_psymbols.next.
* symmisc.c (dump_psymtab): Fix typo, clean up output of section
offsets. Cast psymtab->read_symtab to PTR before passing it to
gdb_print_address.
* i386-tdep.c (i386_skip_prologue): Skip over instructions that
set up the global offset table pointer in pic compiled code.
* config/mips/tm-mips.h (FIX_CALL_DUMMY): For big endian targets,
error() on TYPE_CODE_FLT arguments whose size is greater than 8,
swap all other TYPE_CODE_FLT arguments as mips_push_arguments
ensures that floats are promoted to doubles before they are pushed
on the stack.
Fri Feb 18 23:12:59 1994 Stu Grossman (grossman at cygnus.com)
* sparclite/Makefile.in, sparclite/salib.c, sparclite/sparclite.h:

View file

@ -337,7 +337,7 @@ static int
compare_blocks PARAMS ((const void *, const void *));
static struct partial_symtab *
new_psymtab PARAMS ((char *, struct objfile *));
new_psymtab PARAMS ((char *, struct objfile *, struct section_offsets *));
static void
psymtab_to_symtab_1 PARAMS ((struct partial_symtab *, char *));
@ -354,6 +354,9 @@ add_line PARAMS ((struct linetable *, int, CORE_ADDR, int));
static struct linetable *
shrink_linetable PARAMS ((struct linetable *));
static void
handle_psymbol_enumerators PARAMS ((struct objfile *, FDR *, int));
static char *
mdebug_next_symbol_text PARAMS ((void));
@ -2060,7 +2063,7 @@ parse_partial_symbols (objfile, section_offsets)
old_chain = make_cleanup (free, fdr_to_pst);
fdr_to_pst++;
{
struct partial_symtab *pst = new_psymtab ("", objfile);
struct partial_symtab *pst = new_psymtab ("", objfile, section_offsets);
fdr_to_pst[-1].pst = pst;
FDR_IDX (pst) = -1;
}
@ -2425,6 +2428,8 @@ parse_partial_symbols (objfile, section_offsets)
sh.value,
psymtab_language, objfile);
}
handle_psymbol_enumerators (objfile, fh, sh.st);
/* Skip over the block */
new_sdx = sh.index;
if (new_sdx <= cur_sdx)
@ -2575,6 +2580,68 @@ parse_partial_symbols (objfile, section_offsets)
do_cleanups (old_chain);
}
/* If the current psymbol has an enumerated type, we need to add
all the the enum constants to the partial symbol table. */
static void
handle_psymbol_enumerators (objfile, fh, stype)
struct objfile *objfile;
FDR *fh;
int stype;
{
const bfd_size_type external_sym_size = debug_swap->external_sym_size;
void (* const swap_sym_in) PARAMS ((bfd *, PTR, SYMR *))
= debug_swap->swap_sym_in;
char *ext_sym = ((char *) debug_info->external_sym
+ ((fh->isymBase + cur_sdx + 1) * external_sym_size));
SYMR sh;
TIR tir;
switch (stype)
{
case stEnum:
break;
case stBlock:
/* It is an enumerated type if the next symbol entry is a stMember
and its auxiliary index is indexNil or its auxiliary entry
is a plain btNil or btVoid. */
(*swap_sym_in) (cur_bfd, ext_sym, &sh);
if (sh.st != stMember)
return;
if (sh.index == indexNil)
break;
ecoff_swap_tir_in (fh->fBigendian,
&(debug_info->external_aux
+ fh->iauxBase + sh.index)->a_ti,
&tir);
if ((tir.bt != btNil && tir.bt != btVoid) || tir.tq0 != tqNil)
return;
break;
default:
return;
}
for (;;)
{
char *name;
(*swap_sym_in) (cur_bfd, ext_sym, &sh);
if (sh.st != stMember)
break;
name = debug_info->ss + cur_fdr->issBase + sh.iss;
/* Note that the value doesn't matter for enum constants
in psymtabs, just in symtabs. */
ADD_PSYMBOL_TO_LIST (name, strlen (name),
VAR_NAMESPACE, LOC_CONST,
objfile->static_psymbols, 0,
psymtab_language, objfile);
ext_sym += external_sym_size;
}
}
static char *
mdebug_next_symbol_text ()
@ -3355,13 +3422,15 @@ new_symtab (name, maxsyms, maxlines, objfile)
/* Allocate a new partial_symtab NAME */
static struct partial_symtab *
new_psymtab (name, objfile)
new_psymtab (name, objfile, section_offsets)
char *name;
struct objfile *objfile;
struct section_offsets *section_offsets;
{
struct partial_symtab *psymtab;
psymtab = allocate_psymtab (name, objfile);
psymtab->section_offsets = section_offsets;
/* Keep a backpointer to the file's symbols */