From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29415 invoked by alias); 22 Apr 2002 09:40:30 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29406 invoked from network); 22 Apr 2002 09:40:29 -0000 Received: from unknown (HELO pizda.ninka.net) (216.101.162.242) by sources.redhat.com with SMTP; 22 Apr 2002 09:40:29 -0000 Received: from localhost (IDENT:davem@localhost.localdomain [127.0.0.1]) by pizda.ninka.net (8.9.3/8.9.3) with ESMTP id CAA04677 for ; Mon, 22 Apr 2002 02:31:27 -0700 Date: Mon, 22 Apr 2002 02:40:00 -0000 Message-Id: <20020422.023127.101567315.davem@redhat.com> To: gdb-patches@sources.redhat.com Subject: [RFA] Multi-arch DECR_PC_AFTER_HW_BREAKPOINT From: "David S. Miller" Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-04/txt/msg00776.txt.bz2 It's cousin, DECR_PC_AFTER_BREAKPOINT, was already multi-arched and judging by its' usage I see no reason why it wasn't multi-arched already. Ok to install? 2002-04-22 David S. Miller * target.h (DECR_PC_AFTER_HW_BREAK): Delete definition. * gdbarch.sh: Add DECR_PC_AFTER_HW_BREAK. * gdbarch.c, gdbarch.h: Regenerate. --- ./gdbarch.c.~1~ Mon Apr 22 02:12:35 2002 +++ ./gdbarch.c Mon Apr 22 02:34:39 2002 @@ -225,6 +225,7 @@ struct gdbarch gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint; gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint; CORE_ADDR decr_pc_after_break; + CORE_ADDR decr_pc_after_break; gdbarch_prepare_to_proceed_ftype *prepare_to_proceed; CORE_ADDR function_start_offset; gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address; @@ -399,6 +400,7 @@ struct gdbarch startup_gdbarch = 0, 0, 0, + 0, generic_in_function_epilogue_p, construct_inferior_arguments, 0, @@ -506,6 +508,7 @@ gdbarch_alloc (const struct gdbarch_info current_gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint; current_gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint; current_gdbarch->decr_pc_after_break = -1; + current_gdbarch->decr_pc_after_break = -1; current_gdbarch->prepare_to_proceed = default_prepare_to_proceed; current_gdbarch->function_start_offset = -1; current_gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address; @@ -722,6 +725,9 @@ verify_gdbarch (struct gdbarch *gdbarch) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->decr_pc_after_break == -1)) fprintf_unfiltered (log, "\n\tdecr_pc_after_break"); + if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) + && (gdbarch->decr_pc_after_break == -1)) + fprintf_unfiltered (log, "\n\tdecr_pc_after_break"); /* Skip verify of prepare_to_proceed, invalid_p == 0 */ if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && (gdbarch->function_start_offset == -1)) @@ -1024,6 +1030,14 @@ gdbarch_dump (struct gdbarch *gdbarch, s "gdbarch_dump: DECR_PC_AFTER_BREAK = %ld\n", (long) DECR_PC_AFTER_BREAK); #endif +#ifdef DECR_PC_AFTER_HW_BREAK + fprintf_unfiltered (file, + "gdbarch_dump: DECR_PC_AFTER_HW_BREAK # %s\n", + XSTRING (DECR_PC_AFTER_HW_BREAK)); + fprintf_unfiltered (file, + "gdbarch_dump: DECR_PC_AFTER_HW_BREAK = %ld\n", + (long) DECR_PC_AFTER_HW_BREAK); +#endif #ifdef DO_REGISTERS_INFO #if GDB_MULTI_ARCH /* Macro might contain `[{}]' when not multi-arch */ @@ -3918,6 +3932,24 @@ set_gdbarch_memory_remove_breakpoint (st gdbarch_memory_remove_breakpoint_ftype memory_remove_breakpoint) { gdbarch->memory_remove_breakpoint = memory_remove_breakpoint; +} + +CORE_ADDR +gdbarch_decr_pc_after_break (struct gdbarch *gdbarch) +{ + if (gdbarch->decr_pc_after_break == -1) + internal_error (__FILE__, __LINE__, + "gdbarch: gdbarch_decr_pc_after_break invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_decr_pc_after_break called\n"); + return gdbarch->decr_pc_after_break; +} + +void +set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, + CORE_ADDR decr_pc_after_break) +{ + gdbarch->decr_pc_after_break = decr_pc_after_break; } CORE_ADDR --- ./target.h.~1~ Thu Apr 18 11:09:06 2002 +++ ./target.h Mon Apr 22 02:32:14 2002 @@ -1091,13 +1091,6 @@ extern void (*target_new_objfile_hook) ( #define target_stopped_data_address() 0 #endif -/* If defined, then we need to decr pc by this much after a hardware break- - point. Presumably this overrides DECR_PC_AFTER_BREAK... */ - -#ifndef DECR_PC_AFTER_HW_BREAK -#define DECR_PC_AFTER_HW_BREAK 0 -#endif - /* Sometimes gdb may pick up what appears to be a valid target address from a minimal symbol, but the value really means, essentially, "This is an index into a table which is populated when the inferior --- ./gdbarch.h.~1~ Mon Apr 22 02:11:55 2002 +++ ./gdbarch.h Mon Apr 22 02:33:58 2002 @@ -1762,6 +1762,17 @@ extern void set_gdbarch_decr_pc_after_br #endif #endif +extern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch); +extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break); +#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DECR_PC_AFTER_HW_BREAK) +#error "Non multi-arch definition of DECR_PC_AFTER_HW_BREAK" +#endif +#if GDB_MULTI_ARCH +#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DECR_PC_AFTER_HW_BREAK) +#define DECR_PC_AFTER_HW_BREAK (gdbarch_decr_pc_after_break (current_gdbarch)) +#endif +#endif + /* Default (function) for non- multi-arch platforms. */ #if (!GDB_MULTI_ARCH) && !defined (PREPARE_TO_PROCEED) #define PREPARE_TO_PROCEED(select_it) (default_prepare_to_proceed (select_it)) --- ./gdbarch.sh.~1~ Mon Apr 22 02:11:27 2002 +++ ./gdbarch.sh Mon Apr 22 02:32:01 2002 @@ -552,6 +552,7 @@ f:2:BREAKPOINT_FROM_PC:const unsigned ch f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint::0 f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint::0 v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1 +v:2:DECR_PC_AFTER_HW_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1 f::PREPARE_TO_PROCEED:int:prepare_to_proceed:int select_it:select_it::0:default_prepare_to_proceed::0 v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1 #