diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-06-21 16:26:02 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-06-21 16:26:02 +0000 |
commit | f0e7d0e8f2d5505f2c1446a8726f1dba59fc260e (patch) | |
tree | d188c72227299eb00feb977bac0b775f25a8f873 | |
parent | 373bbd04cb248a9dd84b36e395c12d170997d944 (diff) | |
download | fsf-binutils-gdb-f0e7d0e8f2d5505f2c1446a8726f1dba59fc260e.zip fsf-binutils-gdb-f0e7d0e8f2d5505f2c1446a8726f1dba59fc260e.tar.gz fsf-binutils-gdb-f0e7d0e8f2d5505f2c1446a8726f1dba59fc260e.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/frame.c | 35 | ||||
-rw-r--r-- | gdb/frame.h | 65 |
3 files changed, 110 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 921d5d0..881d092 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/frame.c b/gdb/frame.c index 55e9dc5..b873b3a 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -615,6 +615,41 @@ frame_unwind_register (struct frame_info *frame, int regnum, void *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) { diff --git a/gdb/frame.h b/gdb/frame.h index 14da014..be1b4f1 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -23,6 +23,47 @@ #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); |