2003-11-04 Andrew Cagney <cagney@redhat.com>

* symtab.c (find_active_alias): Delete function.
	(lookup_block_symbol): Delete alias code.
	* stabsread.c (resolve_live_range): Delete function.
	(add_live_range): Delete function.
	(resolve_symbol_reference): Delete function.
	(define_symbol): Delete live range and alias code.
	(scan_file_globals): Delete alias code.
	* symtab.h (SYMBOL_RANGES): Delete macro.
	(struct range_list): Delete structure.
	(struct symbol): Delete field "ranges".
	(SYMBOL_ALIASES): Delete macro.
	(struct alias_list): Delete structure.
	(struct symbol): Delete field "aliases".
This commit is contained in:
Andrew Cagney 2003-11-04 22:22:31 +00:00
parent 1083b3bca3
commit 507836c0f0
4 changed files with 22 additions and 383 deletions

View File

@ -1,3 +1,19 @@
2003-11-04 Andrew Cagney <cagney@redhat.com>
* symtab.c (find_active_alias): Delete function.
(lookup_block_symbol): Delete alias code.
* stabsread.c (resolve_live_range): Delete function.
(add_live_range): Delete function.
(resolve_symbol_reference): Delete function.
(define_symbol): Delete live range and alias code.
(scan_file_globals): Delete alias code.
* symtab.h (SYMBOL_RANGES): Delete macro.
(struct range_list): Delete structure.
(struct symbol): Delete field "ranges".
(SYMBOL_ALIASES): Delete macro.
(struct alias_list): Delete structure.
(struct symbol): Delete field "aliases".
2003-11-04 Michael Snyder <msnyder@redhat.com>
* MAINTAINERS: Remove myself as owner of breakpoints and

View File

@ -156,18 +156,10 @@ read_cpp_abbrev (struct field_info *, char **, struct type *,
static char *find_name_end (char *name);
static void add_live_range (struct objfile *, struct symbol *, CORE_ADDR,
CORE_ADDR);
static int resolve_live_range (struct objfile *, struct symbol *, char *);
static int process_reference (char **string);
static CORE_ADDR ref_search_value (int refnum);
static int resolve_symbol_reference (struct objfile *, struct symbol *,
char *);
void stabsread_clear_cache (void);
static const char vptr_name[] = "_vptr$";
@ -475,109 +467,6 @@ read_type_number (char **pp, int *typenums)
#define VISIBILITY_PUBLIC '2' /* Stabs character for public field */
#define VISIBILITY_IGNORE '9' /* Optimized out or zero length */
/* This routine fixes up symbol references/aliases to point to the original
symbol definition. Returns 0 on failure, non-zero on success. */
static int
resolve_symbol_reference (struct objfile *objfile, struct symbol *sym, char *p)
{
int refnum;
struct symbol *ref_sym = 0;
struct alias_list *alias;
/* If this is not a symbol reference return now. */
if (*p != '#')
return 0;
/* Use "#<num>" as the name; we'll fix the name later.
We stored the original symbol name as "#<id>=<name>"
so we can now search for "#<id>" to resolving the reference.
We'll fix the names later by removing the "#<id>" or "#<id>=" */
/*---------------------------------------------------------*/
/* Get the reference id number, and
advance p past the names so we can parse the rest.
eg: id=2 for p : "2=", "2=z:r(0,1)" "2:r(0,1);l(#5,#6),l(#7,#4)" */
/*---------------------------------------------------------*/
/* This gets reference name from string. sym may not have a name. */
/* Get the reference number associated with the reference id in the
gdb stab string. From that reference number, get the main/primary
symbol for this alias. */
refnum = process_reference (&p);
ref_sym = ref_search (refnum);
if (!ref_sym)
{
lrs_general_complaint ("symbol for reference not found");
return 0;
}
/* Parse the stab of the referencing symbol
now that we have the referenced symbol.
Add it as a new symbol and a link back to the referenced symbol.
eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
/* If the stab symbol table and string contain:
RSYM 0 5 00000000 868 #15=z:r(0,1)
LBRAC 0 0 00000000 899 #5=
SLINE 0 16 00000003 923 #6=
Then the same symbols can be later referenced by:
RSYM 0 5 00000000 927 #15:r(0,1);l(#5,#6)
This is used in live range splitting to:
1) specify that a symbol (#15) is actually just a new storage
class for a symbol (#15=z) which was previously defined.
2) specify that the beginning and ending ranges for a symbol
(#15) are the values of the beginning (#5) and ending (#6)
symbols. */
/* Read number as reference id.
eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
/* FIXME! Might I want to use SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
in case of "l(0,0)"? */
/*--------------------------------------------------*/
/* Add this symbol to the reference list. */
/*--------------------------------------------------*/
alias = (struct alias_list *) obstack_alloc (&objfile->type_obstack,
sizeof (struct alias_list));
if (!alias)
{
lrs_general_complaint ("Unable to allocate alias list memory");
return 0;
}
alias->next = 0;
alias->sym = sym;
if (!SYMBOL_ALIASES (ref_sym))
{
SYMBOL_ALIASES (ref_sym) = alias;
}
else
{
struct alias_list *temp;
/* Get to the end of the list. */
for (temp = SYMBOL_ALIASES (ref_sym);
temp->next;
temp = temp->next)
;
temp->next = alias;
}
/* Want to fix up name so that other functions (eg. valops)
will correctly print the name.
Don't add_symbol_to_list so that lookup_symbol won't find it.
nope... needed for fixups. */
DEPRECATED_SYMBOL_NAME (sym) = DEPRECATED_SYMBOL_NAME (ref_sym);
/* Done! */
return 1;
}
/* Structure for storing pointers to reference definitions for fast lookup
during "process_later". */
@ -804,41 +693,6 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
goto normal; /* Do *something* with it */
}
}
else if (string[0] == '#')
{
/* Special GNU C extension for referencing symbols. */
char *s;
int refnum, nlen;
/* If STRING defines a new reference id, then add it to the
reference map. Else it must be referring to a previously
defined symbol, so add it to the alias list of the previously
defined symbol. */
s = string;
refnum = symbol_reference_defined (&s);
if (refnum >= 0)
ref_add (refnum, sym, string, SYMBOL_VALUE (sym));
else if (!resolve_symbol_reference (objfile, sym, string))
return NULL;
/* S..P contains the name of the symbol. We need to store
the correct name into DEPRECATED_SYMBOL_NAME. */
nlen = p - s;
if (refnum >= 0)
{
if (nlen > 0)
SYMBOL_SET_NAMES (sym, s, nlen, objfile);
else
/* FIXME! Want DEPRECATED_SYMBOL_NAME (sym) = 0;
Get error if leave name 0. So give it something. */
{
nlen = p - string;
SYMBOL_SET_NAMES (sym, string, nlen, objfile);
}
}
/* Advance STRING beyond the reference id. */
string = s;
}
else
{
normal:
@ -1521,136 +1375,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
SYMBOL_CLASS (sym) = LOC_REF_ARG;
}
/* Is there more to parse? For example LRS/alias information? */
while (*p && *p == ';')
{
p++;
if (*p && p[0] == 'l' && p[1] == '(')
{
/* GNU extensions for live range splitting may be appended to
the end of the stab string. eg. "l(#1,#2);l(#3,#5)" */
/* Resolve the live range and add it to SYM's live range list. */
if (!resolve_live_range (objfile, sym, p))
return NULL;
/* Find end of live range info. */
p = strchr (p, ')');
if (!*p || *p != ')')
{
lrs_general_complaint ("live range format not recognized");
return NULL;
}
p++;
}
}
return sym;
}
/* Add the live range found in P to the symbol SYM in objfile OBJFILE. Returns
non-zero on success, zero otherwise. */
static int
resolve_live_range (struct objfile *objfile, struct symbol *sym, char *p)
{
int refnum;
CORE_ADDR start, end;
/* Sanity check the beginning of the stabs string. */
if (!*p || *p != 'l')
{
lrs_general_complaint ("live range string 1");
return 0;
}
p++;
if (!*p || *p != '(')
{
lrs_general_complaint ("live range string 2");
return 0;
}
p++;
/* Get starting value of range and advance P past the reference id.
?!? In theory, the process_reference should never fail, but we should
catch that case just in case the compiler scrogged the stabs. */
refnum = process_reference (&p);
start = ref_search_value (refnum);
if (!start)
{
lrs_general_complaint ("Live range symbol not found 1");
return 0;
}
if (!*p || *p != ',')
{
lrs_general_complaint ("live range string 3");
return 0;
}
p++;
/* Get ending value of range and advance P past the reference id.
?!? In theory, the process_reference should never fail, but we should
catch that case just in case the compiler scrogged the stabs. */
refnum = process_reference (&p);
end = ref_search_value (refnum);
if (!end)
{
lrs_general_complaint ("Live range symbol not found 2");
return 0;
}
if (!*p || *p != ')')
{
lrs_general_complaint ("live range string 4");
return 0;
}
/* Now that we know the bounds of the range, add it to the
symbol. */
add_live_range (objfile, sym, start, end);
return 1;
}
/* Add a new live range defined by START and END to the symbol SYM
in objfile OBJFILE. */
static void
add_live_range (struct objfile *objfile, struct symbol *sym, CORE_ADDR start,
CORE_ADDR end)
{
struct range_list *r, *rs;
if (start >= end)
{
lrs_general_complaint ("end of live range follows start");
return;
}
/* Alloc new live range structure. */
r = (struct range_list *)
obstack_alloc (&objfile->type_obstack,
sizeof (struct range_list));
r->start = start;
r->end = end;
r->next = 0;
/* Append this range to the symbol's range list. */
if (!SYMBOL_RANGES (sym))
SYMBOL_RANGES (sym) = r;
else
{
/* Get the last range for the symbol. */
for (rs = SYMBOL_RANGES (sym); rs->next; rs = rs->next)
;
rs->next = r;
}
}
/* Skip rest of this symbol and return an error type.
General notes on error recovery: error_type always skips to the
@ -4510,7 +4237,7 @@ scan_file_globals (struct objfile *objfile)
{
int hash;
struct minimal_symbol *msymbol;
struct symbol *sym, *prev, *rsym;
struct symbol *sym, *prev;
struct objfile *resolve_objfile;
/* SVR4 based linkers copy referenced global symbols from shared
@ -4564,9 +4291,6 @@ scan_file_globals (struct objfile *objfile)
if (DEPRECATED_SYMBOL_NAME (msymbol)[0] == DEPRECATED_SYMBOL_NAME (sym)[0] &&
STREQ (DEPRECATED_SYMBOL_NAME (msymbol) + 1, DEPRECATED_SYMBOL_NAME (sym) + 1))
{
struct alias_list *aliases;
/* Splice this symbol out of the hash chain and
assign the value we have to it. */
if (prev)
@ -4581,38 +4305,21 @@ scan_file_globals (struct objfile *objfile)
/* Check to see whether we need to fix up a common block. */
/* Note: this code might be executed several times for
the same symbol if there are multiple references. */
/* If symbol has aliases, do minimal symbol fixups for each.
These live aliases/references weren't added to
global_sym_chain hash but may also need to be fixed up. */
/* FIXME: Maybe should have added aliases to the global chain, resolved symbol name, then treated aliases as normal
symbols? Still, we wouldn't want to add_to_list. */
/* Now do the same for each alias of this symbol */
rsym = sym;
aliases = SYMBOL_ALIASES (sym);
while (rsym)
if (sym)
{
if (SYMBOL_CLASS (rsym) == LOC_BLOCK)
if (SYMBOL_CLASS (sym) == LOC_BLOCK)
{
fix_common_block (rsym,
fix_common_block (sym,
SYMBOL_VALUE_ADDRESS (msymbol));
}
else
{
SYMBOL_VALUE_ADDRESS (rsym)
SYMBOL_VALUE_ADDRESS (sym)
= SYMBOL_VALUE_ADDRESS (msymbol);
}
SYMBOL_SECTION (rsym) = SYMBOL_SECTION (msymbol);
if (aliases)
{
rsym = aliases->sym;
aliases = aliases->next;
}
else
rsym = NULL;
SYMBOL_SECTION (sym) = SYMBOL_SECTION (msymbol);
}
if (prev)
{
sym = SYMBOL_VALUE_CHAIN (prev);

View File

@ -114,8 +114,6 @@ struct symbol *lookup_symbol_aux_minsyms (const char *name,
struct symtab **symtab);
#endif
static struct symbol *find_active_alias (struct symbol *sym, CORE_ADDR addr);
/* This flag is used in hppa-tdep.c, and set in hp-symtab-read.c */
/* Signals the presence of objects compiled by HP compilers */
int hp_som_som_object_present = 0;
@ -1668,29 +1666,6 @@ lookup_block_symbol (const struct block *block, const char *name,
&& (linkage_name != NULL
? strcmp (SYMBOL_LINKAGE_NAME (sym), linkage_name) == 0 : 1))
{
/* If SYM has aliases, then use any alias that is active
at the current PC. If no alias is active at the current
PC, then use the main symbol.
?!? Is checking the current pc correct? Is this routine
ever called to look up a symbol from another context?
FIXME: No, it's not correct. If someone sets a
conditional breakpoint at an address, then the
breakpoint's `struct expression' should refer to the
`struct symbol' appropriate for the breakpoint's
address, which may not be the PC.
Even if it were never called from another context,
it's totally bizarre for lookup_symbol's behavior to
depend on the value of the inferior's current PC. We
should pass in the appropriate PC as well as the
block. The interface to lookup_symbol should change
to require the caller to provide a PC. */
if (SYMBOL_ALIASES (sym))
sym = find_active_alias (sym, read_pc ());
sym_found = sym;
if (SYMBOL_CLASS (sym) != LOC_ARG &&
SYMBOL_CLASS (sym) != LOC_LOCAL_ARG &&
@ -1708,38 +1683,6 @@ lookup_block_symbol (const struct block *block, const char *name,
}
}
/* Given a main symbol SYM and ADDR, search through the alias
list to determine if an alias is active at ADDR and return
the active alias.
If no alias is active, then return SYM. */
static struct symbol *
find_active_alias (struct symbol *sym, CORE_ADDR addr)
{
struct range_list *r;
struct alias_list *aliases;
/* If we have aliases, check them first. */
aliases = SYMBOL_ALIASES (sym);
while (aliases)
{
if (!SYMBOL_RANGES (aliases->sym))
return aliases->sym;
for (r = SYMBOL_RANGES (aliases->sym); r; r = r->next)
{
if (r->start <= addr && r->end > addr)
return aliases->sym;
}
aliases = aliases->next;
}
/* Nothing found, return the main symbol. */
return sym;
}
/* Find the symtab associated with PC and SECTION. Look through the
psymtabs and read in another symtab if necessary. */

View File

@ -583,22 +583,6 @@ struct location_funcs
struct axs_value * value);
};
/* Linked list of symbol's live ranges. */
struct range_list
{
CORE_ADDR start;
CORE_ADDR end;
struct range_list *next;
};
/* Linked list of aliases for a particular main/primary symbol. */
struct alias_list
{
struct symbol *sym;
struct alias_list *next;
};
/* This structure is space critical. See space comments at the top. */
struct symbol
@ -651,15 +635,6 @@ struct symbol
}
aux_value;
/* Link to a list of aliases for this symbol.
Only a "primary/main symbol may have aliases. */
struct alias_list *aliases;
/* List of ranges where this symbol is active. This is only
used by alias symbols at the current time. */
struct range_list *ranges;
struct symbol *hash_next;
};
@ -670,8 +645,6 @@ struct symbol
#define SYMBOL_LINE(symbol) (symbol)->line
#define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg
#define SYMBOL_OBJFILE(symbol) (symbol)->aux_value.objfile
#define SYMBOL_ALIASES(symbol) (symbol)->aliases
#define SYMBOL_RANGES(symbol) (symbol)->ranges
#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value.loc.baton
#define SYMBOL_LOCATION_FUNCS(symbol) (symbol)->aux_value.loc.funcs