diff options
28 files changed, 181 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d9c1462..391db87 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> + + * regformats/regdat.sh: Rename init_registers function in + generated file to init_registers_${name}. + + * regformats/reg-crisv32.dat: Set "name" to crisv32. + * regformats/reg-ppc64.dat: Set "name" to ppc64. + * regformats/reg-s390x.dat: Set "name" to s390x. + 2008-02-26 Greg Law <glaw@undo-software.com> * regcache.c (registers_changed): Call reinit_frame_cache. diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 855a607..80ea9f9 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,56 @@ +2008-02-27 Ulrich Weigand <uweigand@de.ibm.com> + + * server.h (init_registers): Remove prototype. + + * linux-low.h (struct linux_target_ops): Add arch_setup field. + * linux-low.c (initialize_low): Call the_low_target.arch_setup () + instead of init_registers (). + * linux-arm-low.c (init_registers_arm): Add prototype. + (init_registers_arm_with_iwmmxt): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-cris-low.c (init_registers_cris): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-crisv32-low.c (init_registers_crisv32): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-i386-low.c (init_registers_i386_linux): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-ia64-low.c (init_registers_ia64): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-m32r-low.c (init_registers_m32r): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-m68k-low.c (init_registers_m68k): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-mips-low.c (init_registers_mips_linux): Add prototype. + (init_registers_mips64_linux): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-ppc-low.c (init_registers_ppc): Add prototype. + (init_registers_powerpc_32, init_registers_powerpc_e500): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-ppc64-low.c (init_registers_ppc64): Add prototype. + (init_registers_powerpc_64): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-s390-low.c (init_registers_s390): Add prototype. + (init_registers_s390x): Likewise. + (the_low_target): Add initializer for arch_setup field. + * linux-sh-low.c (init_registers_sh): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-x86-64-low.c (init_registers_x86_64_linux): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * linux-xtensa-low.c (init_registers_xtensa): Add prototype. + (the_low_target): Add initializer for arch_setup field. + + * win32-low.h (struct win32_target_ops): Add arch_setup field. + * win32-low.c (initialize_low): Call the_low_target.arch_setup () + instead of init_registers (). + * win32-arm-low.c (init_registers_arm): Add prototype. + (the_low_target): Add initializer for arch_setup field. + * win32-i386-low.c (init_registers_i386): Add prototype. + (the_low_target): Add initializer for arch_setup field. + + * spu-low.c (init_registers_spu): Add prototype. + (initialize_low): Call initialie_registers_spu () instead of + initialize_registers (). + 2008-02-19 Pedro Alves <pedro@codesourcery.com> * server.c (handle_v_requests): When handling the vRun and vAttach diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c index 2f7ab92..d47ecbc 100644 --- a/gdb/gdbserver/linux-arm-low.c +++ b/gdb/gdbserver/linux-arm-low.c @@ -24,6 +24,11 @@ #include "gdb_proc_service.h" +/* Defined in auto-generated file reg-arm.c. */ +void init_registers_arm (void); +/* Defined in auto-generated file arm-with-iwmmxt.c. */ +void init_registers_arm_with_iwmmxt (void); + #ifndef PTRACE_GET_THREAD_AREA #define PTRACE_GET_THREAD_AREA 22 #endif @@ -200,6 +205,11 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { +#ifdef __IWMMXT__ + init_registers_arm_with_iwmmxt, +#else + init_registers_arm, +#endif arm_num_regs, arm_regmap, arm_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-cris-low.c b/gdb/gdbserver/linux-cris-low.c index f1ff46c..e7f47fb 100644 --- a/gdb/gdbserver/linux-cris-low.c +++ b/gdb/gdbserver/linux-cris-low.c @@ -21,6 +21,9 @@ #include "linux-low.h" #include <sys/ptrace.h> +/* Defined in auto-generated file reg-cris.c. */ +void init_registers_cris (void); + /* CRISv10 */ #define cris_num_regs 32 @@ -105,6 +108,7 @@ cris_reinsert_addr (void) } struct linux_target_ops the_low_target = { + init_registers_cris, cris_num_regs, cris_regmap, cris_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-crisv32-low.c b/gdb/gdbserver/linux-crisv32-low.c index 550771d..5136f16 100644 --- a/gdb/gdbserver/linux-crisv32-low.c +++ b/gdb/gdbserver/linux-crisv32-low.c @@ -21,6 +21,9 @@ #include "linux-low.h" #include <sys/ptrace.h> +/* Defined in auto-generated file reg-crisv32.c. */ +void init_registers_crisv32 (void); + /* CRISv32 */ #define cris_num_regs 49 @@ -360,6 +363,7 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { + init_register_crisv32, -1, NULL, NULL, diff --git a/gdb/gdbserver/linux-i386-low.c b/gdb/gdbserver/linux-i386-low.c index 887b17a..433d085 100644 --- a/gdb/gdbserver/linux-i386-low.c +++ b/gdb/gdbserver/linux-i386-low.c @@ -33,6 +33,10 @@ #define PTRACE_GET_THREAD_AREA 25 #endif +/* Defined in auto-generated file reg-i386-linux.c. */ +void init_registers_i386_linux (void); + + /* This module only supports access to the general purpose registers. */ #define i386_num_regs 16 @@ -185,6 +189,7 @@ i386_breakpoint_at (CORE_ADDR pc) } struct linux_target_ops the_low_target = { + init_registers_i386_linux, i386_num_regs, i386_regmap, i386_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-ia64-low.c b/gdb/gdbserver/linux-ia64-low.c index 40524a1..030e8ec 100644 --- a/gdb/gdbserver/linux-ia64-low.c +++ b/gdb/gdbserver/linux-ia64-low.c @@ -24,6 +24,9 @@ #include <sys/reg.h> #endif +/* Defined in auto-generated file reg-ia64.c. */ +void init_registers_ia64 (void); + #define ia64_num_regs 462 #include <asm/ptrace_offsets.h> @@ -276,6 +279,7 @@ ia64_cannot_fetch_register (int regno) } struct linux_target_ops the_low_target = { + init_registers_ia64, ia64_num_regs, ia64_regmap, ia64_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index c2b66c3..d5a8fb4 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -2072,7 +2072,7 @@ initialize_low (void) set_target_ops (&linux_target_ops); set_breakpoint_data (the_low_target.breakpoint, the_low_target.breakpoint_len); - init_registers (); + the_low_target.arch_setup (); linux_init_signals (); linux_test_for_tracefork (); } diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index 32245f0..698a1b0 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -42,6 +42,9 @@ extern struct regset_info target_regsets[]; struct linux_target_ops { + /* Architecture-specific setup. */ + void (*arch_setup) (void); + int num_regs; int *regmap; int (*cannot_fetch_register) (int); diff --git a/gdb/gdbserver/linux-m32r-low.c b/gdb/gdbserver/linux-m32r-low.c index 08255e4..b7cf8df 100644 --- a/gdb/gdbserver/linux-m32r-low.c +++ b/gdb/gdbserver/linux-m32r-low.c @@ -23,6 +23,9 @@ #include <sys/reg.h> #endif +/* Defined in auto-generated file reg-m32r.c. */ +void init_registers_m32r (void); + #define m32r_num_regs 25 static int m32r_regmap[] = { @@ -83,6 +86,7 @@ m32r_breakpoint_at (CORE_ADDR where) } struct linux_target_ops the_low_target = { + init_registers_m32r, m32r_num_regs, m32r_regmap, m32r_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-m68k-low.c b/gdb/gdbserver/linux-m68k-low.c index 01a7fe2..01ac1b8 100644 --- a/gdb/gdbserver/linux-m68k-low.c +++ b/gdb/gdbserver/linux-m68k-low.c @@ -20,6 +20,9 @@ #include "server.h" #include "linux-low.h" +/* Defined in auto-generated file reg-m68k.c. */ +void init_registers_m68k (void); + #ifdef HAVE_SYS_REG_H #include <sys/reg.h> #endif @@ -152,6 +155,7 @@ m68k_breakpoint_at (CORE_ADDR pc) } struct linux_target_ops the_low_target = { + init_registers_m68k, m68k_num_regs, m68k_regmap, m68k_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c index 288ef63..22e18da 100644 --- a/gdb/gdbserver/linux-mips-low.c +++ b/gdb/gdbserver/linux-mips-low.c @@ -25,6 +25,11 @@ #include "gdb_proc_service.h" +/* Defined in auto-generated file mips-linux.c. */ +void init_registers_mips_linux (void); +/* Defined in auto-generated file mips64-linux.c. */ +void init_registers_mips64_linux (void); + #ifndef PTRACE_GET_THREAD_AREA #define PTRACE_GET_THREAD_AREA 25 #endif @@ -329,6 +334,11 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { +#ifdef __mips64 + init_registers_mips64_linux, +#else + init_registers_mips_linux, +#endif mips_num_regs, mips_regmap, mips_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c index 54e7e5f..4cc1d4c 100644 --- a/gdb/gdbserver/linux-ppc-low.c +++ b/gdb/gdbserver/linux-ppc-low.c @@ -23,6 +23,13 @@ #include <asm/ptrace.h> +/* Defined in auto-generated file reg-ppc.c. */ +void init_registers_ppc (void); +/* Defined in auto-generated file powerpc-32.c. */ +void init_registers_powerpc_32 (void); +/* Defined in auto-generated file powerpc-e500.c. */ +void init_registers_powerpc_e500 (void); + #define ppc_num_regs 71 /* Currently, don't check/send MQ. */ @@ -231,6 +238,15 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { +#ifdef __ALTIVEC__ + init_registers_powerpc_32, +#else +#ifdef __SPE__ + init_registers_powerpc_e500, +#else + init_registers_ppc, +#endif +#endif ppc_num_regs, ppc_regmap, ppc_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-ppc64-low.c b/gdb/gdbserver/linux-ppc64-low.c index 4b4b869..3897d73b 100644 --- a/gdb/gdbserver/linux-ppc64-low.c +++ b/gdb/gdbserver/linux-ppc64-low.c @@ -21,6 +21,11 @@ #include "server.h" #include "linux-low.h" +/* Defined in auto-generated file reg-ppc64.c. */ +void init_registers_ppc64 (void); +/* Defined in auto-generated file powerpc-64.c. */ +void init_registers_powerpc_64 (void); + #include <asm/ptrace.h> #define ppc_num_regs 71 @@ -162,6 +167,11 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { +#ifdef __ALTIVEC__ + init_registers_powerpc_64, +#else + init_registers_ppc64, +#endif ppc_num_regs, ppc_regmap, ppc_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-s390-low.c b/gdb/gdbserver/linux-s390-low.c index 3482427..6ae1a23 100644 --- a/gdb/gdbserver/linux-s390-low.c +++ b/gdb/gdbserver/linux-s390-low.c @@ -25,6 +25,12 @@ #include <asm/ptrace.h> +/* Defined in auto-generated file reg-s390.c. */ +void init_registers_s390 (void); +/* Defined in auto-generated file reg-s390x.c. */ +void init_registers_s390x (void); + + #define s390_num_regs 51 static int s390_regmap[] = { @@ -124,6 +130,11 @@ s390_breakpoint_at (CORE_ADDR pc) struct linux_target_ops the_low_target = { +#ifndef __s390x__ + init_registers_s390, +#else + init_registers_s390x, +#endif s390_num_regs, s390_regmap, s390_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-sh-low.c b/gdb/gdbserver/linux-sh-low.c index d488a52..9e87ffa 100644 --- a/gdb/gdbserver/linux-sh-low.c +++ b/gdb/gdbserver/linux-sh-low.c @@ -20,6 +20,9 @@ #include "server.h" #include "linux-low.h" +/* Defined in auto-generated file reg-sh.c. */ +void init_registers_sh (void); + #ifdef HAVE_SYS_REG_H #include <sys/reg.h> #endif @@ -106,6 +109,7 @@ struct regset_info target_regsets[] = { }; struct linux_target_ops the_low_target = { + init_registers_sh, sh_num_regs, sh_regmap, sh_cannot_fetch_register, diff --git a/gdb/gdbserver/linux-x86-64-low.c b/gdb/gdbserver/linux-x86-64-low.c index 56f1a91..80f5c6d 100644 --- a/gdb/gdbserver/linux-x86-64-low.c +++ b/gdb/gdbserver/linux-x86-64-low.c @@ -24,6 +24,9 @@ #include "gdb_proc_service.h" +/* Defined in auto-generated file reg-x86-64-linux.c. */ +void init_registers_x86_64_linux (void); + #include <sys/reg.h> #include <sys/procfs.h> #include <sys/ptrace.h> @@ -160,6 +163,7 @@ x86_64_breakpoint_at (CORE_ADDR pc) } struct linux_target_ops the_low_target = { + init_registers_x86_64_linux, -1, NULL, NULL, diff --git a/gdb/gdbserver/linux-xtensa-low.c b/gdb/gdbserver/linux-xtensa-low.c index cbf5a51..256bbcf 100644 --- a/gdb/gdbserver/linux-xtensa-low.c +++ b/gdb/gdbserver/linux-xtensa-low.c @@ -20,6 +20,9 @@ #include "server.h" #include "linux-low.h" +/* Defined in auto-generated file reg-xtensa.c. */ +void init_registers_xtensa (void); + #include <sys/ptrace.h> #include <xtensa-config.h> @@ -173,6 +176,7 @@ xtensa_breakpoint_at (CORE_ADDR where) } struct linux_target_ops the_low_target = { + init_registers_xtensa, 0, 0, 0, diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h index 107813b..9238766 100644 --- a/gdb/gdbserver/server.h +++ b/gdb/gdbserver/server.h @@ -221,10 +221,6 @@ void error (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2); void fatal (const char *string,...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2); void warning (const char *string,...) ATTR_FORMAT (printf, 1, 2); -/* Functions from the register cache definition. */ - -void init_registers (void); - /* Maximum number of bytes to read/write at once. The value here is chosen to fill up a packet (the headers account for the 32). */ #define MAXBUFBYTES(N) (((N)-32)/2) diff --git a/gdb/gdbserver/spu-low.c b/gdb/gdbserver/spu-low.c index bba7c19..f054fe7 100644 --- a/gdb/gdbserver/spu-low.c +++ b/gdb/gdbserver/spu-low.c @@ -57,6 +57,9 @@ /* These are used in remote-utils.c. */ int using_threads = 0; +/* Defined in auto-generated file reg-spu.c. */ +void init_registers_spu (void); + /* Fetch PPU register REGNO. */ static CORE_ADDR @@ -600,5 +603,5 @@ initialize_low (void) set_target_ops (&spu_target_ops); set_breakpoint_data (breakpoint, sizeof breakpoint); - init_registers (); + init_registers_spu (); } diff --git a/gdb/gdbserver/win32-arm-low.c b/gdb/gdbserver/win32-arm-low.c index c5d646f..fb64ec4 100644 --- a/gdb/gdbserver/win32-arm-low.c +++ b/gdb/gdbserver/win32-arm-low.c @@ -22,6 +22,10 @@ #define CONTEXT_FLOATING_POINT 0 #endif +/* Defined in auto-generated file reg-arm.c. */ +void init_registers_arm (void); + + static void arm_get_thread_context (win32_thread_info *th, DEBUG_EVENT* current_event) { @@ -107,6 +111,7 @@ static const unsigned long arm_wince_breakpoint = 0xe6000010; #define arm_wince_breakpoint_len 4 struct win32_target_ops the_low_target = { + init_registers_arm, sizeof (mappings) / sizeof (mappings[0]), NULL, /* initial_stuff */ arm_get_thread_context, diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c index 59ac342..c21e884 100644 --- a/gdb/gdbserver/win32-i386-low.c +++ b/gdb/gdbserver/win32-i386-low.c @@ -23,6 +23,9 @@ #define FLAG_TRACE_BIT 0x100 +/* Defined in auto-generated file reg-i386.c. */ +void init_registers_i386 (void); + static unsigned dr[8]; static int debug_registers_changed = 0; @@ -191,6 +194,7 @@ i386_store_inferior_register (win32_thread_info *th, int r) } struct win32_target_ops the_low_target = { + init_registers_i386, sizeof (mappings) / sizeof (mappings[0]), i386_initial_stuff, i386_get_thread_context, diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index af2e3b6..355a29e 100644 --- a/gdb/gdbserver/win32-low.c +++ b/gdb/gdbserver/win32-low.c @@ -1740,5 +1740,5 @@ initialize_low (void) if (the_low_target.breakpoint != NULL) set_breakpoint_data (the_low_target.breakpoint, the_low_target.breakpoint_len); - init_registers (); + the_low_target.arch_setup (); } diff --git a/gdb/gdbserver/win32-low.h b/gdb/gdbserver/win32-low.h index fafdbb9..21c91b5 100644 --- a/gdb/gdbserver/win32-low.h +++ b/gdb/gdbserver/win32-low.h @@ -42,6 +42,9 @@ typedef struct win32_thread_info struct win32_target_ops { + /* Architecture-specific setup. */ + void (*arch_setup) (void); + /* The number of target registers. */ int num_regs; diff --git a/gdb/regformats/reg-crisv32.dat b/gdb/regformats/reg-crisv32.dat index 565ac70..9cd93fe 100644 --- a/gdb/regformats/reg-crisv32.dat +++ b/gdb/regformats/reg-crisv32.dat @@ -1,4 +1,4 @@ -name:cris +name:crisv32 expedite:r8,sp,pc 32:r0 32:r1 diff --git a/gdb/regformats/reg-ppc64.dat b/gdb/regformats/reg-ppc64.dat index b8be5f2..281432a 100644 --- a/gdb/regformats/reg-ppc64.dat +++ b/gdb/regformats/reg-ppc64.dat @@ -1,4 +1,4 @@ -name:ppc +name:ppc64 expedite:r1,pc 64:r0 64:r1 diff --git a/gdb/regformats/reg-s390x.dat b/gdb/regformats/reg-s390x.dat index 2e24f53..81ce403 100644 --- a/gdb/regformats/reg-s390x.dat +++ b/gdb/regformats/reg-s390x.dat @@ -1,4 +1,4 @@ -name:s390 +name:s390x expedite:r14,r15,pswa 64:pswm 64:pswa diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh index cd59b39..c035f2b 100755 --- a/gdb/regformats/regdat.sh +++ b/gdb/regformats/regdat.sh @@ -155,7 +155,7 @@ echo cat <<EOF void -init_registers () +init_registers_${name} () { set_register_cache (regs_${name}, sizeof (regs_${name}) / sizeof (regs_${name}[0])); |