2003-06-21 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sat, 21 Jun 2003 16:26:02 +0000 (16:26 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 21 Jun 2003 16:26:02 +0000 (16:26 +0000)
* frame.c (get_frame_register): New function.
(frame_unwind_register_signed): New function.
(get_frame_register_signed): New function.
(frame_unwind_register_unsigned): New function.
(get_frame_register_unsigned): New function.
* frame.h: Add comments on naming schema.
(get_frame_register, frame_unwind_register_signed): Declare.
(get_frame_register_signed, get_frame_register_signed): Declare.
(frame_unwind_register_unsigned): Declare.
(get_frame_register_unsigned): Declare.

gdb/ChangeLog
gdb/frame.c
gdb/frame.h

index 921d5d0e2f8ba539e6d69d4bdcb844c9aa3ed226..881d092ec200a8056618867d80a98bce16855daf 100644 (file)
@@ -1,3 +1,16 @@
+2003-06-21  Andrew Cagney  <cagney@redhat.com>
+
+       * frame.c (get_frame_register): New function.
+       (frame_unwind_register_signed): New function.
+       (get_frame_register_signed): New function.
+       (frame_unwind_register_unsigned): New function.
+       (get_frame_register_unsigned): New function.
+       * frame.h: Add comments on naming schema.
+       (get_frame_register, frame_unwind_register_signed): Declare.
+       (get_frame_register_signed, get_frame_register_signed): Declare.
+       (frame_unwind_register_unsigned): Declare.
+       (get_frame_register_unsigned): Declare.
+
 2003-06-20  Theodore A. Roth  <troth@openavr.org>
 
        * avr-tdep.c (avr_gdbarch_init): Don't call set_gdbarch_bfd_vma_bit.
index 55e9dc580b535d4454299ae39d8974e8534bb969..b873b3af27c2c8c418f088937e3e73cda065799d 100644 (file)
@@ -614,6 +614,41 @@ frame_unwind_register (struct frame_info *frame, int regnum, void *buf)
                         &realnum, buf);
 }
 
+void
+get_frame_register (struct frame_info *frame,
+                   int regnum, void *buf)
+{
+  frame_unwind_register (frame->next, regnum, buf);
+}
+
+LONGEST
+frame_unwind_register_signed (struct frame_info *frame, int regnum)
+{
+  char buf[MAX_REGISTER_SIZE];
+  frame_unwind_register (frame, regnum, buf);
+  return extract_signed_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
+}
+
+LONGEST
+get_frame_register_signed (struct frame_info *frame, int regnum)
+{
+  return frame_unwind_register_signed (frame->next, regnum);
+}
+
+ULONGEST
+frame_unwind_register_unsigned (struct frame_info *frame, int regnum)
+{
+  char buf[MAX_REGISTER_SIZE];
+  frame_unwind_register (frame, regnum, buf);
+  return extract_unsigned_integer (buf, REGISTER_VIRTUAL_SIZE (regnum));
+}
+
+ULONGEST
+get_frame_register_unsigned (struct frame_info *frame, int regnum)
+{
+  return frame_unwind_register_unsigned (frame->next, regnum);
+}
+
 void
 frame_unwind_signed_register (struct frame_info *frame, int regnum,
                              LONGEST *val)
index 14da014cdcae1c3860145d5a71a3b91a3e94e1d8..be1b4f1f7aaf2d05795a1bfc9cad3173689f7c33 100644 (file)
 #if !defined (FRAME_H)
 #define FRAME_H 1
 
+/* The following is the intended naming schema for frame functions.
+   It isn't 100% consistent, but it is aproaching that.  Frame naming
+   schema:
+
+   Prefixes:
+
+   get_frame_WHAT...(): Get WHAT from the THIS frame (functionaly
+   equivalent to THIS->next->unwind->what)
+
+   frame_unwind_WHAT...(): Unwind THIS frame's WHAT from the NEXT
+   frame.
+
+   put_frame_WHAT...(): Put a value into this frame (unsafe, need to
+   invalidate the frame / regcache afterwards) (better name more
+   strongly hinting at its unsafeness)
+
+   safe_....(): Safer version of various functions, doesn't throw an
+   error (leave this for later?).  Returns non-zero if the fetch
+   succeeds.   Return a freshly allocated error message?
+
+   Suffixes:
+
+   void /frame/_WHAT(): Read WHAT's value into the buffer parameter.
+
+   ULONGEST /frame/_WHAT_unsigned(): Return an unsigned value (the
+   alternative is *frame_unsigned_WHAT).
+
+   LONGEST /frame/_WHAT_signed(): Return WHAT signed value.
+
+   What:
+
+   /frame/_memory* (frame, coreaddr, len [, buf]): Extract/return
+   *memory.
+
+   /frame/_register* (frame, regnum [, buf]): extract/return register.
+
+   CORE_ADDR /frame/_{pc,sp,...} (frame): Resume address, innner most
+   stack *address, ...
+
+   */
+
 struct symtab_and_line;
 struct frame_unwind;
 struct frame_base;
@@ -303,16 +344,31 @@ extern void frame_register_unwind (struct frame_info *frame, int regnum,
                                   CORE_ADDR *addrp, int *realnump,
                                   void *valuep);
 
-/* More convenient interface to frame_register_unwind().  */
-/* NOTE: cagney/2002-09-13: Return void as one day these functions may
-   be changed to return an indication that the read succeeded.  */
+/* Fetch a register from this, or unwind a register from the next
+   frame.  Note that the get_frame methods are wrappers to
+   frame->next->unwind.  They all [potentially] throw an error if the
+   fetch fails.  */
 
 extern void frame_unwind_register (struct frame_info *frame,
                                   int regnum, void *buf);
+extern void get_frame_register (struct frame_info *frame,
+                               int regnum, void *buf);
+
+extern LONGEST frame_unwind_register_signed (struct frame_info *frame,
+                                            int regnum);
+extern LONGEST get_frame_register_signed (struct frame_info *frame,
+                                         int regnum);
+extern ULONGEST frame_unwind_register_unsigned (struct frame_info *frame,
+                                              int regnum);
+extern ULONGEST get_frame_register_unsigned (struct frame_info *frame,
+                                            int regnum);
+
 
+/* Use frame_unwind_register_signed.  */
 extern void frame_unwind_signed_register (struct frame_info *frame,
                                          int regnum, LONGEST *val);
 
+/* Use frame_unwind_register_signed.  */
 extern void frame_unwind_unsigned_register (struct frame_info *frame,
                                            int regnum, ULONGEST *val);
 
@@ -330,12 +386,15 @@ extern void frame_register (struct frame_info *frame, int regnum,
 /* NOTE: cagney/2002-09-13: Return void as one day these functions may
    be changed to return an indication that the read succeeded.  */
 
+/* Use get_frame_register.  */
 extern void frame_read_register (struct frame_info *frame, int regnum,
                                 void *buf);
 
+/* Use get_frame_register_signed.  */
 extern void frame_read_signed_register (struct frame_info *frame,
                                        int regnum, LONGEST *val);
 
+/* Use get_frame_register_unsigned.  */
 extern void frame_read_unsigned_register (struct frame_info *frame,
                                          int regnum, ULONGEST *val);