#include "filenames.h"
#include "objfiles.h"
#include "gdb_obstack.h"
-#include "buildsym.h"
+#include "buildsym-legacy.h"
#include "stabsread.h"
#include "complaints.h"
#include "demangle.h"
debug_info = info;
stabsread_new_init ();
- buildsym_new_init ();
free_header_files ();
init_header_files ();
numbers can go back and forth, apparently we can live
with that and do not need to reorder our linetables. */
-static void parse_lines (FDR *, PDR *, struct linetable *, int,
- struct partial_symtab *, CORE_ADDR);
-
static void
parse_lines (FDR *fh, PDR *pr, struct linetable *lt, int maxlines,
- struct partial_symtab *pst, CORE_ADDR lowest_pdr_addr)
+ CORE_ADDR textlow, CORE_ADDR lowest_pdr_addr)
{
unsigned char *base;
int j, k;
halt = base + fh->cbLine;
base += pr->cbLineOffset;
- adr = pst->textlow + pr->adr - lowest_pdr_addr;
+ adr = textlow + pr->adr - lowest_pdr_addr;
l = adr >> 2; /* in words */
for (lineno = pr->lnLow; base < halt;)
/* Determine the start address for this object file from the
file header and relocate it, except for Irix 5.2 zero fh->adr. */
if (fh->cpd)
- {
- textlow = fh->adr;
- if (relocatable || textlow != 0)
- textlow += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
- }
+ textlow = fh->adr;
else
textlow = 0;
pst = start_psymtab_common (objfile,
psymtab_language = prev_language;
PST_PRIVATE (pst)->pst_language = psymtab_language;
- pst->texthigh = pst->textlow;
+ pst->set_text_high (pst->raw_text_low ());
/* For stabs-in-ecoff files, the second symbol must be @stab.
This symbol is emitted by mips-tfile to signal that the
mst_file_text, sh.sc,
objfile);
}
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
procaddr = sh.value;
isym = AUX_GET_ISYM (fh->fBigendian,
/* 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;
+ && (!pst->text_low_valid
+ || procaddr < pst->raw_text_low ()))
+ pst->set_text_low (procaddr);
+ if (high > pst->raw_text_high ())
+ pst->set_text_high (high);
}
}
else if (sh.st == stStatic)
record_minimal_symbol (reader, namestring, sh.value,
mst_file_data, sh.sc,
objfile);
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
break;
default:
record_minimal_symbol (reader, namestring, sh.value,
mst_file_bss, sh.sc,
objfile);
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_BSS (objfile));
break;
}
}
case N_TEXT | N_EXT:
case N_NBTEXT | N_EXT:
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
goto record_it;
case N_DATA | N_EXT:
case N_NBDATA | N_EXT:
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
goto record_it;
case N_BSS:
case N_BSS | N_EXT:
case N_NBBSS | N_EXT:
case N_SETV | N_EXT: /* FIXME, is this in BSS? */
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_BSS (objfile));
goto record_it;
case N_ABS | N_EXT:
continue;
case N_DATA:
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
goto record_it;
case N_UNDF | N_EXT:
switch (p[1])
{
case 'S':
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
-
if (gdbarch_static_transform_name_p (gdbarch))
namestring = gdbarch_static_transform_name
(gdbarch, namestring);
add_psymbol_to_list (namestring, p - namestring, 1,
VAR_DOMAIN, LOC_STATIC,
+ SECT_OFF_DATA (objfile),
&objfile->static_psymbols,
sh.value,
psymtab_language, objfile);
continue;
case 'G':
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
/* The addresses in these entries are reported
to be wrong. See the code that reads 'G's
for symtabs. */
add_psymbol_to_list (namestring, p - namestring, 1,
VAR_DOMAIN, LOC_STATIC,
+ SECT_OFF_DATA (objfile),
&objfile->global_psymbols,
sh.value,
psymtab_language, objfile);
{
add_psymbol_to_list (namestring, p - namestring, 1,
STRUCT_DOMAIN, LOC_TYPEDEF,
+ -1,
&objfile->static_psymbols,
0, psymtab_language, objfile);
if (p[2] == 't')
add_psymbol_to_list (namestring,
p - namestring, 1,
VAR_DOMAIN, LOC_TYPEDEF,
+ -1,
&objfile->static_psymbols,
0, psymtab_language,
objfile);
{
add_psymbol_to_list (namestring, p - namestring, 1,
VAR_DOMAIN, LOC_TYPEDEF,
+ -1,
&objfile->static_psymbols,
0, psymtab_language, objfile);
}
symtabs. */
add_psymbol_to_list (p, q - p, 1,
VAR_DOMAIN, LOC_CONST,
+ -1,
&objfile->static_psymbols,
0, psymtab_language,
objfile);
case 'c':
/* Constant, e.g. from "const" in Pascal. */
add_psymbol_to_list (namestring, p - namestring, 1,
- VAR_DOMAIN, LOC_CONST,
+ VAR_DOMAIN, LOC_CONST, -1,
&objfile->static_psymbols,
0, psymtab_language, objfile);
continue;
function_outside_compilation_unit_complaint (name);
xfree (name);
}
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
add_psymbol_to_list (namestring, p - namestring, 1,
VAR_DOMAIN, LOC_BLOCK,
+ SECT_OFF_TEXT (objfile),
&objfile->static_psymbols,
sh.value,
psymtab_language, objfile);
function_outside_compilation_unit_complaint (name);
xfree (name);
}
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
add_psymbol_to_list (namestring, p - namestring, 1,
VAR_DOMAIN, LOC_BLOCK,
+ SECT_OFF_TEXT (objfile),
&objfile->global_psymbols,
sh.value,
psymtab_language, objfile);
case N_ENDM:
/* Solaris 2 end of module, finish current partial
- symbol table. dbx_end_psymtab will set
- pst->texthigh to the proper value, which is
- necessary if a module compiled without
+ symbol table. dbx_end_psymtab will set the
+ high text address of PST to the proper value,
+ which is necessary if a module compiled without
debugging info follows this module. */
if (pst
&& gdbarch_sofun_address_maybe_missing (gdbarch))
continue;
case N_RBRAC:
- if (sh.value > save_pst->texthigh)
- save_pst->texthigh = sh.value;
+ if (sh.value > save_pst->raw_text_high ())
+ save_pst->set_text_high (sh.value);
continue;
case N_EINCL:
case N_DSLINE:
char *name;
enum address_class theclass;
CORE_ADDR minsym_value;
+ short section = -1;
(*swap_sym_in) (cur_bfd,
((char *) debug_info->external_sym
/* The value of a stEnd symbol is the displacement from the
corresponding start symbol value, do not relocate it. */
if (sh.st != stEnd)
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
+ section = SECT_OFF_TEXT (objfile);
break;
case scData:
case scSData:
case scRData:
case scPData:
case scXData:
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
+ section = SECT_OFF_DATA (objfile);
break;
case scBss:
case scSBss:
- sh.value += ANOFFSET (objfile->section_offsets,
- SECT_OFF_BSS (objfile));
+ section = SECT_OFF_BSS (objfile);
break;
}
if (sh.st == stProc)
add_psymbol_to_list (name, strlen (name), 1,
VAR_DOMAIN, LOC_BLOCK,
+ section,
&objfile->global_psymbols,
sh.value, psymtab_language, objfile);
else
add_psymbol_to_list (name, strlen (name), 1,
VAR_DOMAIN, LOC_BLOCK,
+ section,
&objfile->static_psymbols,
sh.value, psymtab_language, objfile);
/* Kludge for Irix 5.2 zero fh->adr. */
if (!relocatable
- && (pst->textlow == 0 || procaddr < pst->textlow))
- pst->textlow = procaddr;
+ && (!pst->text_low_valid
+ || procaddr < pst->raw_text_low ()))
+ pst->set_text_low (procaddr);
high = procaddr + sh.value;
- if (high > pst->texthigh)
- pst->texthigh = high;
+ if (high > pst->raw_text_high ())
+ pst->set_text_high (high);
continue;
case stStatic: /* Variable */
&& sh.index != cur_sdx + 2)
{
add_psymbol_to_list (name, strlen (name), 1,
- STRUCT_DOMAIN, LOC_TYPEDEF,
+ STRUCT_DOMAIN, LOC_TYPEDEF, -1,
&objfile->static_psymbols,
0, psymtab_language, objfile);
}
}
/* Use this gdb symbol. */
add_psymbol_to_list (name, strlen (name), 1,
- VAR_DOMAIN, theclass,
+ VAR_DOMAIN, theclass, section,
&objfile->static_psymbols,
sh.value, psymtab_language, objfile);
skip:
SYMR *psh;
char *name;
CORE_ADDR svalue;
+ short section;
if (ext_ptr->ifd != f_idx)
internal_error (__FILE__, __LINE__,
svalue = psh->value;
switch (psh->sc)
{
+ default:
case scText:
case scRConst:
- svalue += ANOFFSET (objfile->section_offsets,
- SECT_OFF_TEXT (objfile));
+ section = SECT_OFF_TEXT (objfile);
break;
case scData:
case scSData:
case scRData:
case scPData:
case scXData:
- svalue += ANOFFSET (objfile->section_offsets,
- SECT_OFF_DATA (objfile));
+ section = SECT_OFF_DATA (objfile);
break;
case scBss:
case scSBss:
- svalue += ANOFFSET (objfile->section_offsets,
- SECT_OFF_BSS (objfile));
+ section = SECT_OFF_BSS (objfile);
break;
}
name = debug_info->ssext + psh->iss;
add_psymbol_to_list (name, strlen (name), 1,
VAR_DOMAIN, theclass,
+ section,
&objfile->global_psymbols,
svalue, psymtab_language, objfile);
}
fdr_to_pst[f_idx].pst
= dbx_end_psymtab (objfile, save_pst,
psymtab_include_list, includes_used,
- -1, save_pst->texthigh,
+ -1, save_pst->raw_text_high (),
dependency_list, dependencies_used,
textlow_not_set);
includes_used = 0;
other cases. */
save_pst = fdr_to_pst[f_idx].pst;
if (save_pst != NULL
- && save_pst->textlow != 0
+ && save_pst->text_low_valid
&& !(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)
+ && save_pst->raw_text_low () >= pst->raw_text_low ()
+ && save_pst->raw_text_low () < pst->raw_text_high ()
+ && save_pst->raw_text_high () > pst->raw_text_high ())
{
objfile->flags |= OBJF_REORDERED;
break;
/* Note that the value doesn't matter for enum constants
in psymtabs, just in symtabs. */
add_psymbol_to_list (name, strlen (name), 1,
- VAR_DOMAIN, LOC_CONST,
- &objfile->static_psymbols,
- 0, psymtab_language, objfile);
+ VAR_DOMAIN, LOC_CONST, -1,
+ &objfile->static_psymbols, 0,
+ psymtab_language, objfile);
ext_sym += external_sym_size;
}
}
/* 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)
+ && !pst->text_low_valid && !pst->text_high_valid)
return;
/* Now read the symbols for this symtab. */
SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void;
SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
e->pdr.framereg = -1;
- add_symbol_to_list (s, &local_symbols);
+ add_symbol_to_list (s, get_local_symbols ());
}
}
else if (sh.st == stLabel)
/* Handle encoded stab line number. */
valu += ANOFFSET (section_offsets,
SECT_OFF_TEXT (objfile));
- record_line (current_subfile, sh.index,
+ record_line (get_current_subfile (), sh.index,
gdbarch_addr_bits_remove (gdbarch, valu));
}
}
if (! last_symtab_ended)
{
- cust = end_symtab (pst->texthigh, SECT_OFF_TEXT (objfile));
+ cust = end_symtab (pst->raw_text_high (), SECT_OFF_TEXT (objfile));
end_stabs ();
}
top_stack->cur_st = COMPUNIT_FILETABS (cust);
top_stack->cur_block
= BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), STATIC_BLOCK);
- BLOCK_START (top_stack->cur_block) = pst->textlow;
+ BLOCK_START (top_stack->cur_block) = pst->text_low (objfile);
BLOCK_END (top_stack->cur_block) = 0;
top_stack->blocktype = stFile;
top_stack->cur_type = 0;
}
parse_lines (fh, pr_block.data (), lines, maxlines,
- pst, lowest_pdr_addr);
+ pst->text_low (objfile), lowest_pdr_addr);
if (lines->nitems < fh->cline)
lines = shrink_linetable (lines);