Remove special support in gdb for Sun's version of stabs.

Discussion:
https://sourceware.org/ml/gdb-patches/2015-05/msg00169.html

gdb/ChangeLog:

	* NEWS: Mention Sun's version of stabs is no longer supported.
	* elfread.c (free_elfinfo): Delete.  All uses updated.
	(elfstab_offset_sections): Delete.  All uses updated.
	* gdb-stabs.h (stab_section_info): Delete.  All uses updated.
	* psympriv.h (partial_symtab) <section_offsets>: Delete.
	All uses updated.
	* psymtab.c (start_psymtab_common): Delete arg section_offsets.
	All callers updated.

gdb/doc/ChangeLog:

	* stabs.texinfo (ELF Linker Relocation): Mention Sun stabs is no
	longer supported.
This commit is contained in:
Doug Evans 2015-06-19 11:34:43 -07:00
parent ef8b8d4ad5
commit 18a94d75a0
13 changed files with 43 additions and 264 deletions

View File

@ -1,3 +1,14 @@
2015-06-19 Doug Evans <dje@google.com>
* NEWS: Mention Sun's version of stabs is no longer supported.
* elfread.c (free_elfinfo): Delete. All uses updated.
(elfstab_offset_sections): Delete. All uses updated.
* gdb-stabs.h (stab_section_info): Delete. All uses updated.
* psympriv.h (partial_symtab) <section_offsets>: Delete.
All uses updated.
* psymtab.c (start_psymtab_common): Delete arg section_offsets.
All callers updated.
2015-06-18 Simon Marchi <simon.marchi@ericsson.com>
* common/rsp-low.c (needs_escaping): New.

View File

@ -7,6 +7,8 @@
targets has been added. GDB now supports recording of A64 instruction set
including advance SIMD instructions.
* Support for Sun's version of the "stabs" debug file format has been removed.
* GDB now honors the content of the file /proc/PID/coredump_filter
(PID is the process ID) on GNU/Linux systems. This file can be used
to specify the types of memory mappings that will be included in a

View File

@ -631,8 +631,6 @@ dbx_symfile_init (struct objfile *objfile)
/* FIXME POKING INSIDE BFD DATA STRUCTURES. */
DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
text_sect = bfd_get_section_by_name (sym_bfd, ".text");
if (!text_sect)
error (_("Can't find .text section in symbol file"));
@ -2174,8 +2172,8 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
struct partial_symbol **static_syms)
{
struct partial_symtab *result =
start_psymtab_common (objfile, objfile->section_offsets,
filename, textlow, global_syms, static_syms);
start_psymtab_common (objfile, filename, textlow,
global_syms, static_syms);
result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
sizeof (struct symloc));
@ -2186,14 +2184,6 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
STRING_OFFSET (result) = string_table_offset;
FILE_STRING_OFFSET (result) = file_string_table_offset;
#ifdef HAVE_ELF
/* If we're handling an ELF file, drag some section-relocation info
for this source file out of the ELF symbol table, to compensate for
Sun brain death. This replaces the section_offsets in this psymtab,
if successful. */
elfstab_offset_sections (objfile, result);
#endif
/* Deduce the source language from the filename for this psymtab. */
psymtab_language = deduce_language_from_filename (filename);
@ -2321,8 +2311,6 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
struct partial_symtab *subpst =
allocate_psymtab (include_list[i], objfile);
/* Copy the sesction_offsets array from the main psymtab. */
subpst->section_offsets = pst->section_offsets;
subpst->read_symtab_private =
obstack_alloc (&objfile->objfile_obstack, sizeof (struct symloc));
LDSYMOFF (subpst) =
@ -2503,11 +2491,7 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
sym_size = LDSYMLEN (pst);
text_offset = pst->textlow;
text_size = pst->texthigh - pst->textlow;
/* This cannot be simply objfile->section_offsets because of
elfstab_offset_sections() which initializes the psymtab section
offsets information in a special way, and that is different from
objfile->section_offsets. */
section_offsets = pst->section_offsets;
section_offsets = objfile->section_offsets;
dbxread_objfile = objfile;
@ -3042,17 +3026,12 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
p = strchr (name, ':');
if (p != 0 && p[1] == 'S')
{
/* The linker relocated it. We don't want to add an
elfstab_offset_sections-type offset, but we *do*
/* The linker relocated it. We don't want to add a
Sun-stabs Tfoo.foo-like offset, but we *do*
want to add whatever solib.c passed to
symbol_file_add as addr (this is known to affect
SunOS 4, and I suspect ELF too). Since
elfstab_offset_sections currently does not muck
with the text offset (there is no Ttext.text
symbol), we can get addr from the text offset. If
elfstab_offset_sections ever starts dealing with
the text offset, and we still need to do this, we
need to invent a SECT_OFF_ADDR_KLUDGE or something. */
SunOS 4, and I suspect ELF too). Since there is no
Ttext.text symbol, we can get addr from the text offset. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
goto define_a_symbol;
}

View File

@ -1,3 +1,8 @@
2015-06-19 Doug Evans <dje@google.com>
* stabs.texinfo (ELF Linker Relocation): Mention Sun stabs is no
longer supported.
2015-06-17 Patrick Palka <patrick@parcs.ath.cx>
* gdb.texinfo (Command History): Mention that setting

View File

@ -4062,7 +4062,8 @@ the @code{.stabstr} section.
@appendixsec Having the Linker Relocate Stabs in ELF
This section describes some Sun hacks for Stabs in ELF; it does not
apply to COFF or SOM.
apply to COFF or SOM. While @value{GDBN} no longer supports this hack
for Sun Stabs in ELF, this section is kept to document the issue.
To keep linking fast, you don't want the linker to have to relocate very
many stabs. Making sure this is done for @code{N_SLINE},
@ -4100,8 +4101,8 @@ the address from the ELF symbols.
Finding the correct @code{Bbss.bss}, etc., symbol is difficult, because
the linker simply concatenates the @code{.stab} sections from each
@file{.o} file without including any information about which part of a
@code{.stab} section comes from which @file{.o} file. The way GDB does
this is to look for an ELF @code{STT_FILE} symbol which has the same
@code{.stab} section comes from which @file{.o} file. The way GDB use to
do this is to look for an ELF @code{STT_FILE} symbol which has the same
name as the last component of the file name from the @code{N_SO} symbol
in the stabs (for example, if the file name is @file{../../gdb/main.c},
it looks for an ELF @code{STT_FILE} symbol named @code{main.c}). This

View File

@ -4489,7 +4489,6 @@ dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst,
subpst->dirname = pst->dirname;
}
subpst->section_offsets = pst->section_offsets;
subpst->textlow = 0;
subpst->texthigh = 0;
@ -5890,8 +5889,7 @@ create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name)
struct objfile *objfile = per_cu->objfile;
struct partial_symtab *pst;
pst = start_psymtab_common (objfile, objfile->section_offsets,
name, 0,
pst = start_psymtab_common (objfile, name, 0,
objfile->global_psymbols.next,
objfile->static_psymbols.next);

View File

@ -66,8 +66,6 @@ struct elfinfo
static const struct bfd_data *probe_key = NULL;
static void free_elfinfo (void *);
/* Minimal symbols located at the GOT entries for .plt - that is the real
pointer where the given entry will jump to. It gets updated by the real
function address during lazy ld.so resolving in the inferior. These
@ -236,14 +234,8 @@ elf_symtab_read (struct objfile *objfile, int type,
CORE_ADDR symaddr;
CORE_ADDR offset;
enum minimal_symbol_type ms_type;
/* If sectinfo is nonNULL, it contains section info that should end up
filed in the objfile. */
struct stab_section_info *sectinfo = NULL;
/* If filesym is nonzero, it points to a file symbol, but we haven't
seen any section info for it yet. */
asymbol *filesym = 0;
/* Name of filesym. This is either a constant string or is saved on
the objfile's filename cache. */
/* Name of the last file symbol. This is either a constant string or is
saved on the objfile's filename cache. */
const char *filesymname = "";
struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile);
int stripped = (bfd_get_symcount (objfile->obfd) == 0);
@ -345,16 +337,7 @@ elf_symtab_read (struct objfile *objfile, int type,
continue;
if (sym->flags & BSF_FILE)
{
/* STT_FILE debugging symbol that helps stabs-in-elf debugging.
Chain any old one onto the objfile; remember new sym. */
if (sectinfo != NULL)
{
sectinfo->next = dbx->stab_section_info;
dbx->stab_section_info = sectinfo;
sectinfo = NULL;
}
filesym = sym;
filesymname = bcache (filesym->name, strlen (filesym->name) + 1,
filesymname = bcache (sym->name, strlen (sym->name) + 1,
objfile->per_bfd->filename_cache);
}
else if (sym->flags & BSF_SECTION_SYM)
@ -451,77 +434,6 @@ elf_symtab_read (struct objfile *objfile, int type,
}
else if (sym->flags & BSF_LOCAL)
{
/* Named Local variable in a Data section.
Check its name for stabs-in-elf. */
int special_local_sect;
if (strcmp ("Bbss.bss", sym->name) == 0)
special_local_sect = SECT_OFF_BSS (objfile);
else if (strcmp ("Ddata.data", sym->name) == 0)
special_local_sect = SECT_OFF_DATA (objfile);
else if (strcmp ("Drodata.rodata", sym->name) == 0)
special_local_sect = SECT_OFF_RODATA (objfile);
else
special_local_sect = -1;
if (special_local_sect >= 0)
{
/* Found a special local symbol. Allocate a
sectinfo, if needed, and fill it in. */
if (sectinfo == NULL)
{
int max_index;
size_t size;
max_index = SECT_OFF_BSS (objfile);
if (objfile->sect_index_data > max_index)
max_index = objfile->sect_index_data;
if (objfile->sect_index_rodata > max_index)
max_index = objfile->sect_index_rodata;
/* max_index is the largest index we'll
use into this array, so we must
allocate max_index+1 elements for it.
However, 'struct stab_section_info'
already includes one element, so we
need to allocate max_index aadditional
elements. */
size = (sizeof (struct stab_section_info)
+ (sizeof (CORE_ADDR) * max_index));
sectinfo = (struct stab_section_info *)
xmalloc (size);
memset (sectinfo, 0, size);
sectinfo->num_sections = max_index;
if (filesym == NULL)
{
complaint (&symfile_complaints,
_("elf/stab section information %s "
"without a preceding file symbol"),
sym->name);
}
else
{
sectinfo->filename =
(char *) filesym->name;
}
}
if (sectinfo->sections[special_local_sect] != 0)
complaint (&symfile_complaints,
_("duplicated elf/stab section "
"information for %s"),
sectinfo->filename);
/* BFD symbols are section relative. */
symaddr = sym->value + sym->section->vma;
/* Relocate non-absolute symbols by the
section offset. */
if (sym->section != bfd_abs_section_ptr)
symaddr += offset;
sectinfo->sections[special_local_sect] = symaddr;
/* The special local symbols don't go in the
minimal symbol table, so ignore this one. */
continue;
}
/* Not a special stabs-in-elf symbol, do regular
symbol processing. */
if (sym->section->flags & SEC_LOAD)
{
ms_type = mst_file_data;
@ -1130,11 +1042,8 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
/* Allocate struct to keep track of the symfile. */
dbx = XCNEW (struct dbx_symfile_info);
set_objfile_data (objfile, dbx_objfile_data_key, dbx);
make_cleanup (free_elfinfo, (void *) objfile);
/* Process the normal ELF symbol table first. This may write some
chain of info into the dbx_symfile_info of the objfile, which can
later be used by elfstab_offset_sections. */
/* Process the normal ELF symbol table first. */
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
if (storage_needed < 0)
@ -1369,28 +1278,6 @@ read_psyms (struct objfile *objfile)
dwarf2_build_psymtabs (objfile);
}
/* This cleans up the objfile's dbx symfile info, and the chain of
stab_section_info's, that might be dangling from it. */
static void
free_elfinfo (void *objp)
{
struct objfile *objfile = (struct objfile *) objp;
struct dbx_symfile_info *dbxinfo = DBX_SYMFILE_INFO (objfile);
struct stab_section_info *ssi, *nssi;
ssi = dbxinfo->stab_section_info;
while (ssi)
{
nssi = ssi->next;
xfree (ssi);
ssi = nssi;
}
dbxinfo->stab_section_info = 0; /* Just say No mo info about this. */
}
/* Initialize anything that needs initializing when a completely new symbol
file is specified (not just adding some symbols from another file, e.g. a
shared library).
@ -1427,69 +1314,6 @@ elf_symfile_init (struct objfile *objfile)
objfile->flags |= OBJF_REORDERED;
}
/* When handling an ELF file that contains Sun STABS debug info,
some of the debug info is relative to the particular chunk of the
section that was generated in its individual .o file. E.g.
offsets to static variables are relative to the start of the data
segment *for that module before linking*. This information is
painfully squirreled away in the ELF symbol table as local symbols
with wierd names. Go get 'em when needed. */
void
elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
{
const char *filename = pst->filename;
struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile);
struct stab_section_info *maybe = dbx->stab_section_info;
struct stab_section_info *questionable = 0;
int i;
/* The ELF symbol info doesn't include path names, so strip the path
(if any) from the psymtab filename. */
filename = lbasename (filename);
/* FIXME: This linear search could speed up significantly
if it was chained in the right order to match how we search it,
and if we unchained when we found a match. */
for (; maybe; maybe = maybe->next)
{
if (filename[0] == maybe->filename[0]
&& filename_cmp (filename, maybe->filename) == 0)
{
/* We found a match. But there might be several source files
(from different directories) with the same name. */
if (0 == maybe->found)
break;
questionable = maybe; /* Might use it later. */
}
}
if (maybe == 0 && questionable != 0)
{
complaint (&symfile_complaints,
_("elf/stab section information questionable for %s"),
filename);
maybe = questionable;
}
if (maybe)
{
/* Found it! Allocate a new psymtab struct, and fill it in. */
maybe->found++;
pst->section_offsets = (struct section_offsets *)
obstack_alloc (&objfile->objfile_obstack,
SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
for (i = 0; i < maybe->num_sections; i++)
(pst->section_offsets)->offsets[i] = maybe->sections[i];
return;
}
/* We were unable to find any offsets for this file. Complain. */
if (dbx->stab_section_info) /* If there *is* any info, */
complaint (&symfile_complaints,
_("elf/stab section information missing for %s"), filename);
}
/* Implementation of `sym_get_probes', as documented in symfile.h. */
static VEC (probe_p) *

View File

@ -30,20 +30,6 @@
global because it is referenced by several modules. */
extern const struct objfile_data *dbx_objfile_data_key;
/* The stab_section_info chain remembers info from the ELF symbol table,
while psymtabs are being built for the other symbol tables in the
objfile. It is destroyed at the complation of psymtab-reading.
Any info that was used from it has been copied into psymtabs. */
struct stab_section_info
{
char *filename;
struct stab_section_info *next;
int found; /* Count of times it's found in searching. */
size_t num_sections;
CORE_ADDR sections[1];
};
/* Information is passed among various dbxread routines for accessing
symbol files. A pointer to this structure is kept in the objfile,
using the dbx_objfile_data_key. */
@ -57,9 +43,6 @@ struct dbx_symfile_info
int stringtab_size; /* Its size */
file_ptr symtab_offset; /* Offset in file to symbol table */
int symbol_size; /* Bytes in a single symbol */
struct stab_section_info *stab_section_info; /* Section starting points
of the original .o files
before linking. */
/* See stabsread.h for the use of the following. */
struct header_file *header_files;

View File

@ -2646,7 +2646,7 @@ parse_partial_symbols (struct objfile *objfile)
}
else
textlow = 0;
pst = start_psymtab_common (objfile, objfile->section_offsets,
pst = start_psymtab_common (objfile,
fdr_name (fh),
textlow,
objfile->global_psymbols.next,
@ -3935,6 +3935,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
struct linetable *lines;
CORE_ADDR lowest_pdr_addr = 0;
int last_symtab_ended = 0;
struct section_offsets *section_offsets = objfile->section_offsets;
if (pst->readin)
return;
@ -4051,7 +4052,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
&& previous_stab_code != (unsigned char) N_SO
&& *name == '\000')
{
valu += ANOFFSET (pst->section_offsets,
valu += ANOFFSET (section_offsets,
SECT_OFF_TEXT (objfile));
previous_stab_code = N_SO;
cust = end_symtab (valu, SECT_OFF_TEXT (objfile));
@ -4062,14 +4063,14 @@ psymtab_to_symtab_1 (struct objfile *objfile,
{
last_symtab_ended = 0;
process_one_symbol (type_code, 0, valu, name,
pst->section_offsets, objfile);
section_offsets, objfile);
}
}
/* Similarly a hack. */
else if (name[0] == '#')
{
process_one_symbol (N_SLINE, 0, valu, name,
pst->section_offsets, objfile);
section_offsets, objfile);
}
if (type_code == N_FUN)
{
@ -4101,7 +4102,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
else
{
/* Handle encoded stab line number. */
valu += ANOFFSET (pst->section_offsets,
valu += ANOFFSET (section_offsets,
SECT_OFF_TEXT (objfile));
record_line (current_subfile, sh.index,
gdbarch_addr_bits_remove (gdbarch, valu));
@ -4225,7 +4226,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
c = parse_symbol (&sh,
debug_info->external_aux + fh->iauxBase,
sym_ptr, fh->fBigendian,
pst->section_offsets, objfile);
section_offsets, objfile);
sym_ptr += c * external_sym_size;
}
@ -4300,7 +4301,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
ext_ptr = PST_PRIVATE (pst)->extern_tab;
for (i = PST_PRIVATE (pst)->extern_count; --i >= 0; ext_ptr++)
parse_external (ext_ptr, fh->fBigendian,
pst->section_offsets, objfile);
section_offsets, objfile);
/* If there are undefined symbols, tell the user.
The alpha has an undefined symbol for every symbol that is
@ -4758,7 +4759,6 @@ new_psymtab (char *name, struct objfile *objfile)
struct partial_symtab *psymtab;
psymtab = allocate_psymtab (name, objfile);
psymtab->section_offsets = objfile->section_offsets;
/* Keep a backpointer to the file's symbols. */

View File

@ -98,12 +98,6 @@ struct partial_symtab
const char *dirname;
/* Set of relocation offsets to apply to each section.
This is typically objfile->section_offsets, but in some cases
it's different. See, e.g., elfstab_offset_sections. */
struct section_offsets *section_offsets;
/* Range of text addresses covered by this file; texthigh is the
beginning of the next section. Do not use if PSYMTABS_ADDRMAP_SUPPORTED
is set. */
@ -224,7 +218,6 @@ extern void add_psymbol_to_list (const char *, int,
extern void init_psymbol_list (struct objfile *, int);
extern struct partial_symtab *start_psymtab_common (struct objfile *,
struct section_offsets *,
const char *, CORE_ADDR,
struct partial_symbol **,
struct partial_symbol **);

View File

@ -1014,18 +1014,6 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
fprintf_filtered (outfile, ")\n");
}
fprintf_filtered (outfile, " Relocate symbols by ");
for (i = 0; i < objfile->num_sections; ++i)
{
if (i != 0)
fprintf_filtered (outfile, ", ");
wrap_here (" ");
fputs_filtered (paddress (gdbarch,
ANOFFSET (psymtab->section_offsets, i)),
outfile);
}
fprintf_filtered (outfile, "\n");
fprintf_filtered (outfile, " Symbols cover text addresses ");
fputs_filtered (paddress (gdbarch, psymtab->textlow), outfile);
fprintf_filtered (outfile, "-");
@ -1526,7 +1514,6 @@ sort_pst_symbols (struct objfile *objfile, struct partial_symtab *pst)
struct partial_symtab *
start_psymtab_common (struct objfile *objfile,
struct section_offsets *section_offsets,
const char *filename,
CORE_ADDR textlow, struct partial_symbol **global_syms,
struct partial_symbol **static_syms)
@ -1534,7 +1521,6 @@ start_psymtab_common (struct objfile *objfile,
struct partial_symtab *psymtab;
psymtab = allocate_psymtab (filename, objfile);
psymtab->section_offsets = section_offsets;
psymtab->textlow = textlow;
psymtab->texthigh = psymtab->textlow; /* default */
psymtab->globals_offset = global_syms - objfile->global_psymbols.list;

View File

@ -189,8 +189,6 @@ extern void coffstab_build_psymtabs
extern void stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
char *stabstr_name, char *text_name);
extern void elfstab_offset_sections (struct objfile *,
struct partial_symtab *);
extern int symbol_reference_defined (char **);
extern void ref_add (int, struct symbol *, char *, CORE_ADDR);

View File

@ -2016,7 +2016,7 @@ xcoff_start_psymtab (struct objfile *objfile,
struct partial_symbol **static_syms)
{
struct partial_symtab *result =
start_psymtab_common (objfile, objfile->section_offsets,
start_psymtab_common (objfile,
filename,
/* We fill in textlow later. */
0,
@ -2079,7 +2079,6 @@ xcoff_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
struct partial_symtab *subpst =
allocate_psymtab (include_list[i], objfile);
subpst->section_offsets = pst->section_offsets;
subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
sizeof (struct symloc));
((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;