* [rfa:symtab] Delete stabs live range splitting support
@ 2003-11-04 18:41 Andrew Cagney
2003-11-04 20:14 ` Kevin Buettner
0 siblings, 1 reply; 6+ messages in thread
From: Andrew Cagney @ 2003-11-04 18:41 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 135 bytes --]
GCC never officially supported it, and its bloating each symbol by ~20%.
Tested on PPC NetBSD which is still using stabs.
ok?
Andrew
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 16273 bytes --]
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".
Index: stabsread.c
===================================================================
RCS file: /cvs/src/src/gdb/stabsread.c,v
retrieving revision 1.65
diff -u -r1.65 stabsread.c
--- stabsread.c 6 Oct 2003 19:27:12 -0000 1.65
+++ stabsread.c 4 Nov 2003 18:20:06 -0000
@@ -156,18 +156,10 @@
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 @@
#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 @@
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 @@
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;
- }
-}
-\f
-
/* 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 @@
{
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 @@
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,37 +4305,20 @@
/* 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)
{
Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.120
diff -u -r1.120 symtab.c
--- symtab.c 21 Oct 2003 22:56:38 -0000 1.120
+++ symtab.c 4 Nov 2003 18:20:07 -0000
@@ -114,8 +114,6 @@
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 @@
&& (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 &&
@@ -1707,38 +1682,6 @@
return (sym_found); /* Will be NULL if not found. */
}
}
-
-/* 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;
-}
-\f
/* Find the symtab associated with PC and SECTION. Look through the
psymtabs and read in another symtab if necessary. */
Index: symtab.h
===================================================================
RCS file: /cvs/src/src/gdb/symtab.h,v
retrieving revision 1.81
diff -u -r1.81 symtab.h
--- symtab.h 21 Oct 2003 22:56:39 -0000 1.81
+++ symtab.h 4 Nov 2003 18:20:07 -0000
@@ -583,22 +583,6 @@
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 @@
}
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 @@
#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
\f
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfa:symtab] Delete stabs live range splitting support
2003-11-04 18:41 [rfa:symtab] Delete stabs live range splitting support Andrew Cagney
@ 2003-11-04 20:14 ` Kevin Buettner
2003-11-04 20:25 ` Elena Zannoni
0 siblings, 1 reply; 6+ messages in thread
From: Kevin Buettner @ 2003-11-04 20:14 UTC (permalink / raw)
To: Andrew Cagney, gdb-patches
On Nov 4, 1:41pm, Andrew Cagney wrote:
> GCC never officially supported it, and its bloating each symbol by ~20%.
>
> Tested on PPC NetBSD which is still using stabs.
Does anyone know which ports this code originally benefited? Does any
existing port still use it? (A brief inspection of the ChangeLog files
hasn't turned up anything useful.)
Kevin
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfa:symtab] Delete stabs live range splitting support
2003-11-04 20:14 ` Kevin Buettner
@ 2003-11-04 20:25 ` Elena Zannoni
2003-11-04 20:37 ` Kevin Buettner
2003-11-04 22:26 ` Andrew Cagney
0 siblings, 2 replies; 6+ messages in thread
From: Elena Zannoni @ 2003-11-04 20:25 UTC (permalink / raw)
To: Kevin Buettner; +Cc: Andrew Cagney, gdb-patches
Kevin Buettner writes:
> On Nov 4, 1:41pm, Andrew Cagney wrote:
>
> > GCC never officially supported it, and its bloating each symbol by ~20%.
> >
> > Tested on PPC NetBSD which is still using stabs.
>
> Does anyone know which ports this code originally benefited? Does any
> existing port still use it? (A brief inspection of the ChangeLog files
> hasn't turned up anything useful.)
>
> Kevin
groundhog day?? (the movie) Somebody pinch me.
See the thread at:
http://sources.redhat.com/ml/gdb/2002-06/msg00189.html which refers to
another thread, which refers to another thread, which refers to
another thread......
Yes kill it! Now!
elena
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfa:symtab] Delete stabs live range splitting support
2003-11-04 20:25 ` Elena Zannoni
@ 2003-11-04 20:37 ` Kevin Buettner
2003-11-04 22:26 ` Andrew Cagney
1 sibling, 0 replies; 6+ messages in thread
From: Kevin Buettner @ 2003-11-04 20:37 UTC (permalink / raw)
To: Elena Zannoni, Kevin Buettner; +Cc: Andrew Cagney, gdb-patches
On Nov 4, 3:25pm, Elena Zannoni wrote:
> Kevin Buettner writes:
> > On Nov 4, 1:41pm, Andrew Cagney wrote:
> >
> > > GCC never officially supported it, and its bloating each symbol by ~20%.
> > >
> > > Tested on PPC NetBSD which is still using stabs.
> >
> > Does anyone know which ports this code originally benefited? Does any
> > existing port still use it? (A brief inspection of the ChangeLog files
> > hasn't turned up anything useful.)
> >
> > Kevin
>
> groundhog day?? (the movie) Somebody pinch me.
>
> See the thread at:
> http://sources.redhat.com/ml/gdb/2002-06/msg00189.html which refers to
> another thread, which refers to another thread, which refers to
> another thread......
Thanks for the link. Based on that discussion from over a year ago,
it seems like it should've been killed off then, but wasn't for some
reason.
> Yes kill it! Now!
Sounds like an approval to me...
Kevin
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfa:symtab] Delete stabs live range splitting support
2003-11-04 20:25 ` Elena Zannoni
2003-11-04 20:37 ` Kevin Buettner
@ 2003-11-04 22:26 ` Andrew Cagney
1 sibling, 0 replies; 6+ messages in thread
From: Andrew Cagney @ 2003-11-04 22:26 UTC (permalink / raw)
To: Elena Zannoni; +Cc: Kevin Buettner, Andrew Cagney, gdb-patches
> Kevin Buettner writes:
> > On Nov 4, 1:41pm, Andrew Cagney wrote:
> >
> > > GCC never officially supported it, and its bloating each symbol by ~20%.
> > >
> > > Tested on PPC NetBSD which is still using stabs.
> >
> > Does anyone know which ports this code originally benefited? Does any
> > existing port still use it? (A brief inspection of the ChangeLog files
> > hasn't turned up anything useful.)
> >
> > Kevin
>
> groundhog day?? (the movie) Somebody pinch me.
>
> See the thread at:
> http://sources.redhat.com/ml/gdb/2002-06/msg00189.html which refers to
> another thread, which refers to another thread, which refers to
> another thread......
>
> Yes kill it! Now!
Gone. I guess if anything breaks it's now my fault ...
Andrew
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [rfa:symtab] Delete stabs live range splitting support
@ 2003-11-04 19:45 Michael Elizabeth Chastain
0 siblings, 0 replies; 6+ messages in thread
From: Michael Elizabeth Chastain @ 2003-11-04 19:45 UTC (permalink / raw)
To: ac131313, gdb-patches
Looks like a good idea to me.
Lightly proofread, but not tested.
> GCC never officially supported it, and its bloating each symbol by ~20%.
Right, it is a cause of real bloat.
As far as gcc support goes, I do cover stabs+, so I will notice if
it gets committed and anything regresses.
Michael C
===
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2003-11-04 22:26 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-04 18:41 [rfa:symtab] Delete stabs live range splitting support Andrew Cagney
2003-11-04 20:14 ` Kevin Buettner
2003-11-04 20:25 ` Elena Zannoni
2003-11-04 20:37 ` Kevin Buettner
2003-11-04 22:26 ` Andrew Cagney
2003-11-04 19:45 Michael Elizabeth Chastain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox