diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5b889178cb..2b04ea4869 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +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 diff --git a/gdb/regcache.c b/gdb/regcache.c index a5c90a6314..1fcf93386f 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 1bb0ce0ec8..11a8bb98d6 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