From 9fd15b2e80452f03edb3fb36c2b4c36d05f4ef4e Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Tue, 22 Nov 2016 14:05:04 +0000 Subject: [PATCH] New regcache_raw_get_signed This patch adds a new regcache api regcache_raw_get_signed. gdb: 2016-11-22 Yao Qi * regcache.c (regcache_raw_get_signed): New function. * regcache.h (regcache_raw_get_signed): Declare. --- gdb/ChangeLog | 5 +++++ gdb/regcache.c | 13 +++++++++++++ gdb/regcache.h | 6 ++++++ 3 files changed, 24 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5b88917..2b04ea4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2016-11-22 Yao Qi + * regcache.c (regcache_raw_get_signed): New function. + * regcache.h (regcache_raw_get_signed): Declare. + +2016-11-22 Yao Qi + * value.c (value_from_component): Use VALUE_NEXT_FRAME_ID instead of VALUE_FROM_ID. diff --git a/gdb/regcache.c b/gdb/regcache.c index a5c90a6..1fcf933 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -742,6 +742,19 @@ regcache_raw_write_unsigned (struct regcache *regcache, int regnum, regcache_raw_write (regcache, regnum, buf); } +LONGEST +regcache_raw_get_signed (struct regcache *regcache, int regnum) +{ + LONGEST value; + enum register_status status; + + status = regcache_raw_read_signed (regcache, regnum, &value); + if (status == REG_UNAVAILABLE) + throw_error (NOT_AVAILABLE_ERROR, + _("Register %d is not available"), regnum); + return value; +} + enum register_status regcache_cooked_read (struct regcache *regcache, int regnum, gdb_byte *buf) { diff --git a/gdb/regcache.h b/gdb/regcache.h index 1bb0ce0..11a8bb9 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -66,6 +66,12 @@ extern void regcache_raw_write_signed (struct regcache *regcache, extern void regcache_raw_write_unsigned (struct regcache *regcache, int regnum, ULONGEST val); +/* Return the register's value in signed or throw if it's not + available. */ + +extern LONGEST regcache_raw_get_signed (struct regcache *regcache, + int regnum); + /* Set a raw register's value in the regcache's buffer. Unlike regcache_raw_write, this is not write-through. The intention is allowing to change the buffer contents of a read-only regcache -- 2.7.4