aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2017-04-04 08:42:30 +0100
committerAlan Hayward <alan.hayward@arm.com>2017-04-04 08:42:30 +0100
commitdb3a1dc7c9404e203c54576db3335e69d995e83e (patch)
treebcb494594a0ed862f7454efbad109a9eb6886448
parent4c220b4625df0b08cbb22e5c7ca04dc7a629de1b (diff)
downloadbinutils-db3a1dc7c9404e203c54576db3335e69d995e83e.zip
binutils-db3a1dc7c9404e203c54576db3335e69d995e83e.tar.gz
binutils-db3a1dc7c9404e203c54576db3335e69d995e83e.tar.bz2
Remove MAX_REGISTER_SIZE from frame.c
gdb/ * frame.c (get_frame_register_bytes): Unwind using value. (put_frame_register_bytes): Likewise.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/frame.c35
2 files changed, 27 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index bfa5358..0fa4770 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2017-05-04 Alan Hayward <alan.hayward@arm.com>
+
+ * frame.c (get_frame_register_bytes): Unwind using value.
+ (put_frame_register_bytes): Likewise.
+
2017-03-29 Jan Kratochvil <jan.kratochvil@redhat.com>
* auto-load.c (auto_load_section_scripts): Check SEC_HAS_CONTENTS.
diff --git a/gdb/frame.c b/gdb/frame.c
index d98003d..05a3be4 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1410,16 +1410,21 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
}
else
{
- gdb_byte buf[MAX_REGISTER_SIZE];
- enum lval_type lval;
- CORE_ADDR addr;
- int realnum;
+ struct value *value = frame_unwind_register_value (frame->next,
+ regnum);
+ gdb_assert (value != NULL);
+ *optimizedp = value_optimized_out (value);
+ *unavailablep = !value_entirely_available (value);
- frame_register (frame, regnum, optimizedp, unavailablep,
- &lval, &addr, &realnum, buf);
if (*optimizedp || *unavailablep)
- return 0;
- memcpy (myaddr, buf + offset, curr_len);
+ {
+ release_value (value);
+ value_free (value);
+ return 0;
+ }
+ memcpy (myaddr, value_contents_all (value) + offset, curr_len);
+ release_value (value);
+ value_free (value);
}
myaddr += curr_len;
@@ -1460,11 +1465,15 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
}
else
{
- gdb_byte buf[MAX_REGISTER_SIZE];
-
- deprecated_frame_register_read (frame, regnum, buf);
- memcpy (buf + offset, myaddr, curr_len);
- put_frame_register (frame, regnum, buf);
+ struct value *value = frame_unwind_register_value (frame->next,
+ regnum);
+ gdb_assert (value != NULL);
+
+ memcpy ((char *) value_contents_writeable (value) + offset, myaddr,
+ curr_len);
+ put_frame_register (frame, regnum, value_contents_raw (value));
+ release_value (value);
+ value_free (value);
}
myaddr += curr_len;