From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1389 invoked by alias); 7 Jun 2007 21:00:43 -0000 Received: (qmail 1374 invoked by uid 22791); 7 Jun 2007 21:00:42 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate7.de.ibm.com (HELO mtagate7.de.ibm.com) (195.212.29.156) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 07 Jun 2007 21:00:39 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate7.de.ibm.com (8.13.8/8.13.8) with ESMTP id l57L0a9Q450990 for ; Thu, 7 Jun 2007 21:00:36 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.3) with ESMTP id l57L0aB03964976 for ; Thu, 7 Jun 2007 23:00:36 +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 l57L0aEQ020928 for ; Thu, 7 Jun 2007 23:00:36 +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 l57L0aZW020925 for ; Thu, 7 Jun 2007 23:00:36 +0200 Message-Id: <200706072100.l57L0aZW020925@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Thu, 7 Jun 2007 23:00:36 +0200 Subject: [rfc][10/13] Eliminate read_register: Uses in get_longjmp_target callbacks To: gdb-patches@sourceware.org Date: Thu, 07 Jun 2007 21:00:00 -0000 From: "Ulrich Weigand" 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: 2007-06/txt/msg00089.txt.bz2 Hello, yet another gdbarch callback that was missing a FRAME argument: gdbarch_get_longjmp_target. Bye, Ulrich ChangeLog: * gdbarch.sh (get_longjmp_target): Add FRAME argument. * gdbarch.c, gdbarch.h: Regenerate. * infrun.c (handle_inferior_event): Pass current frame to gdbarch_get_longjmp_target. * alpha-tdep.c (alpha_get_longjmp_target): Add FRAME argument. Read registers from FRAME instead of using read_register. Use get_frame_arch instead of current_gdbarch. * arm-tdep.c (arm_get_longjmp_target): Likewise. * i386-tdep.c (i386_get_longjmp_target): Likewise. * m68k-tdep.c (m68k_get_longjmp_target): Likewise. * mips-linux-tdep.c (mips_linux_get_longjmp_target): Likewise. (mips64_linux_get_longjmp_target): Likewise. * mipsnbsd-tdep.c (mipsnbsd_get_longjmp_target): Likewise. diff -urNp gdb-orig/gdb/alpha-tdep.c gdb-head/gdb/alpha-tdep.c --- gdb-orig/gdb/alpha-tdep.c 2007-06-06 19:00:38.582876051 +0200 +++ gdb-head/gdb/alpha-tdep.c 2007-06-06 19:41:52.175676662 +0200 @@ -723,13 +723,13 @@ alpha_skip_prologue (CORE_ADDR pc) into the "pc". This routine returns true on success. */ static int -alpha_get_longjmp_target (CORE_ADDR *pc) +alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame)); CORE_ADDR jb_addr; gdb_byte raw_buffer[ALPHA_REGISTER_SIZE]; - jb_addr = read_register (ALPHA_A0_REGNUM); + jb_addr = get_frame_register_unsigned (frame, ALPHA_A0_REGNUM); if (target_read_memory (jb_addr + (tdep->jb_pc * tdep->jb_elt_size), raw_buffer, tdep->jb_elt_size)) diff -urNp gdb-orig/gdb/arm-tdep.c gdb-head/gdb/arm-tdep.c --- gdb-orig/gdb/arm-tdep.c 2007-06-06 19:41:42.570594779 +0200 +++ gdb-head/gdb/arm-tdep.c 2007-06-06 19:41:52.184675367 +0200 @@ -2335,13 +2335,13 @@ arm_return_value (struct gdbarch *gdbarc static int -arm_get_longjmp_target (CORE_ADDR *pc) +arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { CORE_ADDR jb_addr; char buf[INT_REGISTER_SIZE]; - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame)); - jb_addr = read_register (ARM_A1_REGNUM); + jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM); if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf, INT_REGISTER_SIZE)) diff -urNp gdb-orig/gdb/gdbarch.c gdb-head/gdb/gdbarch.c --- gdb-orig/gdb/gdbarch.c 2007-06-06 19:41:42.591591757 +0200 +++ gdb-head/gdb/gdbarch.c 2007-06-06 19:41:52.247666304 +0200 @@ -2324,13 +2324,13 @@ gdbarch_get_longjmp_target_p (struct gdb } int -gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc) +gdbarch_get_longjmp_target (struct gdbarch *gdbarch, struct frame_info *frame, CORE_ADDR *pc) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->get_longjmp_target != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_get_longjmp_target called\n"); - return gdbarch->get_longjmp_target (pc); + return gdbarch->get_longjmp_target (frame, pc); } void diff -urNp gdb-orig/gdb/gdbarch.h gdb-head/gdb/gdbarch.h --- gdb-orig/gdb/gdbarch.h 2007-06-06 19:41:42.635585427 +0200 +++ gdb-head/gdb/gdbarch.h 2007-06-06 19:43:23.402371362 +0200 @@ -540,8 +540,8 @@ extern void set_gdbarch_cannot_store_reg extern int gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch); -typedef int (gdbarch_get_longjmp_target_ftype) (CORE_ADDR *pc); -extern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc); +typedef int (gdbarch_get_longjmp_target_ftype) (struct frame_info *frame, CORE_ADDR *pc); +extern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, struct frame_info *frame, CORE_ADDR *pc); extern void set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch, gdbarch_get_longjmp_target_ftype *get_longjmp_target); extern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch); diff -urNp gdb-orig/gdb/gdbarch.sh gdb-head/gdb/gdbarch.sh --- gdb-orig/gdb/gdbarch.sh 2007-06-06 19:41:42.644584132 +0200 +++ gdb-head/gdb/gdbarch.sh 2007-06-06 19:42:32.611970794 +0200 @@ -484,7 +484,7 @@ F:=:int:register_bytes_ok:long nr_bytes: f::int:cannot_fetch_register:int regnum:regnum::cannot_register_not::0 f::int:cannot_store_register:int regnum:regnum::cannot_register_not::0 # setjmp/longjmp support. -F::int:get_longjmp_target:CORE_ADDR *pc:pc +F::int:get_longjmp_target:struct frame_info *frame, CORE_ADDR *pc:frame, pc # v:=:int:believe_pcc_promotion::::::: # diff -urNp gdb-orig/gdb/i386-tdep.c gdb-head/gdb/i386-tdep.c --- gdb-orig/gdb/i386-tdep.c 2007-06-04 22:23:07.000000000 +0200 +++ gdb-head/gdb/i386-tdep.c 2007-06-06 19:41:52.372648320 +0200 @@ -1266,11 +1266,11 @@ i386_unwind_dummy_id (struct gdbarch *gd This function is 64-bit safe. */ static int -i386_get_longjmp_target (CORE_ADDR *pc) +i386_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { gdb_byte buf[8]; CORE_ADDR sp, jb_addr; - int jb_pc_offset = gdbarch_tdep (current_gdbarch)->jb_pc_offset; + int jb_pc_offset = gdbarch_tdep (get_frame_arch (frame))->jb_pc_offset; int len = TYPE_LENGTH (builtin_type_void_func_ptr); /* If JB_PC_OFFSET is -1, we have no way to find out where the @@ -1280,7 +1280,7 @@ i386_get_longjmp_target (CORE_ADDR *pc) /* Don't use I386_ESP_REGNUM here, since this function is also used for AMD64. */ - regcache_cooked_read (current_regcache, SP_REGNUM, buf); + get_frame_register (frame, SP_REGNUM, buf); sp = extract_typed_address (buf, builtin_type_void_data_ptr); if (target_read_memory (sp + len, buf, len)) return 0; diff -urNp gdb-orig/gdb/infrun.c gdb-head/gdb/infrun.c --- gdb-orig/gdb/infrun.c 2007-06-06 19:41:42.689577658 +0200 +++ gdb-head/gdb/infrun.c 2007-06-06 19:44:02.312620691 +0200 @@ -2076,7 +2076,8 @@ process_event_stop_test: remove_breakpoints (); breakpoints_inserted = 0; if (!gdbarch_get_longjmp_target_p (current_gdbarch) - || !gdbarch_get_longjmp_target (current_gdbarch, &jmp_buf_pc)) + || !gdbarch_get_longjmp_target (current_gdbarch, + get_current_frame (), &jmp_buf_pc)) { keep_going (ecs); return; diff -urNp gdb-orig/gdb/m68k-tdep.c gdb-head/gdb/m68k-tdep.c --- gdb-orig/gdb/m68k-tdep.c 2007-06-04 22:23:07.000000000 +0200 +++ gdb-head/gdb/m68k-tdep.c 2007-06-06 19:41:52.438638825 +0200 @@ -961,11 +961,11 @@ m68k_unwind_dummy_id (struct gdbarch *gd This routine returns true on success. */ static int -m68k_get_longjmp_target (CORE_ADDR *pc) +m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { gdb_byte *buf; CORE_ADDR sp, jb_addr; - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame)); if (tdep->jb_pc < 0) { @@ -975,7 +975,7 @@ m68k_get_longjmp_target (CORE_ADDR *pc) } buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT); - sp = read_register (SP_REGNUM); + sp = get_frame_register_unsigned (frame, SP_REGNUM); if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack */ buf, TARGET_PTR_BIT / TARGET_CHAR_BIT)) diff -urNp gdb-orig/gdb/mips-linux-tdep.c gdb-head/gdb/mips-linux-tdep.c --- gdb-orig/gdb/mips-linux-tdep.c 2007-06-04 22:23:07.000000000 +0200 +++ gdb-head/gdb/mips-linux-tdep.c 2007-06-06 19:41:52.444637962 +0200 @@ -51,12 +51,12 @@ static struct target_so_ops mips_svr4_so #define MIPS_LINUX_JB_PC 0 static int -mips_linux_get_longjmp_target (CORE_ADDR *pc) +mips_linux_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { CORE_ADDR jb_addr; char buf[TARGET_PTR_BIT / TARGET_CHAR_BIT]; - jb_addr = read_register (MIPS_A0_REGNUM); + jb_addr = get_frame_register_unsigned (frame, MIPS_A0_REGNUM); if (target_read_memory (jb_addr + MIPS_LINUX_JB_PC * MIPS_LINUX_JB_ELEMENT_SIZE, @@ -242,13 +242,13 @@ mips_fill_fpregset (const struct regcach #define MIPS64_LINUX_JB_PC 0 static int -mips64_linux_get_longjmp_target (CORE_ADDR *pc) +mips64_linux_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { CORE_ADDR jb_addr; void *buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT); int element_size = TARGET_PTR_BIT == 32 ? 4 : 8; - jb_addr = read_register (MIPS_A0_REGNUM); + jb_addr = get_frame_register_unsigned (frame, MIPS_A0_REGNUM); if (target_read_memory (jb_addr + MIPS64_LINUX_JB_PC * element_size, buf, TARGET_PTR_BIT / TARGET_CHAR_BIT)) diff -urNp gdb-orig/gdb/mipsnbsd-tdep.c gdb-head/gdb/mipsnbsd-tdep.c --- gdb-orig/gdb/mipsnbsd-tdep.c 2007-06-04 22:23:07.000000000 +0200 +++ gdb-head/gdb/mipsnbsd-tdep.c 2007-06-06 19:41:52.449637242 +0200 @@ -284,14 +284,14 @@ mipsnbsd_sigtramp_offset (struct frame_i NBSD_MIPS_JB_ELEMENT_SIZE) static int -mipsnbsd_get_longjmp_target (CORE_ADDR *pc) +mipsnbsd_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) { CORE_ADDR jb_addr; char *buf; buf = alloca (NBSD_MIPS_JB_ELEMENT_SIZE); - jb_addr = read_register (MIPS_A0_REGNUM); + jb_addr = get_frame_register_unsigned (frame, MIPS_A0_REGNUM); if (target_read_memory (jb_addr + NBSD_MIPS_JB_OFFSET, buf, NBSD_MIPS_JB_ELEMENT_SIZE)) -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com