mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
* dbxread.c (process_one_symbol): If SUN_FIXED_LBRAC_BUG is not
defined, don't worry about Sun's silly LBRAC bug. * dbxread.c (process_one_symbol): If there's a symbol before an N_SO, don't error(). (case N_BCOMM): complain () not error ().
This commit is contained in:
@ -1,5 +1,13 @@
|
|||||||
Sun Jun 13 09:17:48 1993 Jim Kingdon (kingdon@cygnus.com)
|
Sun Jun 13 09:17:48 1993 Jim Kingdon (kingdon@cygnus.com)
|
||||||
|
|
||||||
|
* dbxread.c (process_one_symbol): If SUN_FIXED_LBRAC_BUG is not
|
||||||
|
defined, don't worry about Sun's silly LBRAC bug.
|
||||||
|
* config/m68k/tm-sun3.h: Define SUN_FIXED_LBRAC_BUG to 0.
|
||||||
|
|
||||||
|
* dbxread.c (process_one_symbol): If there's a symbol before an
|
||||||
|
N_SO, don't error().
|
||||||
|
(case N_BCOMM): complain () not error ().
|
||||||
|
|
||||||
* defs.h, main.c (catch_errors): Add return_mask arg.
|
* defs.h, main.c (catch_errors): Add return_mask arg.
|
||||||
stack.c (print_frame_info): Pass RETURN_MASK_ERROR.
|
stack.c (print_frame_info): Pass RETURN_MASK_ERROR.
|
||||||
other callers: Pass RETURN_MASK_ALL.
|
other callers: Pass RETURN_MASK_ALL.
|
||||||
|
@ -1465,10 +1465,16 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
struct section_offsets *section_offsets;
|
struct section_offsets *section_offsets;
|
||||||
struct objfile *objfile;
|
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
|
/* 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
|
an SLINE or FUN or SO before the first LBRAC, since the variable does
|
||||||
not get reset in between reads of different symbol files. */
|
not get reset in between reads of different symbol files. */
|
||||||
static CORE_ADDR last_pc_address;
|
static CORE_ADDR last_pc_address;
|
||||||
|
#endif
|
||||||
|
|
||||||
register struct context_stack *new;
|
register struct context_stack *new;
|
||||||
/* This remembers the address of the start of a function. It is used
|
/* This remembers the address of the start of a function. It is used
|
||||||
@ -1503,14 +1509,11 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
|
|
||||||
if (last_source_file == NULL && type != (unsigned char)N_SO)
|
if (last_source_file == NULL && type != (unsigned char)N_SO)
|
||||||
{
|
{
|
||||||
/* Currently this ignores N_ENTRY on Gould machines, N_NSYM on machines
|
/* Ignore any symbols which appear before an N_SO symbol. Currently
|
||||||
where that code is defined. */
|
no one puts symbols there, but we should deal gracefully with the
|
||||||
if (IGNORE_SYMBOL (type))
|
case. A complain()t might be in order (if !IGNORE_SYMBOL (type)),
|
||||||
return;
|
but this should not be an error (). */
|
||||||
|
return;
|
||||||
/* FIXME, this should not be an error, since it precludes extending
|
|
||||||
the symbol table information in this way... */
|
|
||||||
error ("Invalid symbol data: does not start by identifying a source file.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
@ -1544,7 +1547,9 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SUN_FIXED_LBRAC_BUG
|
||||||
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
||||||
|
#endif
|
||||||
|
|
||||||
if (block_address_function_relative)
|
if (block_address_function_relative)
|
||||||
/* On Solaris 2.0 compilers, the block addresses and N_SLINE's
|
/* On Solaris 2.0 compilers, the block addresses and N_SLINE's
|
||||||
@ -1587,11 +1592,13 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
valu += last_source_start_addr;
|
valu += last_source_start_addr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SUN_FIXED_LBRAC_BUG
|
||||||
if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
|
if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
|
||||||
/* Patch current LBRAC pc value to match last handy pc value */
|
/* Patch current LBRAC pc value to match last handy pc value */
|
||||||
complain (&lbrac_complaint);
|
complain (&lbrac_complaint);
|
||||||
valu = last_pc_address;
|
valu = last_pc_address;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
new = push_context (desc, valu);
|
new = push_context (desc, valu);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1679,7 +1686,9 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
|
|
||||||
n_opt_found = 0;
|
n_opt_found = 0;
|
||||||
|
|
||||||
|
#ifdef SUN_FIXED_LBRAC_BUG
|
||||||
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PCC_SOL_BROKEN
|
#ifdef PCC_SOL_BROKEN
|
||||||
/* pcc bug, occasionally puts out SO for SOL. */
|
/* pcc bug, occasionally puts out SO for SOL. */
|
||||||
@ -1738,14 +1747,20 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
|||||||
Enter it in the line list for this symbol table. */
|
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 fn-relative syms. */
|
||||||
valu += function_start_offset;
|
valu += function_start_offset;
|
||||||
|
#ifdef SUN_FIXED_LBRAC_BUG
|
||||||
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
last_pc_address = valu; /* Save for SunOS bug circumcision */
|
||||||
|
#endif
|
||||||
record_line (current_subfile, desc, valu);
|
record_line (current_subfile, desc, valu);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case N_BCOMM:
|
case N_BCOMM:
|
||||||
if (common_block)
|
if (common_block)
|
||||||
error ("Invalid symbol data: common within common at symtab pos %d",
|
{
|
||||||
symnum);
|
static struct complaint msg = {
|
||||||
|
"Invalid symbol data: common within common at symtab pos %d",
|
||||||
|
0, 0};
|
||||||
|
complain (&msg, symnum);
|
||||||
|
}
|
||||||
common_block = local_symbols;
|
common_block = local_symbols;
|
||||||
common_block_i = local_symbols ? local_symbols->nsyms : 0;
|
common_block_i = local_symbols ? local_symbols->nsyms : 0;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user