From 932539e3ab93db990ef61c80bbf78a4f2fdcc60b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 20 May 2014 18:24:27 +0100 Subject: [PATCH] [GDBserver] Move Z packet defines and type convertion routines to shared code. The Aarch64, MIPS and x86 Linux backends all have Z packet number defines and corresponding protocol number to internal type convertion routines. Factor them all out to gdbserver's core code, so we only have one shared copy. Tested on x86_64 Fedora 20, and also cross built for aarch64-linux-gnu and mips-linux-gnu. gdb/gdbserver/ 2014-05-20 Pedro Alves * mem-break.h: Include break-common.h. (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): New defines. (Z_packet_to_target_hw_bp_type): New declaration. * mem-break.c (Z_packet_to_target_hw_bp_type): New function. * i386-low.c (Z_PACKET_HW_BP, Z_PACKET_WRITE_WP, Z_PACKET_READ_WP) (Z_PACKET_ACCESS_WP): Delete macros. (Z_packet_to_hw_type): Delete function. * i386-low.h: Don't include break-common.h here. (Z_packet_to_hw_type): Delete declaration. * linux-x86-low.c (x86_insert_point, x86_insert_point): Call Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. * win32-i386-low.c (i386_insert_point, i386_remove_point): Call Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. * linux-aarch64-low.c: Don't include break-common.h here. (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): Delete macros. (Z_packet_to_target_hw_bp_type): Delete function. * linux-mips-low.c (rsp_bp_type_to_target_hw_bp_type): Delete function. (mips_insert_point, mips_remove_point): Use Z_packet_to_target_hw_bp_type. --- gdb/gdbserver/ChangeLog | 25 +++++++++++++++++++++++++ gdb/gdbserver/i386-low.c | 23 ----------------------- gdb/gdbserver/i386-low.h | 6 ------ gdb/gdbserver/linux-aarch64-low.c | 28 ---------------------------- gdb/gdbserver/linux-mips-low.c | 22 ++-------------------- gdb/gdbserver/linux-x86-low.c | 4 ++-- gdb/gdbserver/mem-break.c | 18 ++++++++++++++++++ gdb/gdbserver/mem-break.h | 13 +++++++++++++ gdb/gdbserver/win32-i386-low.c | 4 ++-- 9 files changed, 62 insertions(+), 81 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index ef54cf95751..dd80a6da23c 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,28 @@ +2014-05-20 Pedro Alves + + * mem-break.h: Include break-common.h. + (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) + (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): New defines. + (Z_packet_to_target_hw_bp_type): New declaration. + * mem-break.c (Z_packet_to_target_hw_bp_type): New function. + * i386-low.c (Z_PACKET_HW_BP, Z_PACKET_WRITE_WP, Z_PACKET_READ_WP) + (Z_PACKET_ACCESS_WP): Delete macros. + (Z_packet_to_hw_type): Delete function. + * i386-low.h: Don't include break-common.h here. + (Z_packet_to_hw_type): Delete declaration. + * linux-x86-low.c (x86_insert_point, x86_insert_point): Call + Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. + * win32-i386-low.c (i386_insert_point, i386_remove_point): Call + Z_packet_to_target_hw_bp_type instead of Z_packet_to_hw_type. + * linux-aarch64-low.c: Don't include break-common.h here. + (Z_PACKET_SW_BP, Z_PACKET_HW_BP, Z_PACKET_WRITE_WP) + (Z_PACKET_READ_WP, Z_PACKET_ACCESS_WP): Delete macros. + (Z_packet_to_target_hw_bp_type): Delete function. + * linux-mips-low.c (rsp_bp_type_to_target_hw_bp_type): Delete + function. + (mips_insert_point, mips_remove_point): Use + Z_packet_to_target_hw_bp_type. + 2014-05-20 Pedro Alves * linux-aarch64-low.c: Include break-common.h. diff --git a/gdb/gdbserver/i386-low.c b/gdb/gdbserver/i386-low.c index 03eebd1b761..de2d11a4555 100644 --- a/gdb/gdbserver/i386-low.c +++ b/gdb/gdbserver/i386-low.c @@ -402,29 +402,6 @@ Invalid value %d of operation in i386_handle_nonaligned_watchpoint.\n", return retval; } -#define Z_PACKET_HW_BP '1' -#define Z_PACKET_WRITE_WP '2' -#define Z_PACKET_READ_WP '3' -#define Z_PACKET_ACCESS_WP '4' - -enum target_hw_bp_type -Z_packet_to_hw_type (char type) -{ - switch (type) - { - case Z_PACKET_HW_BP: - return hw_execute; - case Z_PACKET_WRITE_WP: - return hw_write; - case Z_PACKET_READ_WP: - return hw_read; - case Z_PACKET_ACCESS_WP: - return hw_access; - default: - fatal ("Z_packet_to_hw_type: bad watchpoint type %c", type); - } -} - /* Update the inferior debug registers state, in INF_STATE, with the new debug registers state, in NEW_STATE. */ diff --git a/gdb/gdbserver/i386-low.h b/gdb/gdbserver/i386-low.h index d91c90ac776..8d8e73fceb2 100644 --- a/gdb/gdbserver/i386-low.h +++ b/gdb/gdbserver/i386-low.h @@ -29,12 +29,6 @@ counts, and allow to watch regions up to 16 bytes long (32 bytes on 64 bit hosts). */ -#include "break-common.h" - -/* Map the protocol watchpoint type TYPE to enum target_hw_bp_type. */ - -enum target_hw_bp_type Z_packet_to_hw_type (char type); - /* Debug registers' indices. */ #define DR_FIRSTADDR 0 #define DR_LASTADDR 3 diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index 8b32d793661..7e425c9d166 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -29,7 +29,6 @@ #include #include "gdb_proc_service.h" -#include "break-common.h" /* Defined in auto-generated files. */ void init_registers_aarch64 (void); @@ -209,33 +208,6 @@ struct arch_lwp_info static int aarch64_num_bp_regs; static int aarch64_num_wp_regs; -#define Z_PACKET_SW_BP '0' -#define Z_PACKET_HW_BP '1' -#define Z_PACKET_WRITE_WP '2' -#define Z_PACKET_READ_WP '3' -#define Z_PACKET_ACCESS_WP '4' - -/* Map the protocol breakpoint/watchpoint type TYPE to enum - target_hw_bp_type. */ - -static enum target_hw_bp_type -Z_packet_to_target_hw_bp_type (char type) -{ - switch (type) - { - case Z_PACKET_HW_BP: - return hw_execute; - case Z_PACKET_WRITE_WP: - return hw_write; - case Z_PACKET_READ_WP: - return hw_read; - case Z_PACKET_ACCESS_WP: - return hw_access; - default: - fatal ("bad watchpoint type %c", type); - } -} - static int aarch64_cannot_store_register (int regno) { diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c index 5a24bfeccdf..112448c44eb 100644 --- a/gdb/gdbserver/linux-mips-low.c +++ b/gdb/gdbserver/linux-mips-low.c @@ -372,24 +372,6 @@ mips_linux_prepare_to_resume (struct lwp_info *lwp) } } -/* Translate breakpoint type TYPE in rsp to 'enum target_hw_bp_type'. */ - -static enum target_hw_bp_type -rsp_bp_type_to_target_hw_bp_type (char type) -{ - switch (type) - { - case '2': - return hw_write; - case '3': - return hw_read; - case '4': - return hw_access; - } - - gdb_assert_not_reached ("unhandled RSP breakpoint type"); -} - /* This is the implementation of linux_target_ops method insert_point. */ @@ -434,7 +416,7 @@ mips_insert_point (char type, CORE_ADDR addr, int len) mips_linux_watch_populate_regs (private->current_watches, ®s); /* Now try to add the new watch. */ - watch_type = rsp_bp_type_to_target_hw_bp_type (type); + watch_type = Z_packet_to_target_hw_bp_type (type); irw = mips_linux_watch_type_to_irw (watch_type); if (!mips_linux_watch_try_one_watch (®s, addr, len, irw)) return -1; @@ -490,7 +472,7 @@ mips_remove_point (char type, CORE_ADDR addr, int len) } /* Search for a known watch that matches. Then unlink and free it. */ - watch_type = rsp_bp_type_to_target_hw_bp_type (type); + watch_type = Z_packet_to_target_hw_bp_type (type); deleted_one = 0; pw = &private->current_watches; while ((w = *pw)) diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index 10cd0d51e01..4e9564be8c0 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -668,7 +668,7 @@ x86_insert_point (char type, CORE_ADDR addr, int len) case '3': /* read watchpoint */ case '4': /* access watchpoint */ { - enum target_hw_bp_type hw_type = Z_packet_to_hw_type (type); + enum target_hw_bp_type hw_type = Z_packet_to_target_hw_bp_type (type); struct i386_debug_reg_state *state = &proc->private->arch_private->debug_reg_state; @@ -703,7 +703,7 @@ x86_remove_point (char type, CORE_ADDR addr, int len) case '3': /* read watchpoint */ case '4': /* access watchpoint */ { - enum target_hw_bp_type hw_type = Z_packet_to_hw_type (type); + enum target_hw_bp_type hw_type = Z_packet_to_target_hw_bp_type (type); struct i386_debug_reg_state *state = &proc->private->arch_private->debug_reg_state; diff --git a/gdb/gdbserver/mem-break.c b/gdb/gdbserver/mem-break.c index 680e97fe62d..b19cbc871a2 100644 --- a/gdb/gdbserver/mem-break.c +++ b/gdb/gdbserver/mem-break.c @@ -138,6 +138,24 @@ struct breakpoint int (*handler) (CORE_ADDR); }; +enum target_hw_bp_type +Z_packet_to_target_hw_bp_type (char type) +{ + switch (type) + { + case Z_PACKET_HW_BP: + return hw_execute; + case Z_PACKET_WRITE_WP: + return hw_write; + case Z_PACKET_READ_WP: + return hw_read; + case Z_PACKET_ACCESS_WP: + return hw_access; + default: + fatal ("bad watchpoint type %c", type); + } +} + int any_persistent_commands () { diff --git a/gdb/gdbserver/mem-break.h b/gdb/gdbserver/mem-break.h index 74369a7b79a..ffc1b80acff 100644 --- a/gdb/gdbserver/mem-break.h +++ b/gdb/gdbserver/mem-break.h @@ -21,10 +21,23 @@ #ifndef MEM_BREAK_H #define MEM_BREAK_H +#include "break-common.h" + /* Breakpoints are opaque. */ struct breakpoint; struct fast_tracepoint_jump; +#define Z_PACKET_SW_BP '0' +#define Z_PACKET_HW_BP '1' +#define Z_PACKET_WRITE_WP '2' +#define Z_PACKET_READ_WP '3' +#define Z_PACKET_ACCESS_WP '4' + +/* Map the protocol breakpoint/watchpoint type TYPE to enum + target_hw_bp_type. */ + +enum target_hw_bp_type Z_packet_to_target_hw_bp_type (char type); + /* Create a new GDB breakpoint at WHERE. Returns -1 if breakpoints are not supported on this target, 0 otherwise. */ diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c index ce9b3032f46..e70ca712397 100644 --- a/gdb/gdbserver/win32-i386-low.c +++ b/gdb/gdbserver/win32-i386-low.c @@ -106,7 +106,7 @@ i386_insert_point (char type, CORE_ADDR addr, int len) case '3': case '4': { - enum target_hw_bp_type hw_type = Z_packet_to_hw_type (type); + enum target_hw_bp_type hw_type = Z_packet_to_target_hw_bp_type (type); return i386_low_insert_watchpoint (&debug_reg_state, hw_type, addr, len); @@ -126,7 +126,7 @@ i386_remove_point (char type, CORE_ADDR addr, int len) case '3': case '4': { - enum target_hw_bp_type hw_type = Z_packet_to_hw_type (type); + enum target_hw_bp_type hw_type = Z_packet_to_target_hw_bp_type (type); return i386_low_remove_watchpoint (&debug_reg_state, hw_type, addr, len); -- 2.30.2