* mdebugread.c (parse_symbol): Don't call ecoff_swap_tir_in or

ecoff_swap_rndx_in directly; use the debug_swap pointer instead.
	(upgrade_type, handle_psymbol_enumerators): Likewise.
	(has_opaque_xref, cross_ref): Likewise.
	(elfmdebug_build_psymtabs): Call swap->read_debug_info to read
	debugging information, rather than doing it here.
	* mipsread.c (mipscoff_symfile_read): Call read_debug_info entry
	point in ecoff_debug_swap backend structure, rather than calling
	ecoff_slurp_symbolic_info directly.
This commit is contained in:
Ian Lance Taylor 1994-06-20 18:27:29 +00:00
parent aac6b32f31
commit 6187dfac46
2 changed files with 32 additions and 67 deletions

View file

@ -1,3 +1,15 @@
Mon Jun 20 13:51:55 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
* mdebugread.c (parse_symbol): Don't call ecoff_swap_tir_in or
ecoff_swap_rndx_in directly; use the debug_swap pointer instead.
(upgrade_type, handle_psymbol_enumerators): Likewise.
(has_opaque_xref, cross_ref): Likewise.
(elfmdebug_build_psymtabs): Call swap->read_debug_info to read
debugging information, rather than doing it here.
* mipsread.c (mipscoff_symfile_read): Call read_debug_info entry
point in ecoff_debug_swap backend structure, rather than calling
ecoff_slurp_symbolic_info directly.
Fri Jun 17 20:58:58 1994 Jim Kingdon (kingdon@lioth.cygnus.com) Fri Jun 17 20:58:58 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
* breakpoint.c: Include annotate.h. Call annotate_field rather * breakpoint.c: Include annotate.h. Call annotate_field rather

View file

@ -923,9 +923,9 @@ parse_symbol (sh, ax, ext_sh, bigend, section_offsets)
type_code = TYPE_CODE_ENUM; type_code = TYPE_CODE_ENUM;
else else
{ {
ecoff_swap_tir_in (bigend, (*debug_swap->swap_tir_in) (bigend,
&ax[tsym.index].a_ti, &ax[tsym.index].a_ti,
&tir); &tir);
if ((tir.bt == btNil || tir.bt == btVoid) if ((tir.bt == btNil || tir.bt == btVoid)
&& tir.tq0 == tqNil) && tir.tq0 == tqNil)
type_code = TYPE_CODE_ENUM; type_code = TYPE_CODE_ENUM;
@ -1396,7 +1396,7 @@ parse_type (fd, ax, aux_index, bs, bigend, sym_name)
ax += aux_index; ax += aux_index;
/* Use aux as a type information record, map its basic type. */ /* Use aux as a type information record, map its basic type. */
ecoff_swap_tir_in (bigend, &ax->a_ti, t); (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
if (t->bt >= (sizeof (map_bt) / sizeof (*map_bt))) if (t->bt >= (sizeof (map_bt) / sizeof (*map_bt)))
{ {
complain (&basic_type_complaint, t->bt, sym_name); complain (&basic_type_complaint, t->bt, sym_name);
@ -1609,7 +1609,7 @@ parse_type (fd, ax, aux_index, bs, bigend, sym_name)
if (!t->continued) if (!t->continued)
break; break;
ecoff_swap_tir_in (bigend, &ax->a_ti, t); (*debug_swap->swap_tir_in) (bigend, &ax->a_ti, t);
ax++; ax++;
} }
@ -1663,7 +1663,7 @@ upgrade_type (fd, tpp, tq, ax, bigend, sym_name)
off = 0; off = 0;
/* Determine and record the domain type (type of index) */ /* Determine and record the domain type (type of index) */
ecoff_swap_rndx_in (bigend, &ax->a_rndx, &rndx); (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, &rndx);
id = rndx.index; id = rndx.index;
rf = rndx.rfd; rf = rndx.rfd;
if (rf == 0xfff) if (rf == 0xfff)
@ -2872,10 +2872,10 @@ handle_psymbol_enumerators (objfile, fh, stype)
if (sh.index == indexNil) if (sh.index == indexNil)
break; break;
ecoff_swap_tir_in (fh->fBigendian, (*debug_swap->swap_tir_in) (fh->fBigendian,
&(debug_info->external_aux &(debug_info->external_aux
+ fh->iauxBase + sh.index)->a_ti, + fh->iauxBase + sh.index)->a_ti,
&tir); &tir);
if ((tir.bt != btNil && tir.bt != btVoid) || tir.tq0 != tqNil) if ((tir.bt != btNil && tir.bt != btVoid) || tir.tq0 != tqNil)
return; return;
break; break;
@ -3289,12 +3289,12 @@ has_opaque_xref (fh, sh)
return 0; return 0;
ax = debug_info->external_aux + fh->iauxBase + sh->index; ax = debug_info->external_aux + fh->iauxBase + sh->index;
ecoff_swap_tir_in (fh->fBigendian, &ax->a_ti, &tir); (*debug_swap->swap_tir_in) (fh->fBigendian, &ax->a_ti, &tir);
if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum) if (tir.bt != btStruct && tir.bt != btUnion && tir.bt != btEnum)
return 0; return 0;
ax++; ax++;
ecoff_swap_rndx_in (fh->fBigendian, &ax->a_rndx, rn); (*debug_swap->swap_rndx_in) (fh->fBigendian, &ax->a_rndx, rn);
if (rn->rfd == 0xfff) if (rn->rfd == 0xfff)
rf = AUX_GET_ISYM (fh->fBigendian, ax + 1); rf = AUX_GET_ISYM (fh->fBigendian, ax + 1);
else else
@ -3330,7 +3330,7 @@ cross_ref (fd, ax, tpp, type_code, pname, bigend, sym_name)
*tpp = (struct type *)NULL; *tpp = (struct type *)NULL;
ecoff_swap_rndx_in (bigend, &ax->a_rndx, rn); (*debug_swap->swap_rndx_in) (bigend, &ax->a_rndx, rn);
/* Escape index means 'the next one' */ /* Escape index means 'the next one' */
if (rn->rfd == 0xfff) if (rn->rfd == 0xfff)
@ -3428,10 +3428,10 @@ cross_ref (fd, ax, tpp, type_code, pname, bigend, sym_name)
The forward references are not entered in the pending list and The forward references are not entered in the pending list and
in the symbol table. */ in the symbol table. */
ecoff_swap_tir_in (bigend, (*debug_swap->swap_tir_in) (bigend,
&(debug_info->external_aux &(debug_info->external_aux
+ fh->iauxBase + sh.index)->a_ti, + fh->iauxBase + sh.index)->a_ti,
&tir); &tir);
if (tir.tq0 != tqNil) if (tir.tq0 != tqNil)
complain (&illegal_forward_tq0_complaint, sym_name); complain (&illegal_forward_tq0_complaint, sym_name);
switch (tir.bt) switch (tir.bt)
@ -3884,62 +3884,15 @@ elfmdebug_build_psymtabs (objfile, swap, sec, section_offsets)
struct section_offsets *section_offsets; struct section_offsets *section_offsets;
{ {
bfd *abfd = objfile->obfd; bfd *abfd = objfile->obfd;
char *buf;
struct ecoff_debug_info *info; struct ecoff_debug_info *info;
buf = alloca (swap->external_hdr_size);
if (!bfd_get_section_contents (abfd, sec, buf, (file_ptr) 0,
swap->external_hdr_size))
perror_with_name (bfd_get_filename (abfd));
info = ((struct ecoff_debug_info *) info = ((struct ecoff_debug_info *)
obstack_alloc (&objfile->psymbol_obstack, obstack_alloc (&objfile->psymbol_obstack,
sizeof (struct ecoff_debug_info))); sizeof (struct ecoff_debug_info)));
(*swap->swap_hdr_in) (abfd, buf, &info->symbolic_header); if (!(*swap->read_debug_info) (abfd, sec, info))
error ("Error reading ECOFF debugging information: %s",
/* The offsets in symbolic_header are file offsets, not section bfd_errmsg (bfd_get_error ()));
offsets. Strangely, on Irix 5 the information is not entirely
within the .mdebug section. There are parts of an executable
file which are not within any ELF section at all. This means
that we must read the information using bfd_read. */
#define READ(ptr, count, off, size, type) \
do \
{ \
if (info->symbolic_header.count == 0) \
info->ptr = (type) NULL; \
else \
{ \
info->ptr = ((type) \
obstack_alloc (&objfile->psymbol_obstack, \
(info->symbolic_header.count \
* size))); \
if (bfd_seek (abfd, info->symbolic_header.off, SEEK_SET) < 0 \
|| (bfd_read ((PTR) info->ptr, size, \
info->symbolic_header.count, abfd) \
!= info->symbolic_header.count * size)) \
perror_with_name (bfd_get_filename (abfd)); \
} \
} \
while (0)
READ (line, cbLine, cbLineOffset, sizeof (unsigned char), unsigned char *);
READ (external_dnr, idnMax, cbDnOffset, swap->external_dnr_size, PTR);
READ (external_pdr, ipdMax, cbPdOffset, swap->external_pdr_size, PTR);
READ (external_sym, isymMax, cbSymOffset, swap->external_sym_size, PTR);
READ (external_opt, ioptMax, cbOptOffset, swap->external_opt_size, PTR);
READ (external_aux, iauxMax, cbAuxOffset, sizeof (union aux_ext),
union aux_ext *);
READ (ss, issMax, cbSsOffset, sizeof (char), char *);
READ (ssext, issExtMax, cbSsExtOffset, sizeof (char), char *);
READ (external_fdr, ifdMax, cbFdOffset, swap->external_fdr_size, PTR);
READ (external_rfd, crfd, cbRfdOffset, swap->external_rfd_size, PTR);
READ (external_ext, iextMax, cbExtOffset, swap->external_ext_size, PTR);
#undef READ
info->fdr = NULL;
mdebug_build_psymtabs (objfile, swap, info, section_offsets); mdebug_build_psymtabs (objfile, swap, info, section_offsets);
} }