aboutsummaryrefslogtreecommitdiff
path: root/gdb/findvar.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2006-11-22 13:44:45 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2006-11-22 13:44:45 +0000
commit0b2b0195d1b3b75d9fd0e5313466a0141790071d (patch)
treec685ca6d43e2bb095da319b07c2cfe1c47f1f988 /gdb/findvar.c
parent765dc01564a52c8e8ef896ec4acef04a38d60377 (diff)
downloadgdb-0b2b0195d1b3b75d9fd0e5313466a0141790071d.zip
gdb-0b2b0195d1b3b75d9fd0e5313466a0141790071d.tar.gz
gdb-0b2b0195d1b3b75d9fd0e5313466a0141790071d.tar.bz2
* findvar.c (address_from_register): New function.
* value.h (address_from_register): Add prototype. * dwarf2loc.c (dwarf_expr_read_reg): Use address_from_register.
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r--gdb/findvar.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 0cda35e..9edd151 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -728,6 +728,26 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame)
return v;
}
+/* Return contents of register REGNUM in frame FRAME as address,
+ interpreted as value of type TYPE. Will abort if register
+ value is not available. */
+
+CORE_ADDR
+address_from_register (struct type *type, int regnum, struct frame_info *frame)
+{
+ struct value *value;
+ CORE_ADDR result;
+
+ value = value_from_register (type, regnum, frame);
+ gdb_assert (value);
+
+ result = value_as_address (value);
+ release_value (value);
+ value_free (value);
+
+ return result;
+}
+
/* Given a struct symbol for a variable or function,
and a stack frame id,