diff options
author | Jason Molenda <jsm@bugshack.cygnus.com> | 2000-02-01 03:19:29 +0000 |
---|---|---|
committer | Jason Molenda <jsm@bugshack.cygnus.com> | 2000-02-01 03:19:29 +0000 |
commit | ad3106c7356724dbf6c26594916e1fd0c88120ec (patch) | |
tree | b406604171b1753986343da333d6bdce47139fa7 /gdb/findvar.c | |
parent | 71cf70deba13c380ea38eaa3f88dad258d1ba76e (diff) | |
download | gdb-ad3106c7356724dbf6c26594916e1fd0c88120ec.tar.gz |
import gdb-2000-01-31 snapshot
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r-- | gdb/findvar.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c index 163e9f7905a..4a5a3a0d273 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -1454,6 +1454,10 @@ value_from_register (type, regnum, frame) CHECK_TYPEDEF (type); len = TYPE_LENGTH (type); + /* Pointers on D10V are really only 16 bits, but we lie to gdb elsewhere... */ + if (GDB_TARGET_IS_D10V && TYPE_CODE (type) == TYPE_CODE_PTR) + len = 2; + VALUE_REGNO (v) = regnum; num_storage_locs = (len > REGISTER_VIRTUAL_SIZE (regnum) ? @@ -1652,6 +1656,29 @@ value_from_register (type, regnum, frame) memcpy (VALUE_CONTENTS_RAW (v), raw_buffer + VALUE_OFFSET (v), len); } + if (GDB_TARGET_IS_D10V + && TYPE_CODE (type) == TYPE_CODE_PTR + && TYPE_TARGET_TYPE (type) + && (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)) + { + /* pointer to function */ + unsigned long num; + unsigned short snum; + snum = (unsigned short) extract_unsigned_integer (VALUE_CONTENTS_RAW (v), 2); + num = D10V_MAKE_IADDR (snum); + store_address (VALUE_CONTENTS_RAW (v), 4, num); + } + else if (GDB_TARGET_IS_D10V + && TYPE_CODE (type) == TYPE_CODE_PTR) + { + /* pointer to data */ + unsigned long num; + unsigned short snum; + snum = (unsigned short) extract_unsigned_integer (VALUE_CONTENTS_RAW (v), 2); + num = D10V_MAKE_DADDR (snum); + store_address (VALUE_CONTENTS_RAW (v), 4, num); + } + return v; } |