This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit] Remove one frame register unwind method
- From: Daniel Jacobowitz <drow at false dot org>
- To: gdb-patches at sourceware dot org
- Date: Wed, 17 Oct 2007 09:36:41 -0400
- Subject: [commit] Remove one frame register unwind method
There are a wide variety of register access functions and it's not
always clear what the difference between them is. This patch removes
the most confusing and least useful one of the bunch:
-/* Use frame_unwind_register_signed. */
-extern void frame_unwind_unsigned_register (struct frame_info *frame,
- int regnum, ULONGEST *val);
The comment's right, except for the typo.
frame_unwind_register_unsigned returns a ULONGEST instead of setting
it by value and there's no reason not to use it. So I've obeyed the
comment and replaced frame_unwind_unsigned_register everywhere it was
used.
I proofread this twice and compiled all the modified files. Amusingly
the uses in the manual were wrong; further evidence the routine was
not necessary. I also tested on x86_64-linux, although that was not
affected. I'd have to set up new simulators to test any of the
modified platforms.
Checked in.
--
Daniel Jacobowitz
CodeSourcery
2007-10-17 Daniel Jacobowitz <dan@codesourcery.com>
* frame.c (frame_unwind_unsigned_register): Delete.
(frame_sp_unwind): Use frame_unwind_register_unsigned instead.
* frame.h (frame_unwind_unsigned_register): Delete prototype.
* alpha-linux-tdep.c, alpha-mdebug-tdep.c, alpha-tdep.c,
avr-tdep.c, cris-tdep.c, frv-tdep.c, m68hc11-tdep.c, mn10300-tdep.c,
mt-tdep.c: Replace frame_unwind_unsigned_register with
frame_unwind_register_unsigned.
* gdbint.texinfo (Target Conditionals): Use
frame_unwind_register_unsigned in examples instead of
frame_unwind_unsigned_register.
---
gdb/alpha-linux-tdep.c | 2 +-
gdb/alpha-mdebug-tdep.c | 2 +-
gdb/alpha-tdep.c | 6 +++---
gdb/avr-tdep.c | 12 ++++++------
gdb/cris-tdep.c | 19 +++++++++----------
gdb/doc/gdbint.texinfo | 4 ++--
gdb/frame.c | 19 ++-----------------
gdb/frame.h | 4 ----
gdb/frv-tdep.c | 4 ++--
gdb/m68hc11-tdep.c | 11 +++++------
gdb/mn10300-tdep.c | 4 ++--
gdb/mt-tdep.c | 8 ++++----
12 files changed, 37 insertions(+), 58 deletions(-)
Index: src/gdb/alpha-linux-tdep.c
===================================================================
--- src.orig/gdb/alpha-linux-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/alpha-linux-tdep.c 2007-10-16 15:02:15.000000000 -0400
@@ -105,7 +105,7 @@ alpha_linux_sigcontext_addr (struct fram
long off;
pc = frame_pc_unwind (next_frame);
- frame_unwind_unsigned_register (next_frame, ALPHA_SP_REGNUM, &sp);
+ sp = frame_unwind_register_unsigned (next_frame, ALPHA_SP_REGNUM);
off = alpha_linux_sigtramp_offset (pc);
gdb_assert (off >= 0);
Index: src/gdb/alpha-mdebug-tdep.c
===================================================================
--- src.orig/gdb/alpha-mdebug-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/alpha-mdebug-tdep.c 2007-10-16 15:02:04.000000000 -0400
@@ -204,7 +204,7 @@ alpha_mdebug_frame_unwind_cache (struct
info->saved_regs = frame_obstack_zalloc (SIZEOF_FRAME_SAVED_REGS);
/* The VFP of the frame is at FRAME_REG+FRAME_OFFSET. */
- frame_unwind_unsigned_register (next_frame, PROC_FRAME_REG (proc_desc), &vfp);
+ vfp = frame_unwind_register_unsigned (next_frame, PROC_FRAME_REG (proc_desc));
vfp += PROC_FRAME_OFFSET (info->proc_desc);
info->vfp = vfp;
Index: src/gdb/alpha-tdep.c
===================================================================
--- src.orig/gdb/alpha-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/alpha-tdep.c 2007-10-16 15:01:52.000000000 -0400
@@ -1151,7 +1151,7 @@ alpha_heuristic_frame_unwind_cache (stru
return_reg = ALPHA_RA_REGNUM;
info->return_reg = return_reg;
- frame_unwind_unsigned_register (next_frame, frame_reg, &val);
+ val = frame_unwind_register_unsigned (next_frame, frame_reg);
info->vfp = val + frame_size;
/* Convert offsets to absolute addresses. See above about adding
@@ -1278,7 +1278,7 @@ static struct frame_id
alpha_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
{
ULONGEST base;
- frame_unwind_unsigned_register (next_frame, ALPHA_SP_REGNUM, &base);
+ base = frame_unwind_register_unsigned (next_frame, ALPHA_SP_REGNUM);
return frame_id_build (base, frame_pc_unwind (next_frame));
}
@@ -1286,7 +1286,7 @@ static CORE_ADDR
alpha_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame, ALPHA_PC_REGNUM, &pc);
+ pc = frame_unwind_register_unsigned (next_frame, ALPHA_PC_REGNUM);
return pc;
}
Index: src/gdb/avr-tdep.c
===================================================================
--- src.orig/gdb/avr-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/avr-tdep.c 2007-10-16 15:01:24.000000000 -0400
@@ -904,8 +904,8 @@ avr_frame_unwind_cache (struct frame_inf
/* The SP was moved to the FP. This indicates that a new frame
was created. Get THIS frame's FP value by unwinding it from
the next frame. */
- frame_unwind_unsigned_register (next_frame, AVR_FP_REGNUM, &this_base);
- frame_unwind_unsigned_register (next_frame, AVR_FP_REGNUM+1, &high_base);
+ this_base = frame_unwind_register_unsigned (next_frame, AVR_FP_REGNUM);
+ high_base = frame_unwind_register_unsigned (next_frame, AVR_FP_REGNUM+1);
this_base += (high_base << 8);
/* The FP points at the last saved register. Adjust the FP back
@@ -916,7 +916,7 @@ avr_frame_unwind_cache (struct frame_inf
{
/* Assume that the FP is this frame's SP but with that pushed
stack space added back. */
- frame_unwind_unsigned_register (next_frame, AVR_SP_REGNUM, &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, AVR_SP_REGNUM);
prev_sp = this_base + info->size;
}
@@ -954,7 +954,7 @@ avr_unwind_pc (struct gdbarch *gdbarch,
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame, AVR_PC_REGNUM, &pc);
+ pc = frame_unwind_register_unsigned (next_frame, AVR_PC_REGNUM);
return avr_make_iaddr (pc);
}
@@ -964,7 +964,7 @@ avr_unwind_sp (struct gdbarch *gdbarch,
{
ULONGEST sp;
- frame_unwind_unsigned_register (next_frame, AVR_SP_REGNUM, &sp);
+ sp = frame_unwind_register_unsigned (next_frame, AVR_SP_REGNUM);
return avr_make_saddr (sp);
}
@@ -1095,7 +1095,7 @@ avr_unwind_dummy_id (struct gdbarch *gdb
{
ULONGEST base;
- frame_unwind_unsigned_register (next_frame, AVR_SP_REGNUM, &base);
+ base = frame_unwind_register_unsigned (next_frame, AVR_SP_REGNUM);
return frame_id_build (avr_make_saddr (base), frame_pc_unwind (next_frame));
}
Index: src/gdb/cris-tdep.c
===================================================================
--- src.orig/gdb/cris-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/cris-tdep.c 2007-10-16 15:00:27.000000000 -0400
@@ -1338,8 +1338,7 @@ cris_scan_prologue (CORE_ADDR pc, struct
/* The SP was moved to the FP. This indicates that a new frame
was created. Get THIS frame's FP value by unwinding it from
the next frame. */
- frame_unwind_unsigned_register (next_frame, CRIS_FP_REGNUM,
- &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, CRIS_FP_REGNUM);
info->base = this_base;
info->saved_regs[CRIS_FP_REGNUM].addr = info->base;
@@ -1352,8 +1351,8 @@ cris_scan_prologue (CORE_ADDR pc, struct
ULONGEST this_base;
/* Assume that the FP is this frame's SP but with that pushed
stack space added back. */
- frame_unwind_unsigned_register (next_frame, gdbarch_sp_regnum (gdbarch),
- &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame,
+ gdbarch_sp_regnum (gdbarch));
info->base = this_base;
info->prev_sp = info->base + info->size;
}
@@ -1424,8 +1423,8 @@ crisv32_scan_prologue (CORE_ADDR pc, str
}
/* The SP is assumed to be unaltered. */
- frame_unwind_unsigned_register (next_frame, gdbarch_sp_regnum (gdbarch),
- &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame,
+ gdbarch_sp_regnum (gdbarch));
info->base = this_base;
info->prev_sp = this_base;
@@ -1470,8 +1469,8 @@ static CORE_ADDR
cris_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame,
- gdbarch_pc_regnum (gdbarch), &pc);
+ pc = frame_unwind_register_unsigned (next_frame,
+ gdbarch_pc_regnum (gdbarch));
return pc;
}
@@ -1479,8 +1478,8 @@ static CORE_ADDR
cris_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
{
ULONGEST sp;
- frame_unwind_unsigned_register (next_frame,
- gdbarch_sp_regnum (gdbarch), &sp);
+ sp = frame_unwind_register_unsigned (next_frame,
+ gdbarch_sp_regnum (gdbarch));
return sp;
}
Index: src/gdb/doc/gdbint.texinfo
===================================================================
--- src.orig/gdb/doc/gdbint.texinfo 2007-10-16 14:54:37.000000000 -0400
+++ src/gdb/doc/gdbint.texinfo 2007-10-16 14:54:56.000000000 -0400
@@ -3611,7 +3611,7 @@ is typically no more than:
@smallexample
ULONGEST pc;
-pc = frame_unwind_unsigned_register (next_frame, S390_PC_REGNUM);
+pc = frame_unwind_register_unsigned (next_frame, S390_PC_REGNUM);
return gdbarch_addr_bits_remove (gdbarch, pc);
@end smallexample
@@ -3628,7 +3628,7 @@ is typically no more than:
@smallexample
ULONGEST sp;
-sp = frame_unwind_unsigned_register (next_frame, S390_SP_REGNUM);
+sp = frame_unwind_register_unsigned (next_frame, S390_SP_REGNUM);
return gdbarch_addr_bits_remove (gdbarch, sp);
@end smallexample
Index: src/gdb/frame.c
===================================================================
--- src.orig/gdb/frame.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/frame.c 2007-10-16 14:59:26.000000000 -0400
@@ -678,17 +678,6 @@ get_frame_register_unsigned (struct fram
}
void
-frame_unwind_unsigned_register (struct frame_info *frame, int regnum,
- ULONGEST *val)
-{
- gdb_byte buf[MAX_REGISTER_SIZE];
- frame_unwind_register (frame, regnum, buf);
- (*val) = extract_unsigned_integer (buf,
- register_size (get_frame_arch (frame),
- regnum));
-}
-
-void
put_frame_register (struct frame_info *frame, int regnum,
const gdb_byte *buf)
{
@@ -1730,12 +1719,8 @@ frame_sp_unwind (struct frame_info *next
/* Now things are really are grim. Hope that the value returned by
the gdbarch_sp_regnum register is meaningful. */
if (gdbarch_sp_regnum (gdbarch) >= 0)
- {
- ULONGEST sp;
- frame_unwind_unsigned_register (next_frame,
- gdbarch_sp_regnum (gdbarch), &sp);
- return sp;
- }
+ return frame_unwind_register_unsigned (next_frame,
+ gdbarch_sp_regnum (gdbarch));
internal_error (__FILE__, __LINE__, _("Missing unwind SP method"));
}
Index: src/gdb/frame.h
===================================================================
--- src.orig/gdb/frame.h 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/frame.h 2007-10-16 14:58:42.000000000 -0400
@@ -476,10 +476,6 @@ extern ULONGEST get_frame_register_unsig
int regnum);
-/* Use frame_unwind_register_signed. */
-extern void frame_unwind_unsigned_register (struct frame_info *frame,
- int regnum, ULONGEST *val);
-
/* Get the value of the register that belongs to this FRAME. This
function is a wrapper to the call sequence ``frame_register_unwind
(get_next_frame (FRAME))''. As per frame_register_unwind(), if
Index: src/gdb/frv-tdep.c
===================================================================
--- src.orig/gdb/frv-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/frv-tdep.c 2007-10-16 14:58:32.000000000 -0400
@@ -938,9 +938,9 @@ frv_analyze_prologue (CORE_ADDR pc, stru
because instructions may save relative to the SP, but we need
their addresses relative to the FP. */
if (fp_set)
- frame_unwind_unsigned_register (next_frame, fp_regnum, &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, fp_regnum);
else
- frame_unwind_unsigned_register (next_frame, sp_regnum, &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, sp_regnum);
for (i = 0; i < 64; i++)
if (gr_saved[i])
Index: src/gdb/m68hc11-tdep.c
===================================================================
--- src.orig/gdb/m68hc11-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/m68hc11-tdep.c 2007-10-16 14:58:12.000000000 -0400
@@ -763,8 +763,7 @@ m68hc11_unwind_pc (struct gdbarch *gdbar
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame, gdbarch_pc_regnum (gdbarch),
- &pc);
+ pc = frame_unwind_register_unsigned (next_frame, gdbarch_pc_regnum (gdbarch));
return pc;
}
@@ -799,7 +798,7 @@ m68hc11_frame_unwind_cache (struct frame
/* The SP was moved to the FP. This indicates that a new frame
was created. Get THIS frame's FP value by unwinding it from
the next frame. */
- frame_unwind_unsigned_register (next_frame, SOFT_FP_REGNUM, &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, SOFT_FP_REGNUM);
if (this_base == 0)
{
info->base = 0;
@@ -815,7 +814,7 @@ m68hc11_frame_unwind_cache (struct frame
if (info->sp_offset != (CORE_ADDR) -1)
{
info->saved_regs[HARD_PC_REGNUM].addr = info->sp_offset;
- frame_unwind_unsigned_register (next_frame, HARD_SP_REGNUM, &this_base);
+ this_base = frame_unwind_register_unsigned (next_frame, HARD_SP_REGNUM);
prev_sp = this_base + info->sp_offset + 2;
this_base += STACK_CORRECTION;
}
@@ -980,7 +979,7 @@ static CORE_ADDR
m68hc11_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
{
ULONGEST sp;
- frame_unwind_unsigned_register (next_frame, HARD_SP_REGNUM, &sp);
+ sp = frame_unwind_register_unsigned (next_frame, HARD_SP_REGNUM);
return sp;
}
@@ -995,7 +994,7 @@ m68hc11_unwind_dummy_id (struct gdbarch
ULONGEST tos;
CORE_ADDR pc = frame_pc_unwind (next_frame);
- frame_unwind_unsigned_register (next_frame, SOFT_FP_REGNUM, &tos);
+ tos = frame_unwind_register_unsigned (next_frame, SOFT_FP_REGNUM);
tos += 2;
return frame_id_build (tos, pc);
}
Index: src/gdb/mn10300-tdep.c
===================================================================
--- src.orig/gdb/mn10300-tdep.c 2007-10-16 14:55:44.000000000 -0400
+++ src/gdb/mn10300-tdep.c 2007-10-16 14:57:14.000000000 -0400
@@ -934,7 +934,7 @@ mn10300_unwind_pc (struct gdbarch *gdbar
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame, E_PC_REGNUM, &pc);
+ pc = frame_unwind_register_unsigned (next_frame, E_PC_REGNUM);
return pc;
}
@@ -943,7 +943,7 @@ mn10300_unwind_sp (struct gdbarch *gdbar
{
ULONGEST sp;
- frame_unwind_unsigned_register (next_frame, E_SP_REGNUM, &sp);
+ sp = frame_unwind_register_unsigned (next_frame, E_SP_REGNUM);
return sp;
}
Index: src/gdb/mt-tdep.c
===================================================================
--- src.orig/gdb/mt-tdep.c 2007-10-16 14:55:23.000000000 -0400
+++ src/gdb/mt-tdep.c 2007-10-16 14:56:51.000000000 -0400
@@ -895,8 +895,8 @@ mt_frame_unwind_cache (struct frame_info
/* Grab the frame-relative values of SP and FP, needed below.
The frame_saved_register function will find them on the
stack or in the registers as appropriate. */
- frame_unwind_unsigned_register (next_frame, MT_SP_REGNUM, &sp);
- frame_unwind_unsigned_register (next_frame, MT_FP_REGNUM, &fp);
+ sp = frame_unwind_register_unsigned (next_frame, MT_SP_REGNUM);
+ fp = frame_unwind_register_unsigned (next_frame, MT_FP_REGNUM);
start_addr = frame_func_unwind (next_frame, NORMAL_FRAME);
@@ -1012,7 +1012,7 @@ mt_unwind_pc (struct gdbarch *gdbarch, s
{
ULONGEST pc;
- frame_unwind_unsigned_register (next_frame, MT_PC_REGNUM, &pc);
+ pc = frame_unwind_register_unsigned (next_frame, MT_PC_REGNUM);
return pc;
}
@@ -1021,7 +1021,7 @@ mt_unwind_sp (struct gdbarch *gdbarch, s
{
ULONGEST sp;
- frame_unwind_unsigned_register (next_frame, MT_SP_REGNUM, &sp);
+ sp = frame_unwind_register_unsigned (next_frame, MT_SP_REGNUM);
return sp;
}