diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/dwarfread.c | 15 |
2 files changed, 17 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4c10b85..0cd0468 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 17 06:52:47 1997 Fred Fish <fnf@cygnus.com> + + * dwarfread.c (new_symbol): Use SYMBOL_VALUE_ADDRESS, instead of + SYMBOL_VALUE, to set the value of LOC_STATIC symbols. + Mon Jun 16 18:38:28 1997 Mark Alexander <marka@cygnus.com> * infrun.c (wait_for_inferior): Mark registers as invalid when diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c index 529f01b..3315c3a 100644 --- a/gdb/dwarfread.c +++ b/gdb/dwarfread.c @@ -2972,7 +2972,7 @@ new_symbol (dip, objfile) case TAG_global_variable: if (dip -> at_location != NULL) { - SYMBOL_VALUE (sym) = locval (dip -> at_location); + SYMBOL_VALUE_ADDRESS (sym) = locval (dip -> at_location); add_symbol_to_list (sym, &global_symbols); SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_VALUE (sym) += baseaddr; @@ -2981,8 +2981,6 @@ new_symbol (dip, objfile) 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 (optimized_out) { SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT; @@ -3001,6 +2999,17 @@ new_symbol (dip, objfile) SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_VALUE (sym) += baseaddr; } + if (SYMBOL_CLASS (sym) == LOC_STATIC) + { + /* LOC_STATIC address class MUST use SYMBOL_VALUE_ADDRESS, + which may store to a bigger location than SYMBOL_VALUE. */ + SYMBOL_VALUE_ADDRESS (sym) = locval (dip -> at_location); + } + else + { + SYMBOL_VALUE (sym) = locval (dip -> at_location); + } + add_symbol_to_list (sym, list_in_scope); } break; case TAG_formal_parameter: |