mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
* dbxread.c (process_one_symbol): Rather than having
BLOCK_ADDRESS_FUNCTION_RELATIVE a macro, make it a variable which is true if we are doing stabs-in-elf, false otherwise. config/sparc/tm-sun4sol2.h: Don't define it.
This commit is contained in:
parent
d146827310
commit
574dac8e6d
@ -1,3 +1,10 @@
|
||||
Fri Jun 11 10:17:41 1993 Jim Kingdon (kingdon@cygnus.com)
|
||||
|
||||
* dbxread.c (process_one_symbol): Rather than having
|
||||
BLOCK_ADDRESS_FUNCTION_RELATIVE a macro, make it a variable which
|
||||
is true if we are doing stabs-in-elf, false otherwise.
|
||||
config/sparc/tm-sun4sol2.h: Don't define it.
|
||||
|
||||
Fri Jun 11 13:33:40 1993 Ian Lance Taylor (ian@cygnus.com)
|
||||
|
||||
* remote-mips.c (mips_send_packet): Don't print garbage character
|
||||
|
@ -23,12 +23,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#undef IN_SOLIB_TRAMPOLINE
|
||||
#define IN_SOLIB_TRAMPOLINE(pc, name) in_solib_trampoline((pc), (name))
|
||||
|
||||
/* The values of N_SLINE, N_LBRAC, N_RBRAC symbols in .stab sections are
|
||||
relative to the current function, rather than being absolute or
|
||||
relative to the current N_SO. */
|
||||
|
||||
#define BLOCK_ADDRESS_FUNCTION_RELATIVE
|
||||
|
||||
/* Variables in the debug stabs occur after the N_LBRAC, not before it,
|
||||
in code generated by Sun C. */
|
||||
|
||||
|
113
gdb/dbxread.c
113
gdb/dbxread.c
@ -212,9 +212,8 @@ init_header_files PARAMS ((void));
|
||||
static struct pending *
|
||||
copy_pending PARAMS ((struct pending *, int, struct pending *));
|
||||
|
||||
static struct symtab *
|
||||
read_ofile_symtab PARAMS ((struct objfile *, int, int, CORE_ADDR, int,
|
||||
struct section_offsets *));
|
||||
static void
|
||||
read_ofile_symtab PARAMS ((struct partial_symtab *));
|
||||
|
||||
static void
|
||||
dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
|
||||
@ -1234,10 +1233,7 @@ dbx_psymtab_to_symtab_1 (pst)
|
||||
|
||||
/* Read in this file's symbols */
|
||||
bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
|
||||
pst->symtab =
|
||||
read_ofile_symtab (pst->objfile, LDSYMOFF(pst), LDSYMLEN(pst),
|
||||
pst->textlow, pst->texthigh - pst->textlow,
|
||||
pst->section_offsets);
|
||||
read_ofile_symtab (pst);
|
||||
sort_symtab_syms (pst->symtab);
|
||||
|
||||
do_cleanups (old_chain);
|
||||
@ -1291,26 +1287,11 @@ dbx_psymtab_to_symtab (pst)
|
||||
}
|
||||
}
|
||||
|
||||
/* Read in a defined section of a specific object file's symbols.
|
||||
/* Read in a defined section of a specific object file's symbols. */
|
||||
|
||||
DESC is the file descriptor for the file, positioned at the
|
||||
beginning of the symtab
|
||||
SYM_OFFSET is the offset within the file of
|
||||
the beginning of the symbols we want to read
|
||||
SYM_SIZE is the size of the symbol info to read in.
|
||||
TEXT_OFFSET is the beginning of the text segment we are reading symbols for
|
||||
TEXT_SIZE is the size of the text segment read in.
|
||||
SECTION_OFFSETS are the relocation offsets which get added to each symbol. */
|
||||
|
||||
static struct symtab *
|
||||
read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
|
||||
section_offsets)
|
||||
struct objfile *objfile;
|
||||
int sym_offset;
|
||||
int sym_size;
|
||||
CORE_ADDR text_offset;
|
||||
int text_size;
|
||||
struct section_offsets *section_offsets;
|
||||
static void
|
||||
read_ofile_symtab (pst)
|
||||
struct partial_symtab *pst;
|
||||
{
|
||||
register char *namestring;
|
||||
register struct internal_nlist *bufp;
|
||||
@ -1318,6 +1299,19 @@ read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
|
||||
unsigned max_symnum;
|
||||
register bfd *abfd;
|
||||
struct symtab *rtn;
|
||||
struct objfile *objfile;
|
||||
int sym_offset; /* Offset to start of symbols to read */
|
||||
int sym_size; /* Size of symbols to read */
|
||||
CORE_ADDR text_offset; /* Start of text segment for symbols */
|
||||
int text_size; /* Size of text segment for symbols */
|
||||
struct section_offsets *section_offsets;
|
||||
|
||||
objfile = pst->objfile;
|
||||
sym_offset = LDSYMOFF(pst);
|
||||
sym_size = LDSYMLEN(pst);
|
||||
text_offset = pst->textlow;
|
||||
text_size = pst->texthigh - pst->textlow;
|
||||
section_offsets = pst->section_offsets;
|
||||
|
||||
current_objfile = objfile;
|
||||
subfile_stack = NULL;
|
||||
@ -1443,10 +1437,11 @@ read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
|
||||
if (last_source_start_addr == 0)
|
||||
last_source_start_addr = text_offset;
|
||||
|
||||
rtn = end_symtab (text_offset + text_size, 0, 0, objfile, SECT_OFF_TEXT);
|
||||
pst->symtab = end_symtab (text_offset + text_size, 0, 0, objfile,
|
||||
SECT_OFF_TEXT);
|
||||
end_stabs ();
|
||||
return (rtn);
|
||||
}
|
||||
|
||||
|
||||
/* This handles a single symbol from the symbol-file, building symbols
|
||||
into a GDB symtab. It takes these arguments and an implicit argument.
|
||||
@ -1485,11 +1480,20 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
static CORE_ADDR function_start_offset;
|
||||
char *colon_pos;
|
||||
|
||||
#ifndef BLOCK_ADDRESS_FUNCTION_RELATIVE
|
||||
/* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
|
||||
function start address, so just use the text offset. */
|
||||
function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
||||
#endif
|
||||
/* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are relative
|
||||
to the function start address. */
|
||||
int block_address_function_relative;
|
||||
|
||||
/* This is true for Solaris (and all other stabs-in-elf systems, hopefully,
|
||||
since it would be silly to do things differently from Solaris), and
|
||||
false for SunOS4 and other a.out file formats. */
|
||||
block_address_function_relative =
|
||||
0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3);
|
||||
|
||||
if (!block_address_function_relative)
|
||||
/* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
|
||||
function start address, so just use the text offset. */
|
||||
function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
|
||||
|
||||
/* Something is wrong if we see real data before
|
||||
seeing a source file name. */
|
||||
@ -1541,14 +1545,13 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
||||
#endif
|
||||
|
||||
#ifdef BLOCK_ADDRESS_FUNCTION_RELATIVE
|
||||
/* On Solaris 2.0 compilers, the block addresses and N_SLINE's
|
||||
are relative to the start of the function. On normal systems,
|
||||
and when using gcc on Solaris 2.0, these addresses are just
|
||||
absolute, or relative to the N_SO, depending on
|
||||
BLOCK_ADDRESS_ABSOLUTE. */
|
||||
function_start_offset = valu;
|
||||
#endif
|
||||
if (block_address_function_relative)
|
||||
/* On Solaris 2.0 compilers, the block addresses and N_SLINE's
|
||||
are relative to the start of the function. On normal systems,
|
||||
and when using gcc on Solaris 2.0, these addresses are just
|
||||
absolute, or relative to the N_SO, depending on
|
||||
BLOCK_ADDRESS_ABSOLUTE. */
|
||||
function_start_offset = valu;
|
||||
|
||||
within_function = 1;
|
||||
if (context_stack_depth > 0)
|
||||
@ -1570,13 +1573,17 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
/* This "symbol" just indicates the start of an inner lexical
|
||||
context within a function. */
|
||||
|
||||
#if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
|
||||
/* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
|
||||
#if defined(BLOCK_ADDRESS_ABSOLUTE)
|
||||
/* Relocate for dynamic loading (?). */
|
||||
valu += function_start_offset;
|
||||
#else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
if (block_address_function_relative)
|
||||
/* Relocate for Sun ELF acc fn-relative syms. */
|
||||
valu += function_start_offset;
|
||||
else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
#endif
|
||||
|
||||
#ifndef SUN_FIXED_LBRAC_BUG
|
||||
@ -1593,13 +1600,17 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
/* This "symbol" just indicates the end of an inner lexical
|
||||
context that was started with N_LBRAC. */
|
||||
|
||||
#if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
|
||||
/* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
|
||||
#if defined(BLOCK_ADDRESS_ABSOLUTE)
|
||||
/* Relocate for dynamic loading (?). */
|
||||
valu += function_start_offset;
|
||||
#else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
if (block_address_function_relative)
|
||||
/* Relocate for Sun ELF acc fn-relative syms. */
|
||||
valu += function_start_offset;
|
||||
else
|
||||
/* On most machines, the block addresses are relative to the
|
||||
N_SO, the linker did not relocate them (sigh). */
|
||||
valu += last_source_start_addr;
|
||||
#endif
|
||||
|
||||
new = pop_context();
|
||||
|
Loading…
Reference in New Issue
Block a user