/* Allocate struct to keep track of the symfile */
objfile->sym_stab_info = (struct dbx_symfile_info *)
- xmmalloc (objfile->md, sizeof (struct dbx_symfile_info));
+ xmalloc (sizeof (struct dbx_symfile_info));
memset (objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
{
bincls_allocated = number;
next_bincl = bincl_list = (struct header_file_location *)
- xmmalloc (objfile->md, bincls_allocated * sizeof (struct header_file_location));
+ xmalloc (bincls_allocated * sizeof (struct header_file_location));
}
/* Add a bincl to the list. */
|| (namestring[(nsl = strlen (namestring)) - 1] == 'o'
&& namestring[nsl - 2] == '.'))
{
- if (objfile->ei.entry_point < nlist.n_value &&
- objfile->ei.entry_point >= last_o_file_start)
- {
- objfile->ei.deprecated_entry_file_lowpc = last_o_file_start;
- objfile->ei.deprecated_entry_file_highpc = nlist.n_value;
- }
if (past_first_source_file && pst
/* The gould NP1 uses low values for .o and -l symbols
which are not the address. */
static int prev_so_symnum = -10;
static int first_so_symnum;
char *p;
+ static char *dirname_nso;
int prev_textlow_not_set;
valu = nlist.n_value + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
p = strrchr (namestring, '/');
if (p && *(p + 1) == '\000')
- continue; /* Simply ignore directory name SOs */
+ {
+ /* Save the directory name SOs locally, then save it into
+ the psymtab when it's created below. */
+ dirname_nso = namestring;
+ continue;
+ }
/* Some other compilers (C++ ones in particular) emit useless
SOs for non-existant .c files. We ignore all subsequent SOs that
immediately follow the first. */
if (!pst)
+ {
pst = start_psymtab (objfile,
namestring, valu,
first_so_symnum * symbol_size,
objfile->global_psymbols.next,
objfile->static_psymbols.next);
+ pst->dirname = dirname_nso;
+ dirname_nso = NULL;
+ }
continue;
}
}
/* If there's stuff to be cleaned up, clean it up. */
- if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
- /*FIXME, does this have a bug at start address 0? */
- && last_o_file_start
- && objfile->ei.entry_point < nlist.n_value
- && objfile->ei.entry_point >= last_o_file_start)
- {
- objfile->ei.deprecated_entry_file_lowpc = last_o_file_start;
- objfile->ei.deprecated_entry_file_highpc = nlist.n_value;
- }
-
if (pst)
{
/* Don't set pst->texthigh lower than it already is. */
struct section_offsets *section_offsets,
struct objfile *objfile)
{
-#ifdef SUN_FIXED_LBRAC_BUG
- /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
- to correct the address of N_LBRAC's. If it is not defined, then
- we never need to correct the addresses. */
-
- /* This records the last pc address we've seen. We depend on there being
- an SLINE or FUN or SO before the first LBRAC, since the variable does
- not get reset in between reads of different symbol files. */
- static CORE_ADDR last_pc_address;
-#endif
-
struct context_stack *new;
/* This remembers the address of the start of a function. It is used
because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
N_SO, the linker did not relocate them (sigh). */
valu += last_source_start_addr;
-#ifdef SUN_FIXED_LBRAC_BUG
- if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address)
- {
- /* Patch current LBRAC pc value to match last handy pc value */
- complaint (&symfile_complaints, "bad block start address patched");
- valu = last_pc_address;
- }
-#endif
new = push_context (desc, valu);
break;
n_opt_found = 0;
-#ifdef SUN_FIXED_LBRAC_BUG
- last_pc_address = valu; /* Save for SunOS bug circumcision */
-#endif
-
-#ifdef PCC_SOL_BROKEN
- /* pcc bug, occasionally puts out SO for SOL. */
- if (context_stack_depth > 0)
- {
- start_subfile (name, NULL);
- break;
- }
-#endif
if (last_source_file)
{
/* Check if previous symbol was also an N_SO (with some
/* Relocate for dynamic loading and for ELF acc fn-relative syms. */
valu += function_start_offset;
-#ifdef SUN_FIXED_LBRAC_BUG
- last_pc_address = valu; /* Save for SunOS bug circumcision */
-#endif
/* If this is the first SLINE note in the function, record it at
the start of the function instead of at the listed location. */
if (within_function && sline_found_in_function == 0)
}
#endif
-#ifdef SUN_FIXED_LBRAC_BUG
- /* The Sun acc compiler, under SunOS4, puts out
- functions with N_GSYM or N_STSYM. The problem is
- that the address of the symbol is no good (for N_GSYM
- it doesn't even attept an address; for N_STSYM it
- puts out an address but then it gets relocated
- relative to the data segment, not the text segment).
- Currently we can't fix this up later as we do for
- some types of symbol in scan_file_globals.
- Fortunately we do have a way of finding the address -
- we know that the value in last_pc_address is either
- the one we want (if we're dealing with the first
- function in an object file), or somewhere in the
- previous function. This means that we can use the
- minimal symbol table to get the address. */
-
- /* Starting with release 3.0, the Sun acc compiler,
- under SunOS4, puts out functions with N_FUN and a value
- of zero. This gets relocated to the start of the text
- segment of the module, which is no good either.
- Under SunOS4 we can deal with this as N_SLINE and N_SO
- entries contain valid absolute addresses.
- Release 3.0 acc also puts out N_OPT entries, which makes
- it possible to discern acc from cc or gcc. */
-
- if (type == N_GSYM || type == N_STSYM
- || (type == N_FUN
- && n_opt_found && !block_address_function_relative))
- {
- struct minimal_symbol *m;
- int l = colon_pos - name;
-
- m = lookup_minimal_symbol_by_pc (last_pc_address);
- if (m && strncmp (DEPRECATED_SYMBOL_NAME (m), name, l) == 0
- && DEPRECATED_SYMBOL_NAME (m)[l] == '\0')
- /* last_pc_address was in this function */
- valu = SYMBOL_VALUE (m);
- else if (m && DEPRECATED_SYMBOL_NAME (m + 1)
- && strncmp (DEPRECATED_SYMBOL_NAME (m + 1), name, l) == 0
- && DEPRECATED_SYMBOL_NAME (m + 1)[l] == '\0')
- /* last_pc_address was in last function */
- valu = SYMBOL_VALUE (m + 1);
- else
- /* Not found - use last_pc_address (for finish_block) */
- valu = last_pc_address;
- }
-
- last_pc_address = valu; /* Save for SunOS bug circumcision */
-#endif
-
if (block_address_function_relative)
/* For Solaris 2.0 compilers, the block addresses and
N_SLINE's are relative to the start of the
}
\f
/* Scan and build partial symbols for an ELF symbol file.
- This ELF file has already been processed to get its minimal symbols,
- and any DWARF symbols that were in it.
+ This ELF file has already been processed to get its minimal symbols.
This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
rolled into one.