diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2009-01-15 15:38:07 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2009-01-15 15:38:07 +0000 |
commit | 61212c0fb13d0a54f12748dcc56a41c15a91d12a (patch) | |
tree | d006b77357adb211693a534f9f5d25e962e128cb /gdb/findvar.c | |
parent | cc2420d5bbb6f8ebfc231b80e87e9987585a7549 (diff) | |
download | gdb-61212c0fb13d0a54f12748dcc56a41c15a91d12a.zip gdb-61212c0fb13d0a54f12748dcc56a41c15a91d12a.tar.gz gdb-61212c0fb13d0a54f12748dcc56a41c15a91d12a.tar.bz2 |
* value.h (address_of_variable): Add prototype.
(locate_var_value): Remove prototype.
* findvar.c (read_var_value): Do not attempt to default frame
to selected frame.
(locate_var_value): Remove function.
* valops.c (value_of_variable): Retrieve selected frame for
symbols that require a frame when called with NULL block.
* valops.c (address_of_variable): New function.
* eval.c (evaluate_subexp_for_address): Call address_of_variable
instead of calling locate_var_value.
(evaluate_subexp_with_coercion): Likewise.
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r-- | gdb/findvar.c | 75 |
1 files changed, 3 insertions, 72 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c index a56650d..1048887 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -382,8 +382,7 @@ symbol_read_needs_frame (struct symbol *sym) /* Given a struct symbol for a variable, and a stack frame id, read the value of the variable and return a (pointer to a) struct value containing the value. - If the variable cannot be found, return a zero pointer. - If FRAME is NULL, use the selected frame. */ + If the variable cannot be found, return a zero pointer. */ struct value * read_var_value (struct symbol *var, struct frame_info *frame) @@ -405,10 +404,8 @@ read_var_value (struct symbol *var, struct frame_info *frame) len = TYPE_LENGTH (type); - /* FIXME drow/2003-09-06: this call to the selected frame should be - pushed upwards to the callers. */ - if (frame == NULL) - frame = deprecated_safe_get_selected_frame (); + if (symbol_read_needs_frame (var)) + gdb_assert (frame); switch (SYMBOL_CLASS (var)) { @@ -450,8 +447,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) break; case LOC_ARG: - if (frame == NULL) - return 0; addr = get_frame_args_address (frame); if (!addr) return 0; @@ -462,8 +457,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) { struct value *ref; CORE_ADDR argref; - if (frame == NULL) - return 0; argref = get_frame_args_address (frame); if (!argref) return 0; @@ -474,8 +467,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) } case LOC_LOCAL: - if (frame == NULL) - return 0; addr = get_frame_locals_address (frame); addr += SYMBOL_VALUE (var); break; @@ -498,9 +489,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) int regno = SYMBOL_VALUE (var); struct value *regval; - if (frame == NULL) - return 0; - if (SYMBOL_CLASS (var) == LOC_REGPARM_ADDR) { regval = value_from_register (lookup_pointer_type (type), @@ -530,8 +518,6 @@ read_var_value (struct symbol *var, struct frame_info *frame) Unfortunately DWARF 2 stores the frame-base (instead of the function) location in a function's symbol. Oops! For the moment enable this when/where applicable. */ - if (frame == 0 && SYMBOL_OPS (var)->read_needs_frame (var)) - return 0; return SYMBOL_OPS (var)->read_variable (var, frame); case LOC_UNRESOLVED: @@ -657,58 +643,3 @@ address_from_register (struct type *type, int regnum, struct frame_info *frame) return result; } - - -/* Given a struct symbol for a variable or function, - and a stack frame id, - return a (pointer to a) struct value containing the properly typed - address. */ - -struct value * -locate_var_value (struct symbol *var, struct frame_info *frame) -{ - struct gdbarch *gdbarch; - CORE_ADDR addr = 0; - struct type *type = SYMBOL_TYPE (var); - struct value *lazy_value; - - /* Evaluate it first; if the result is a memory address, we're fine. - Lazy evaluation pays off here. */ - - lazy_value = read_var_value (var, frame); - if (lazy_value == 0) - error (_("Address of \"%s\" is unknown."), SYMBOL_PRINT_NAME (var)); - - if ((VALUE_LVAL (lazy_value) == lval_memory && value_lazy (lazy_value)) - || TYPE_CODE (type) == TYPE_CODE_FUNC) - { - struct value *val; - - addr = VALUE_ADDRESS (lazy_value); - val = value_from_pointer (lookup_pointer_type (type), addr); - return val; - } - - /* Not a memory address; check what the problem was. */ - switch (VALUE_LVAL (lazy_value)) - { - case lval_register: - gdb_assert (frame); - gdbarch = get_frame_arch (frame); - gdb_assert (gdbarch_register_name - (gdbarch, VALUE_REGNUM (lazy_value)) != NULL - && *gdbarch_register_name - (gdbarch, VALUE_REGNUM (lazy_value)) != '\0'); - error (_("Address requested for identifier " - "\"%s\" which is in register $%s"), - SYMBOL_PRINT_NAME (var), - gdbarch_register_name (gdbarch, VALUE_REGNUM (lazy_value))); - break; - - default: - error (_("Can't take address of \"%s\" which isn't an lvalue."), - SYMBOL_PRINT_NAME (var)); - break; - } - return 0; /* For lint -- never reached */ -} |