* dbxread.c (process_one_symbol): Fix a few coding standard

issues.  Improve code formatting.
This commit is contained in:
Mark Kettenis 2004-11-20 12:38:38 +00:00
parent 91f54576a2
commit e31272c3a6
2 changed files with 159 additions and 143 deletions

View File

@ -1,5 +1,8 @@
2004-11-20 Mark Kettenis <kettenis@gnu.org>
* dbxread.c (process_one_symbol): Fix a few coding standard
issues. Improve code formatting.
* dbxread.c: Include "gdb_string.h".
(record_minimal_symbol, read_ofile_symtab): Replace
DEPRECATED_STREQ and DEPRECATED_STREQN with strcmp and strncmp.

View File

@ -2635,14 +2635,13 @@ read_ofile_symtab (struct partial_symtab *pst)
DESC is the desc field of the ".stab" entry.
VALU is the value field of the ".stab" entry.
NAME is the symbol name, in our address space.
SECTION_OFFSETS is a set of amounts by which the sections of this object
file were relocated when it was loaded into memory.
Note that these section_offsets are not the
objfile->section_offsets but the pst->section_offsets.
All symbols that refer
to memory locations need to be offset by these amounts.
OBJFILE is the object file from which we are reading symbols.
It is used in end_symtab. */
SECTION_OFFSETS is a set of amounts by which the sections of this
object file were relocated when it was loaded into memory. Note
that these section_offsets are not the objfile->section_offsets but
the pst->section_offsets. All symbols that refer to memory
locations need to be offset by these amounts.
OBJFILE is the object file from which we are reading symbols. It
is used in end_symtab. */
void
process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
@ -2650,15 +2649,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
struct objfile *objfile)
{
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
relative to the current function's start address. On systems
other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
used to relocate these symbol types rather than SECTION_OFFSETS. */
/* 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 relative to the current function's start address. On systems
other than Solaris 2, this just holds the SECT_OFF_TEXT value,
and is used to relocate these symbol types rather than
SECTION_OFFSETS. */
static CORE_ADDR function_start_offset;
/* This holds the address of the start of a function, without the system
peculiarities of function_start_offset. */
/* This holds the address of the start of a function, without the
system peculiarities of function_start_offset. */
static CORE_ADDR last_function_start;
/* If this is nonzero, we've seen an N_SLINE since the start of the
@ -2667,8 +2667,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
value is. */
static int sline_found_in_function = 1;
/* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
file. Used to detect the SunPRO solaris compiler. */
/* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
source file. Used to detect the SunPRO solaris compiler. */
static int n_opt_found;
/* The stab type used for the definition of the last function.
@ -2676,12 +2676,15 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
static int function_stab_type = 0;
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 (objfile));
{
/* 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 (objfile));
}
/* Something is wrong if we see real data before
seeing a source file name. */
/* Something is wrong if we see real data before seeing a source
file name. */
if (last_source_file == NULL && type != (unsigned char) N_SO)
{
@ -2699,8 +2702,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
if (*name == '\000')
{
/* This N_FUN marks the end of a function. This closes off the
current block. */
/* This N_FUN marks the end of a function. This closes off
the current block. */
if (context_stack_depth <= 0)
{
@ -2710,8 +2713,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
/* The following check is added before recording line 0 at
end of function so as to handle hand-generated stabs
which may have an N_FUN stabs at the end of the function, but
no N_SLINE stabs. */
which may have an N_FUN stabs at the end of the function,
but no N_SLINE stabs. */
if (sline_found_in_function)
record_line (current_subfile, 0, last_function_start + valu);
@ -2733,7 +2736,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
sline_found_in_function = 0;
/* Relocate for dynamic loading */
/* Relocate for dynamic loading. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
valu = SMASH_TEXT_ADDRESS (valu);
last_function_start = valu;
@ -2786,16 +2789,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
lbrac_mismatch_complaint (symnum);
/* Some compilers put the variable decls inside of an
LBRAC/RBRAC block. This macro should be nonzero if this
is true. DESC is N_DESC from the N_RBRAC symbol.
GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
or the GCC2_COMPILED_SYMBOL. */
LBRAC/RBRAC block. This macro should be nonzero if this is
true. DESC is N_DESC from the N_RBRAC symbol. GCC_P is true
if we've detected the GCC_COMPILED_SYMBOL or the
GCC2_COMPILED_SYMBOL. */
#if !defined (VARIABLES_INSIDE_BLOCK)
#define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
#endif
/* Can only use new->locals as local symbols here if we're in
gcc or on a machine that puts them before the lbrack. */
GCC or on a machine that puts them before the lbrack. */
if (!VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
{
if (local_symbols != NULL)
@ -2808,8 +2811,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
symbols within an LBRAC/RBRAC block; this complaint
might also help sort out problems in which
VARIABLES_INSIDE_BLOCK is incorrectly defined. */
complaint (&symfile_complaints,
"misplaced N_LBRAC entry; discarding local symbols which have no enclosing block");
complaint (&symfile_complaints, "\
misplaced N_LBRAC entry; discarding local symbols which have \
no enclosing block");
}
local_symbols = new->locals;
}
@ -2817,16 +2821,17 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
if (context_stack_depth
> !VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
{
/* This is not the outermost LBRAC...RBRAC pair in the function,
its local symbols preceded it, and are the ones just recovered
from the context stack. Define the block for them (but don't
bother if the block contains no symbols. Should we complain
on blocks without symbols? I can't think of any useful purpose
for them). */
/* This is not the outermost LBRAC...RBRAC pair in the
function, its local symbols preceded it, and are the ones
just recovered from the context stack. Define the block
for them (but don't bother if the block contains no
symbols. Should we complain on blocks without symbols?
I can't think of any useful purpose for them). */
if (local_symbols != NULL)
{
/* Muzzle a compiler bug that makes end < start. (which
compilers? Is this ever harmful?). */
/* Muzzle a compiler bug that makes end < start.
??? Which compilers? Is this ever harmful?. */
if (new->start_addr > valu)
{
complaint (&symfile_complaints,
@ -2854,17 +2859,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
case N_FN:
case N_FN_SEQ:
/* This kind of symbol indicates the start of an object file. */
/* Relocate for dynamic loading */
/* This kind of symbol indicates the start of an object file.
Relocate for dynamic loading. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
break;
case N_SO:
/* This type of symbol indicates the start of data
for one source file.
Finish the symbol table of the previous source file
(if any) and start accumulating a new symbol table. */
/* Relocate for dynamic loading */
/* This type of symbol indicates the start of data for one
source file. Finish the symbol table of the previous source
file (if any) and start accumulating a new symbol table.
Relocate for dynamic loading. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
n_opt_found = 0;
@ -2872,9 +2876,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
if (last_source_file)
{
/* Check if previous symbol was also an N_SO (with some
sanity checks). If so, that one was actually the directory
name, and the current one is the real file name.
Patch things up. */
sanity checks). If so, that one was actually the
directory name, and the current one is the real file
name. Patch things up. */
if (previous_stab_code == (unsigned char) N_SO)
{
patch_subfile_names (current_subfile, name);
@ -2884,8 +2888,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
end_stabs ();
}
/* Null name means this just marks the end of text for this .o file.
Don't start a new symtab in this case. */
/* Null name means this just marks the end of text for this .o
file. Don't start a new symtab in this case. */
if (*name == '\000')
break;
@ -2898,11 +2902,10 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
break;
case N_SOL:
/* This type of symbol indicates the start of data for
a sub-source-file, one whose contents were copied or
included in the compilation of the main source file
(whose name was given in the N_SO symbol.) */
/* Relocate for dynamic loading */
/* This type of symbol indicates the start of data for a
sub-source-file, one whose contents were copied or included
in the compilation of the main source file (whose name was
given in the N_SO symbol). Relocate for dynamic loading. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
start_subfile (name, current_subfile->dirname);
break;
@ -2922,11 +2925,12 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
break;
case N_SLINE:
/* This type of "symbol" really just records
one line-number -- core-address correspondence.
Enter it in the line list for this symbol table. */
/* This type of "symbol" really just records one line-number --
core-address correspondence. Enter it in the line list for
this symbol table. */
/* Relocate for dynamic loading and for ELF acc fn-relative syms. */
/* Relocate for dynamic loading and for ELF acc
function-relative symbols. */
valu += function_start_offset;
/* GCC 2.95.3 emits the first N_SLINE stab somwehere in the
@ -2963,28 +2967,31 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
common_block_end (objfile);
break;
/* The following symbol types need to have the appropriate offset added
to their value; then we process symbol definitions in the name. */
/* The following symbol types need to have the appropriate
offset added to their value; then we process symbol
definitions in the name. */
case N_STSYM: /* Static symbol in data seg */
case N_LCSYM: /* Static symbol in BSS seg */
case N_ROSYM: /* Static symbol in Read-only data seg */
case N_STSYM: /* Static symbol in data segment. */
case N_LCSYM: /* Static symbol in BSS segment. */
case N_ROSYM: /* Static symbol in read-only data segment. */
/* HORRID HACK DEPT. However, it's Sun's furgin' fault.
Solaris2's stabs-in-elf makes *most* symbols relative
but leaves a few absolute (at least for Solaris 2.1 and version
2.0.1 of the SunPRO compiler). N_STSYM and friends sit on the fence.
.stab "foo:S...",N_STSYM is absolute (ld relocates it)
.stab "foo:V...",N_STSYM is relative (section base subtracted).
This leaves us no choice but to search for the 'S' or 'V'...
(or pass the whole section_offsets stuff down ONE MORE function
call level, which we really don't want to do). */
Solaris 2's stabs-in-elf makes *most* symbols relative but
leaves a few absolute (at least for Solaris 2.1 and version
2.0.1 of the SunPRO compiler). N_STSYM and friends sit on
the fence. .stab "foo:S...",N_STSYM is absolute (ld
relocates it) .stab "foo:V...",N_STSYM is relative (section
base subtracted). This leaves us no choice but to search for
the 'S' or 'V'... (or pass the whole section_offsets stuff
down ONE MORE function call level, which we really don't want
to do). */
{
char *p;
/* .o files and NLMs have non-zero text seg offsets, but don't need
their static syms offset in this fashion. XXX - This is really a
crock that should be fixed in the solib handling code so that I
don't have to work around it here. */
/* Normal object file and NLMs have non-zero text seg offsets,
but don't need their static syms offset in this fashion.
XXX - This is really a crock that should be fixed in the
solib handling code so that I don't have to work around it
here. */
if (!symfile_relocatable)
{
@ -2992,20 +2999,22 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *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* want
to add whatever solib.c passed to symbol_file_add as
addr (this is known to affect SunOS4, and I suspect ELF
too). Since elfstab_offset_sections currently does not
muck with the text offset (there is no Ttext.text
elfstab_offset_sections-type 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. */
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. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
goto define_a_symbol;
}
}
/* Since it's not the kludge case, re-dispatch to the right handler. */
/* Since it's not the kludge case, re-dispatch to the right
handler. */
switch (type)
{
case N_STSYM:
@ -3015,41 +3024,43 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
case N_ROSYM:
goto case_N_ROSYM;
default:
internal_error (__FILE__, __LINE__, "failed internal consistency check");
internal_error (__FILE__, __LINE__,
"failed internal consistency check");
}
}
case_N_STSYM: /* Static symbol in data seg */
case N_DSLINE: /* Source line number, data seg */
case_N_STSYM: /* Static symbol in data segment. */
case N_DSLINE: /* Source line number, data segment. */
valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
goto define_a_symbol;
case_N_LCSYM: /* Static symbol in BSS seg */
case N_BSLINE: /* Source line number, bss seg */
/* N_BROWS: overlaps with N_BSLINE */
case_N_LCSYM: /* Static symbol in BSS segment. */
case N_BSLINE: /* Source line number, BSS segment. */
/* N_BROWS: overlaps with N_BSLINE. */
valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
goto define_a_symbol;
case_N_ROSYM: /* Static symbol in Read-only data seg */
case_N_ROSYM: /* Static symbol in read-only data segment. */
valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile));
goto define_a_symbol;
case N_ENTRY: /* Alternate entry point */
/* Relocate for dynamic loading */
case N_ENTRY: /* Alternate entry point. */
/* Relocate for dynamic loading. */
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
goto define_a_symbol;
/* The following symbol types we don't know how to process. Handle
them in a "default" way, but complain to people who care. */
/* The following symbol types we don't know how to process.
Handle them in a "default" way, but complain to people who
care. */
default:
case N_CATCH: /* Exception handler catcher */
case N_EHDECL: /* Exception handler name */
case N_PC: /* Global symbol in Pascal */
case N_M2C: /* Modula-2 compilation unit */
/* N_MOD2: overlaps with N_EHDECL */
case N_SCOPE: /* Modula-2 scope information */
case N_ECOML: /* End common (local name) */
case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
case N_CATCH: /* Exception handler catcher. */
case N_EHDECL: /* Exception handler name. */
case N_PC: /* Global symbol in Pascal. */
case N_M2C: /* Modula-2 compilation unit. */
/* N_MOD2: overlaps with N_EHDECL. */
case N_SCOPE: /* Modula-2 scope information. */
case N_ECOML: /* End common (local name). */
case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
case N_NBDATA:
case N_NBBSS:
case N_NBSTS:
@ -3057,18 +3068,18 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
unknown_symtype_complaint (hex_string (type));
/* FALLTHROUGH */
/* The following symbol types don't need the address field relocated,
since it is either unused, or is absolute. */
/* The following symbol types don't need the address field
relocated, since it is either unused, or is absolute. */
define_a_symbol:
case N_GSYM: /* Global variable */
case N_NSYMS: /* Number of symbols (ultrix) */
case N_NOMAP: /* No map? (ultrix) */
case N_RSYM: /* Register variable */
case N_DEFD: /* Modula-2 GNU module dependency */
case N_SSYM: /* Struct or union element */
case N_LSYM: /* Local symbol in stack */
case N_PSYM: /* Parameter variable */
case N_LENG: /* Length of preceding symbol type */
case N_GSYM: /* Global variable. */
case N_NSYMS: /* Number of symbols (Ultrix). */
case N_NOMAP: /* No map? (Ultrix). */
case N_RSYM: /* Register variable. */
case N_DEFD: /* Modula-2 GNU module dependency. */
case N_SSYM: /* Struct or union element. */
case N_LSYM: /* Local symbol in stack. */
case N_PSYM: /* Parameter variable. */
case N_LENG: /* Length of preceding symbol type. */
if (name)
{
int deftype;
@ -3085,29 +3096,31 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
function_stab_type = type;
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Deal with the SunPRO 3.0 compiler which omits the address
from N_FUN symbols. */
/* Deal with the SunPRO 3.0 compiler which omits the
address from N_FUN symbols. */
if (type == N_FUN
&& valu == ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)))
&& valu == ANOFFSET (section_offsets,
SECT_OFF_TEXT (objfile)))
{
CORE_ADDR minsym_valu =
find_stab_function_addr (name, last_source_file, objfile);
/* find_stab_function_addr will return 0 if the minimal
symbol wasn't found. (Unfortunately, this might also
be a valid address.) Anyway, if it *does* return 0,
it is likely that the value was set correctly to begin
with... */
/* The function find_stab_function_addr will return
0 if the minimal symbol wasn't found.
(Unfortunately, this might also be a valid
address.) Anyway, if it *does* return 0, it is
likely that the value was set correctly to begin
with... */
if (minsym_valu != 0)
valu = minsym_valu;
}
#endif
if (block_address_function_relative)
/* For Solaris 2.0 compilers, the block addresses and
/* For Solaris 2 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
function. On normal systems, and when using GCC on
Solaris 2, these addresses are just absolute, or
relative to the N_SO, depending on
BLOCK_ADDRESS_ABSOLUTE. */
function_start_offset = valu;
@ -3143,15 +3156,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
/* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
for a bunch of other flags, too. Someday we may parse their
flags; for now we ignore theirs and hope they'll ignore ours. */
case N_OPT: /* Solaris 2: Compiler options */
case N_OPT: /* Solaris 2: Compiler options. */
if (name)
{
if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
{
processing_gcc_compilation = 2;
#if 0 /* Works, but is experimental. -fnf */
/* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
know whether it will use the old style or v3 mangling. */
/* For now, stay with AUTO_DEMANGLING for g++ output, as
we don't know whether it will use the old style or v3
mangling. */
if (AUTO_DEMANGLING)
{
set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
@ -3177,12 +3191,12 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
break;
/* The following symbol types can be ignored. */
case N_OBJ: /* Solaris 2: Object file dir and name */
case N_PATCH: /* Solaris2: Patch Run Time Checker. */
/* N_UNDF: Solaris 2: file separator mark */
/* N_UNDF: -- we will never encounter it, since we only process one
file's symbols at once. */
case N_ENDM: /* Solaris 2: End of module */
case N_OBJ: /* Solaris 2: Object file dir and name. */
case N_PATCH: /* Solaris 2: Patch Run Time Checker. */
/* N_UNDF: Solaris 2: File separator mark. */
/* N_UNDF: -- we will never encounter it, since we only process
one file's symbols at once. */
case N_ENDM: /* Solaris 2: End of module. */
case N_ALIAS: /* SunPro F77: alias name, ignore for now. */
break;
}
@ -3194,9 +3208,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
symbol. */
if (name[0] == '#')
{
/* Initialize symbol reference names and determine if this is
a definition. If symbol reference is being defined, go
ahead and add it. Otherwise, just return sym. */
/* Initialize symbol reference names and determine if this is a
definition. If a symbol reference is being defined, go ahead
and add it. Otherwise, just return. */
char *s = name;
int refnum;
@ -3213,7 +3227,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
name = s;
}
previous_stab_code = type;
}