Isolate STABS readers' use of the textlow' and texthigh' fields

of `struct partial_symtab' to only a few locations.  This change
is not supposed to affect the way the values are computed, only
where they live.

* dbxread.c (struct symloc): Add `textlow' and `texthigh' fields
to the reader-specific structure.
* mdebugread.c (struct symloc): Same.
* dbxread.c (TEXTLOW, TEXTHIGH): New accessor macros.
* mdebugread.c (TEXTLOW, TEXTHIGH): Same.
* dbxread.c (dbx_symfile_read): After we've built all our partial
symbol tables, set each partial symtab's `textlow' and `texthigh'
fields from our reader-specific structure.
* mdebugread.c (mdebug_build_psymtabs): Same.
* dbxread.c (start_psymtab): Initialize the reader-specific
structure's `textlow' and `texthigh' from the new psymtab's.
* mdebugread.c (parse_partial_symbols, new_psymtab): Same.
* dbxread.c (read_dbx_symtab, end_psymtab, read_ofile_symtab): Use
the reader-specific `textlow' and `texthigh', not the generic
psymtab fields.
* mdebugread.c (parse_lines, parse_partial_symbols,
psymtab_to_symtab_1): Same.
* partial-stab.h: Same.
This commit is contained in:
Jim Blandy
2001-10-24 17:10:18 +00:00
parent 908d94bfcd
commit 3973eaddf4
5 changed files with 124 additions and 51 deletions

View File

@ -105,6 +105,11 @@ extern void _initialize_mdebugread (void);
struct symloc
{
/* Our running best guess as to the range of text addresses for
this psymtab. After we've read everything in, we use this to
build pst->text_addrs. */
CORE_ADDR textlow, texthigh;
/* Index of the FDR that this psymtab represents. */
int fdr_idx;
/* The BFD that the psymtab was created from. */
@ -120,6 +125,8 @@ struct symloc
};
#define PST_PRIVATE(p) ((struct symloc *)(p)->read_symtab_private)
#define TEXTLOW(p) (PST_PRIVATE(p)->textlow)
#define TEXTHIGH(p) (PST_PRIVATE(p)->texthigh)
#define FDR_IDX(p) (PST_PRIVATE(p)->fdr_idx)
#define CUR_BFD(p) (PST_PRIVATE(p)->cur_bfd)
#define DEBUG_SWAP(p) (PST_PRIVATE(p)->debug_swap)
@ -516,6 +523,19 @@ mdebug_build_psymtabs (struct objfile *objfile,
parse_partial_symbols (objfile);
/* Take the text ranges the partial symbol scanner computed for each
of the psymtabs and convert it into the canonical form for
psymtabs. */
{
struct partial_symtab *p;
ALL_OBJFILE_PSYMTABS (objfile, p)
{
p->textlow = TEXTLOW (p);
p->texthigh = TEXTHIGH (p);
}
}
#if 0
/* Check to make sure file was compiled with -g. If not, warn the
user of this limitation. */
@ -2174,7 +2194,7 @@ parse_lines (FDR *fh, PDR *pr, struct linetable *lt, int maxlines,
halt = base + fh->cbLine;
base += pr->cbLineOffset;
adr = pst->textlow + pr->adr - lowest_pdr_addr;
adr = TEXTLOW (pst) + pr->adr - lowest_pdr_addr;
l = adr >> 2; /* in words */
for (lineno = pr->lnLow; base < halt;)
@ -2509,6 +2529,8 @@ parse_partial_symbols (struct objfile *objfile)
memset ((PTR) pst->read_symtab_private, 0, sizeof (struct symloc));
save_pst = pst;
TEXTLOW (pst) = pst->textlow;
TEXTHIGH (pst) = pst->texthigh;
FDR_IDX (pst) = f_idx;
CUR_BFD (pst) = cur_bfd;
DEBUG_SWAP (pst) = debug_swap;
@ -2544,7 +2566,7 @@ parse_partial_symbols (struct objfile *objfile)
psymtab_language = prev_language;
PST_PRIVATE (pst)->pst_language = psymtab_language;
pst->texthigh = pst->textlow;
TEXTHIGH (pst) = TEXTLOW (pst);
/* For stabs-in-ecoff files, the second symbol must be @stab.
This symbol is emitted by mips-tfile to signal that the
@ -2611,10 +2633,10 @@ parse_partial_symbols (struct objfile *objfile)
/* Kludge for Irix 5.2 zero fh->adr. */
if (!relocatable
&& (pst->textlow == 0 || procaddr < pst->textlow))
pst->textlow = procaddr;
if (high > pst->texthigh)
pst->texthigh = high;
&& (TEXTLOW (pst) == 0 || procaddr < TEXTLOW (pst)))
TEXTLOW (pst) = procaddr;
if (high > TEXTHIGH (pst))
TEXTHIGH (pst) = high;
}
}
else if (sh.st == stStatic)
@ -2703,7 +2725,7 @@ parse_partial_symbols (struct objfile *objfile)
(pst = save_pst)
#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set) (void)0
#define HANDLE_RBRAC(val) \
if ((val) > save_pst->texthigh) save_pst->texthigh = (val);
if ((val) > TEXTHIGH (save_pst)) TEXTHIGH (save_pst) = (val);
#include "partial-stab.h"
if (stabstring
@ -2836,12 +2858,12 @@ parse_partial_symbols (struct objfile *objfile)
/* Kludge for Irix 5.2 zero fh->adr. */
if (!relocatable
&& (pst->textlow == 0 || procaddr < pst->textlow))
pst->textlow = procaddr;
&& (TEXTLOW (pst) == 0 || procaddr < TEXTLOW (pst)))
TEXTLOW (pst) = procaddr;
high = procaddr + sh.value;
if (high > pst->texthigh)
pst->texthigh = high;
if (high > TEXTHIGH (pst))
TEXTHIGH (pst) = high;
continue;
case stStatic: /* Variable */
@ -3015,16 +3037,16 @@ parse_partial_symbols (struct objfile *objfile)
empty and put on the free list. */
fdr_to_pst[f_idx].pst = end_psymtab (save_pst,
psymtab_include_list, includes_used,
-1, save_pst->texthigh,
-1, TEXTHIGH (save_pst),
dependency_list, dependencies_used, textlow_not_set);
includes_used = 0;
dependencies_used = 0;
if (objfile->ei.entry_point >= save_pst->textlow &&
objfile->ei.entry_point < save_pst->texthigh)
if (objfile->ei.entry_point >= TEXTLOW (save_pst) &&
objfile->ei.entry_point < TEXTHIGH (save_pst))
{
objfile->ei.entry_file_lowpc = save_pst->textlow;
objfile->ei.entry_file_highpc = save_pst->texthigh;
objfile->ei.entry_file_lowpc = TEXTLOW (save_pst);
objfile->ei.entry_file_highpc = TEXTHIGH (save_pst);
}
/* The objfile has its functions reordered if this partial symbol
@ -3040,15 +3062,15 @@ parse_partial_symbols (struct objfile *objfile)
other cases. */
save_pst = fdr_to_pst[f_idx].pst;
if (save_pst != NULL
&& save_pst->textlow != 0
&& TEXTLOW (save_pst) != 0
&& !(objfile->flags & OBJF_REORDERED))
{
ALL_OBJFILE_PSYMTABS (objfile, pst)
{
if (save_pst != pst
&& save_pst->textlow >= pst->textlow
&& save_pst->textlow < pst->texthigh
&& save_pst->texthigh > pst->texthigh)
&& TEXTLOW (save_pst) >= TEXTLOW (pst)
&& TEXTLOW (save_pst) < TEXTHIGH (pst)
&& TEXTHIGH (save_pst) > TEXTHIGH (pst))
{
objfile->flags |= OBJF_REORDERED;
break;
@ -3252,7 +3274,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
/* Do nothing if this is a dummy psymtab. */
if (pst->n_global_syms == 0 && pst->n_static_syms == 0
&& pst->textlow == 0 && pst->texthigh == 0)
&& TEXTLOW (pst) == 0 && TEXTHIGH (pst) == 0)
return;
/* Now read the symbols for this symtab */
@ -3400,7 +3422,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
if (! last_symtab_ended)
{
st = end_symtab (pst->texthigh, pst->objfile, SECT_OFF_TEXT (pst->objfile));
st = end_symtab (TEXTHIGH (pst), pst->objfile, SECT_OFF_TEXT (pst->objfile));
end_stabs ();
}
@ -3490,7 +3512,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
top_stack->cur_st = st;
top_stack->cur_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (st),
STATIC_BLOCK);
BLOCK_START (top_stack->cur_block) = pst->textlow;
BLOCK_START (top_stack->cur_block) = TEXTLOW (pst);
BLOCK_END (top_stack->cur_block) = 0;
top_stack->blocktype = stFile;
top_stack->maxsyms = 2 * f_max;