From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: brobecker@adacore.com (Joel Brobecker)
Cc: gdb-patches@sourceware.org
Subject: Re: [commit] update alpha-osf to new value-based unwinding
Date: Mon, 19 May 2008 13:27:00 -0000 [thread overview]
Message-ID: <200805182011.m4IKBwY3029439@d12av02.megacenter.de.ibm.com> (raw)
In-Reply-To: <20080509040337.GB15397@adacore.com> from "Joel Brobecker" at May 08, 2008 09:03:37 PM
Joel Brobecker wrote:
> I just committed the following patch to update the alpha-osf port
> to the new value-based unwinding approach. I couldn't test it with
> the testsuite because, for some reason, I can't make dejagnu/expect
> /tcl work anymore. So I used AdaCore's GDB testsuite instead.
If you have a way of testing on that platform, would you mind
testing the following patch? This switches alpha-mdebug-tdep.c
to use trad-frame instead of relying SIZEOF_FRAME_SAVED_REGS;
if this is in, we can finally get rid of that macro ...
Thanks,
Ulrich
ChangeLog:
* alpha-mdebug-tdep.c: Include "trad-frame.h".
(struct alpha_mdebug_unwind_cache): Change type of SAVED_REGS to
struct trad_frame_saved_reg *.
(alpha_mdebug_frame_unwind_cache): Allocate SAVED_REGS using
trad_frame_alloc_saved_regs. Update accesses. Record previous
value of SP as being vfp.
(alpha_mdebug_frame_prev_register): Use trad_frame_get_prev_register.
* Makefile.in (alpha-mdebug-tdep.o): Update dependencies.
diff -urNp gdb-orig/gdb/alpha-mdebug-tdep.c gdb-head/gdb/alpha-mdebug-tdep.c
--- gdb-orig/gdb/alpha-mdebug-tdep.c 2008-05-16 22:36:17.000000000 +0200
+++ gdb-head/gdb/alpha-mdebug-tdep.c 2008-05-16 23:55:38.000000000 +0200
@@ -26,6 +26,7 @@
#include "block.h"
#include "gdb_assert.h"
#include "gdb_string.h"
+#include "trad-frame.h"
#include "alpha-tdep.h"
#include "mdebugread.h"
@@ -170,7 +171,7 @@ struct alpha_mdebug_unwind_cache
{
struct mdebug_extra_func_info *proc_desc;
CORE_ADDR vfp;
- CORE_ADDR *saved_regs;
+ struct trad_frame_saved_reg *saved_regs;
};
/* Extract all of the information about the frame from PROC_DESC
@@ -201,7 +202,7 @@ alpha_mdebug_frame_unwind_cache (struct
info->proc_desc = proc_desc;
gdb_assert (proc_desc != NULL);
- info->saved_regs = frame_obstack_zalloc (SIZEOF_FRAME_SAVED_REGS);
+ info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
/* The VFP of the frame is at FRAME_REG+FRAME_OFFSET. */
vfp = get_frame_register_unsigned (this_frame, PROC_FRAME_REG (proc_desc));
@@ -221,14 +222,14 @@ alpha_mdebug_frame_unwind_cache (struct
/* Clear bit for RA so we don't save it again later. */
mask &= ~(1 << returnreg);
- info->saved_regs[returnreg] = reg_position;
+ info->saved_regs[returnreg].addr = reg_position;
reg_position += 8;
}
for (ireg = 0; ireg <= 31; ++ireg)
if (mask & (1 << ireg))
{
- info->saved_regs[ireg] = reg_position;
+ info->saved_regs[ireg].addr = reg_position;
reg_position += 8;
}
@@ -238,10 +239,15 @@ alpha_mdebug_frame_unwind_cache (struct
for (ireg = 0; ireg <= 31; ++ireg)
if (mask & (1 << ireg))
{
- info->saved_regs[ALPHA_FP0_REGNUM + ireg] = reg_position;
+ info->saved_regs[ALPHA_FP0_REGNUM + ireg].addr = reg_position;
reg_position += 8;
}
+ /* The stack pointer of the previous frame is computed by popping
+ the current stack frame. */
+ if (!trad_frame_addr_p (info->saved_regs, ALPHA_SP_REGNUM))
+ trad_frame_set_value (info->saved_regs, ALPHA_SP_REGNUM, vfp);
+
return info;
}
@@ -274,19 +280,7 @@ alpha_mdebug_frame_prev_register (struct
if (regnum == ALPHA_PC_REGNUM)
regnum = PROC_PC_REG (info->proc_desc);
- /* For all registers known to be saved in the current frame,
- do the obvious and pull the value out. */
- if (info->saved_regs[regnum])
- return frame_unwind_got_memory (this_frame, regnum,
- info->saved_regs[regnum]);
-
- /* The stack pointer of the previous frame is computed by popping
- the current stack frame. */
- if (regnum == ALPHA_SP_REGNUM)
- return frame_unwind_got_constant (this_frame, regnum, info->vfp);
-
- /* Otherwise assume the next frame has the same register value. */
- return frame_unwind_got_register (this_frame, regnum, regnum);
+ return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
}
static int
diff -urNp gdb-orig/gdb/Makefile.in gdb-head/gdb/Makefile.in
--- gdb-orig/gdb/Makefile.in 2008-05-16 22:36:17.000000000 +0200
+++ gdb-head/gdb/Makefile.in 2008-05-16 23:52:56.000000000 +0200
@@ -1862,8 +1862,8 @@ alpha-linux-tdep.o: alpha-linux-tdep.c $
$(regcache_h) $(alpha_tdep_h)
alpha-mdebug-tdep.o: alpha-mdebug-tdep.c $(defs_h) $(frame_h) \
$(frame_unwind_h) $(frame_base_h) $(symtab_h) $(gdbcore_h) \
- $(block_h) $(gdb_assert_h) $(gdb_string_h) $(alpha_tdep_h) \
- $(mdebugread_h)
+ $(block_h) $(gdb_assert_h) $(gdb_string_h) $(trad_frame_h) \
+ $(alpha_tdep_h) $(mdebugread_h)
alpha-nat.o: alpha-nat.c $(defs_h) $(gdb_string_h) $(inferior_h) \
$(gdbcore_h) $(target_h) $(regcache_h) $(alpha_tdep_h) $(gregset_h)
alphanbsd-tdep.o: alphanbsd-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
next prev parent reply other threads:[~2008-05-18 20:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-09 8:18 Joel Brobecker
2008-05-09 12:08 ` Joel Brobecker
2008-05-19 13:27 ` Ulrich Weigand [this message]
2008-05-21 14:49 ` Joel Brobecker
2008-05-21 18:00 ` Ulrich Weigand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200805182011.m4IKBwY3029439@d12av02.megacenter.de.ibm.com \
--to=uweigand@de.ibm.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox