From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24389 invoked by alias); 18 May 2008 20:13:27 -0000 Received: (qmail 24381 invoked by uid 22791); 18 May 2008 20:13:26 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate6.de.ibm.com (HELO mtagate6.de.ibm.com) (195.212.29.155) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 18 May 2008 20:13:00 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate6.de.ibm.com (8.13.8/8.13.8) with ESMTP id m4IKBwVD407052 for ; Sun, 18 May 2008 20:11:58 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m4IKBw4l3178748 for ; Sun, 18 May 2008 22:11:58 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m4IKBwv6029442 for ; Sun, 18 May 2008 22:11:58 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id m4IKBwY3029439; Sun, 18 May 2008 22:11:58 +0200 Message-Id: <200805182011.m4IKBwY3029439@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Sun, 18 May 2008 22:11:58 +0200 Subject: Re: [commit] update alpha-osf to new value-based unwinding To: brobecker@adacore.com (Joel Brobecker) Date: Mon, 19 May 2008 13:27:00 -0000 From: "Ulrich Weigand" Cc: gdb-patches@sourceware.org In-Reply-To: <20080509040337.GB15397@adacore.com> from "Joel Brobecker" at May 08, 2008 09:03:37 PM X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-05/txt/msg00545.txt.bz2 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