+Tue Jan 14 22:34:00 1992 Fred Fish (fnf at cygnus.com)
+
+ * dwarfread.c (locval): Add offreg flag to indicate location
+ values that are computed off a base register.
+
+ * dwarfread.c (new_symbol): Rework TAG_global_variable and
+ TAG_local_variable cases to account for static variables
+ within function scopes.
+
Tue Jan 14 12:28:52 1992 Stu Grossman (grossman at cygnus.com)
* inflow.c: remove #include <sys/dir.h>. Not necessary, and
static int dbroff; /* Relative offset from start of .debug section */
static char *lnbase; /* Base pointer to line section */
static int isreg; /* Kludge to identify register variables */
+static int offreg; /* Kludge to identify basereg references */
static CORE_ADDR baseaddr; /* Add to each symbol value */
stacki = 0;
stack[stacki] = 0;
isreg = 0;
+ offreg = 0;
for (loc += sizeof (short); loc < end; loc += sizeof (long))
{
switch (*loc++) {
case OP_BASEREG:
/* push value of register (number) */
/* Actually, we compute the value as if register has 0 */
+ offreg = 1;
(void) memcpy (®no, loc, sizeof (long));
if (regno == R_FP)
{
}
break;
case TAG_global_variable:
- case TAG_local_variable:
if (dip -> at_location != NULL)
{
SYMBOL_VALUE (sym) = locval (dip -> at_location);
- }
- if (dip -> dietag == TAG_global_variable)
- {
add_symbol_to_list (sym, &global_symbols);
SYMBOL_CLASS (sym) = LOC_STATIC;
SYMBOL_VALUE (sym) += baseaddr;
}
- else
+ break;
+ case TAG_local_variable:
+ if (dip -> at_location != NULL)
{
+ SYMBOL_VALUE (sym) = locval (dip -> at_location);
add_symbol_to_list (sym, list_in_scope);
- if (context_stack_depth > 0)
+ if (isreg)
+ {
+ SYMBOL_CLASS (sym) = LOC_REGISTER;
+ }
+ else if (offreg)
{
- if (isreg)
- {
- SYMBOL_CLASS (sym) = LOC_REGISTER;
- }
- else
- {
- SYMBOL_CLASS (sym) = LOC_LOCAL;
- }
+ SYMBOL_CLASS (sym) = LOC_LOCAL;
}
else
{