From 164224e96ca270d6cbb61d3e326fc1b0453b30a6 Mon Sep 17 00:00:00 2001 From: Michael Eager Date: Sat, 19 Jul 2014 17:47:52 -0700 Subject: [PATCH] Fix for remote G Packet message too long error for baremetal. Prior to version MicroBlaze v8.10.a,EDK 13.1, XMD's gdbserver stub returned 57 registers in response to GDB's G request. Starting with version MicroBlaze v8.10.a, EDK 13.1, XMD added the slr and shr register, for a count of 59 registers. This patch adds these registers to the expected G response. This patch fixes the above problem for baremetal and also supports the backward compatibility. ChangeLog: 2014-07-02 Ajit Agarwal * microblaze-tdep.c (microblaze_register_names): Add the rshr and rslr register names. (microblaze_gdbarch_init): Use of tdesc_has_registers. Use of tdesc_find_feature. Use of tdesc_data_alloc. Use of tdesc_numbered_register. Use of microblaze_register_g_packet_guesses. Use of tdesc_use_registers. Use of set_gdbarch_register_type. (microblaze_register_g_packet_guesses): New. * microblaze-tdep.h (microblaze_reg_num): Add field MICROBLAZE_SLR_REGNUM MICROBLAZE_SHR_REGNUM MICROBLAZE_NUM_REGS and MICROBLAZE_NUM_CORE_REGS. (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS. * features/microblaze-core.xml: New file. * features/microblaze-stack-protect.xml: New file. * features/microblaze-with-stack-protect.c: New file. * features/microblaze-with-stack-protect.xml: New file. * features/microblaze.xml: New file. * features/microblaze.c: New file. * features/Makefile (microblaze-with-stack-protect): Add microblaze-with-stack-protect microblaze and microblaze-expedite. * regformats/microblaze-with-stack-protect.dat: New file. * regformats/microblaze.dat: New file. * doc/gdb.texinfo (MicroBlaze Features): New. Signed-off-by:Ajit Agarwal ajitkum@xilinx.com --- gdb/ChangeLog | 26 ++++++ gdb/doc/gdb.texinfo | 14 ++++ gdb/features/Makefile | 2 + gdb/features/microblaze-core.xml | 67 ++++++++++++++++ gdb/features/microblaze-stack-protect.xml | 12 +++ gdb/features/microblaze-with-stack-protect.c | 79 +++++++++++++++++++ .../microblaze-with-stack-protect.xml | 12 +++ gdb/features/microblaze.c | 75 ++++++++++++++++++ gdb/features/microblaze.xml | 11 +++ gdb/microblaze-tdep.c | 61 +++++++++++++- gdb/microblaze-tdep.h | 50 ++++++------ .../microblaze-with-stack-protect.dat | 63 +++++++++++++++ gdb/regformats/microblaze.dat | 61 ++++++++++++++ 13 files changed, 507 insertions(+), 26 deletions(-) create mode 100644 gdb/features/microblaze-core.xml create mode 100644 gdb/features/microblaze-stack-protect.xml create mode 100644 gdb/features/microblaze-with-stack-protect.c create mode 100644 gdb/features/microblaze-with-stack-protect.xml create mode 100644 gdb/features/microblaze.c create mode 100644 gdb/features/microblaze.xml create mode 100644 gdb/regformats/microblaze-with-stack-protect.dat create mode 100644 gdb/regformats/microblaze.dat diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6a6708a7de6..a212b476b5c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,29 @@ +2014-07-19 Ajit Agarwal + + * microblaze-tdep.c (microblaze_register_names): Add + the rshr and rslr register names. + (microblaze_gdbarch_init): Use of tdesc_has_registers. + Use of tdesc_find_feature. Use of tdesc_data_alloc. + Use of tdesc_numbered_register. Use of + microblaze_register_g_packet_guesses. Use of + tdesc_use_registers. Use of set_gdbarch_register_type. + (microblaze_register_g_packet_guesses): New. + * microblaze-tdep.h (microblaze_reg_num): Add + field MICROBLAZE_SLR_REGNUM MICROBLAZE_SHR_REGNUM + MICROBLAZE_NUM_REGS and MICROBLAZE_NUM_CORE_REGS. + (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS. + * features/microblaze-core.xml: New file. + * features/microblaze-stack-protect.xml: New file. + * features/microblaze-with-stack-protect.c: New file. + * features/microblaze-with-stack-protect.xml: New file. + * features/microblaze.xml: New file. + * features/microblaze.c: New file. + * features/Makefile (microblaze-with-stack-protect): Add + microblaze-with-stack-protect microblaze and microblaze-expedite. + * regformats/microblaze-with-stack-protect.dat: New file. + * regformats/microblaze.dat: New file. + * doc/gdb.texinfo (MicroBlaze Features): Added. + 2014-07-18 Tom Tromey * exec.c (exec_ops): Now static. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 36624706a3e..8101b876770 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -39104,6 +39104,7 @@ registers using the capitalization used in the description. * AArch64 Features:: * ARM Features:: * i386 Features:: +* MicroBlaze Features:: * MIPS Features:: * M68K Features:: * Nios II Features:: @@ -39254,6 +39255,19 @@ describe the additional @sc{zmm} registers: @samp{zmm16h} through @samp{zmm31h}, only valid for amd64. @end itemize +@node MicroBlaze Features +@subsection MicroBlaze Features +@cindex target descriptions, MicroBlaze features + +The @samp{org.gnu.gdb.microblaze.core} feature is required for MicroBlaze +targets. It should contain registers @samp{r0} through @samp{r31}, +@samp{rpc}, @samp{rmsr}, @samp{rear}, @samp{resr}, @samp{rfsr}, @samp{rbtr}, +@samp{rpvr}, @samp{rpvr1} through @samp{rpvr11}, @samp{redr}, @samp{rpid}, +@samp{rzpr}, @samp{rtlbx}, @samp{rtlbsx}, @samp{rtlblo}, and @samp{rtlbhi}. + +The @samp{org.gnu.gdb.microblaze.stack-protect} feature is optional. +If present, it should contain registers @samp{rshr} and @samp{rslr} + @node MIPS Features @subsection @acronym{MIPS} Features @cindex target descriptions, @acronym{MIPS} features diff --git a/gdb/features/Makefile b/gdb/features/Makefile index dbf49639873..1c50419444e 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -46,6 +46,7 @@ WHICH = aarch64 \ i386/x32-avx i386/x32-avx-linux \ i386/x32-avx512 i386/x32-avx512-linux \ mips-linux mips-dsp-linux \ + microblaze-with-stack-protect \ mips64-linux mips64-dsp-linux \ nios2-linux \ rs6000/powerpc-32 \ @@ -90,6 +91,7 @@ mips-expedite = r29,pc mips-dsp-expedite = r29,pc mips64-expedite = r29,pc mips64-dsp-expedite = r29,pc +microblaze-expedite = r1,pc nios2-linux-expedite = sp,pc powerpc-expedite = r1,pc rs6000/powerpc-cell32l-expedite = r1,pc,r0,orig_r3,r4 diff --git a/gdb/features/microblaze-core.xml b/gdb/features/microblaze-core.xml new file mode 100644 index 00000000000..5e28773f518 --- /dev/null +++ b/gdb/features/microblaze-core.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml new file mode 100644 index 00000000000..d18bb0c5dae --- /dev/null +++ b/gdb/features/microblaze-stack-protect.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c new file mode 100644 index 00000000000..b39aa198874 --- /dev/null +++ b/gdb/features/microblaze-with-stack-protect.c @@ -0,0 +1,79 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: microblaze-with-stack-protect.xml */ + +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" + +struct target_desc *tdesc_microblaze_with_stack_protect; +static void +initialize_tdesc_microblaze_with_stack_protect (void) +{ + struct target_desc *result = allocate_target_description (); + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core"); + tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rfsr", 36, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rbtr", 37, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr0", 38, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr1", 39, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr2", 40, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr3", 41, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr4", 42, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr5", 43, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr6", 44, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr7", 45, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr8", 46, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr9", 47, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr10", 48, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr11", 49, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "redr", 50, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpid", 51, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rzpr", 52, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbx", 53, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); + + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.stack-protect"); + tdesc_create_reg (feature, "rslr", 57, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int"); + + tdesc_microblaze_with_stack_protect = result; +} diff --git a/gdb/features/microblaze-with-stack-protect.xml b/gdb/features/microblaze-with-stack-protect.xml new file mode 100644 index 00000000000..8f62a382470 --- /dev/null +++ b/gdb/features/microblaze-with-stack-protect.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c new file mode 100644 index 00000000000..6c86fc07700 --- /dev/null +++ b/gdb/features/microblaze.c @@ -0,0 +1,75 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: microblaze.xml */ + +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" + +struct target_desc *tdesc_microblaze; +static void +initialize_tdesc_microblaze (void) +{ + struct target_desc *result = allocate_target_description (); + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.microblaze.core"); + tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "data_ptr"); + tdesc_create_reg (feature, "r2", 2, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r3", 3, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r4", 4, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r5", 5, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r6", 6, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r7", 7, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r8", 8, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r9", 9, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r10", 10, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r11", 11, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r12", 12, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r13", 13, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r14", 14, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r15", 15, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r16", 16, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r17", 17, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r18", 18, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r19", 19, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r20", 20, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r21", 21, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r22", 22, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r23", 23, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r24", 24, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r25", 25, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r26", 26, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r27", 27, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r28", 28, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r29", 29, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "r31", 31, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpc", 32, 1, NULL, 32, "code_ptr"); + tdesc_create_reg (feature, "rmsr", 33, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rear", 34, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "resr", 35, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rfsr", 36, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rbtr", 37, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr0", 38, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr1", 39, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr2", 40, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr3", 41, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr4", 42, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr5", 43, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr6", 44, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr7", 45, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr8", 46, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr9", 47, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr10", 48, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpvr11", 49, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "redr", 50, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rpid", 51, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rzpr", 52, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbx", 53, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbsx", 54, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlblo", 55, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "rtlbhi", 56, 1, NULL, 32, "int"); + + tdesc_microblaze = result; +} diff --git a/gdb/features/microblaze.xml b/gdb/features/microblaze.xml new file mode 100644 index 00000000000..571f17f06d8 --- /dev/null +++ b/gdb/features/microblaze.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c index 14c1b52e1f5..7e892411366 100644 --- a/gdb/microblaze-tdep.c +++ b/gdb/microblaze-tdep.c @@ -33,13 +33,16 @@ #include "frame-unwind.h" #include "dwarf2-frame.h" #include "osabi.h" - #include "gdb_assert.h" #include #include "target-descriptions.h" #include "opcodes/microblaze-opcm.h" #include "opcodes/microblaze-dis.h" #include "microblaze-tdep.h" +#include "remote.h" + +#include "features/microblaze-with-stack-protect.c" +#include "features/microblaze.c" /* Instruction macros used for analyzing the prologue. */ /* This set of instruction macros need to be changed whenever the @@ -73,7 +76,8 @@ static const char *microblaze_register_names[] = "rpc", "rmsr", "rear", "resr", "rfsr", "rbtr", "rpvr0", "rpvr1", "rpvr2", "rpvr3", "rpvr4", "rpvr5", "rpvr6", "rpvr7", "rpvr8", "rpvr9", "rpvr10", "rpvr11", - "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi" + "redr", "rpid", "rzpr", "rtlbx", "rtlbsx", "rtlblo", "rtlbhi", + "rslr", "rshr" }; #define MICROBLAZE_NUM_REGS ARRAY_SIZE (microblaze_register_names) @@ -664,16 +668,63 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg) return dwarf2_to_reg_map[reg]; } +static void +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) +{ + register_remote_g_packet_guess (gdbarch, + 4 * MICROBLAZE_NUM_CORE_REGS, + tdesc_microblaze); + + register_remote_g_packet_guess (gdbarch, + 4 * MICROBLAZE_NUM_REGS, + tdesc_microblaze_with_stack_protect); +} + static struct gdbarch * microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) { struct gdbarch_tdep *tdep; struct gdbarch *gdbarch; + struct tdesc_arch_data *tdesc_data = NULL; + const struct target_desc *tdesc = info.target_desc; /* If there is already a candidate, use it. */ arches = gdbarch_list_lookup_by_info (arches, &info); if (arches != NULL) return arches->gdbarch; + if (tdesc == NULL) + tdesc = tdesc_microblaze; + + /* Check any target description for validity. */ + if (tdesc_has_registers (tdesc)) + { + const struct tdesc_feature *feature; + int valid_p; + int i; + + feature = tdesc_find_feature (tdesc, + "org.gnu.gdb.microblaze.core"); + if (feature == NULL) + return NULL; + tdesc_data = tdesc_data_alloc (); + + valid_p = 1; + for (i = 0; i < MICROBLAZE_NUM_CORE_REGS; i++) + valid_p &= tdesc_numbered_register (feature, tdesc_data, i, + microblaze_register_names[i]); + feature = tdesc_find_feature (tdesc, + "org.gnu.gdb.microblaze.stack-protect"); + if (feature != NULL) + { + valid_p = 1; + valid_p &= tdesc_numbered_register (feature, tdesc_data, + MICROBLAZE_SLR_REGNUM, + "rslr"); + valid_p &= tdesc_numbered_register (feature, tdesc_data, + MICROBLAZE_SHR_REGNUM, + "rshr"); + } + } /* Allocate space for the new architecture. */ tdep = XNEW (struct gdbarch_tdep); @@ -716,6 +767,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_unwind_pc (gdbarch, microblaze_unwind_pc); + microblaze_register_g_packet_guesses (gdbarch); + frame_base_set_default (gdbarch, µblaze_frame_base); /* Hook in ABI-specific overrides, if they have been registered. */ @@ -725,6 +778,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) dwarf2_append_unwinders (gdbarch); frame_unwind_append_unwinder (gdbarch, µblaze_frame_unwind); frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer); + if (tdesc_data != NULL) + tdesc_use_registers (gdbarch, tdesc, tdesc_data); return gdbarch; } @@ -737,6 +792,8 @@ _initialize_microblaze_tdep (void) { register_gdbarch_init (bfd_arch_microblaze, microblaze_gdbarch_init); + initialize_tdesc_microblaze_with_stack_protect (); + initialize_tdesc_microblaze (); /* Debug this files internals. */ add_setshow_zuinteger_cmd ("microblaze", class_maintenance, µblaze_debug_flag, _("\ diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h index a532092eb0c..ba240e94925 100644 --- a/gdb/microblaze-tdep.h +++ b/gdb/microblaze-tdep.h @@ -26,30 +26,8 @@ struct gdbarch_tdep { }; -struct microblaze_frame_cache -{ - /* Base address. */ - CORE_ADDR base; - CORE_ADDR pc; - - /* Do we have a frame? */ - int frameless_p; - - /* Frame size. */ - int framesize; - - /* Frame register. */ - int fp_regnum; - - /* Offsets to saved registers. */ - int register_offsets[57]; /* Must match MICROBLAZE_NUM_REGS. */ - - /* Table of saved registers. */ - struct trad_frame_saved_reg *saved_regs; -}; - /* Register numbers. */ -enum microblaze_regnum +enum microblaze_regnum { MICROBLAZE_R0_REGNUM, MICROBLAZE_R1_REGNUM, MICROBLAZE_SP_REGNUM = MICROBLAZE_R1_REGNUM, @@ -107,9 +85,33 @@ enum microblaze_regnum MICROBLAZE_RTLBX_REGNUM, MICROBLAZE_RTLBSX_REGNUM, MICROBLAZE_RTLBLO_REGNUM, - MICROBLAZE_RTLBHI_REGNUM + MICROBLAZE_RTLBHI_REGNUM, + MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM, + MICROBLAZE_SHR_REGNUM, + MICROBLAZE_NUM_REGS }; +struct microblaze_frame_cache +{ + /* Base address. */ + CORE_ADDR base; + CORE_ADDR pc; + + /* Do we have a frame? */ + int frameless_p; + + /* Frame size. */ + int framesize; + + /* Frame register. */ + int fp_regnum; + + /* Offsets to saved registers. */ + int register_offsets[MICROBLAZE_NUM_REGS]; + + /* Table of saved registers. */ + struct trad_frame_saved_reg *saved_regs; +}; /* All registers are 32 bits. */ #define MICROBLAZE_REGISTER_SIZE 4 diff --git a/gdb/regformats/microblaze-with-stack-protect.dat b/gdb/regformats/microblaze-with-stack-protect.dat new file mode 100644 index 00000000000..f71c11171a4 --- /dev/null +++ b/gdb/regformats/microblaze-with-stack-protect.dat @@ -0,0 +1,63 @@ +# DO NOT EDIT: generated from microblaze-with-stack-protect.xml +name:microblaze_with_stack_protect +xmltarget:microblaze-with-stack-protect.xml +expedite:r1,pc +32:r0 +32:r1 +32:r2 +32:r3 +32:r4 +32:r5 +32:r6 +32:r7 +32:r8 +32:r9 +32:r10 +32:r11 +32:r12 +32:r13 +32:r14 +32:r15 +32:r16 +32:r17 +32:r18 +32:r19 +32:r20 +32:r21 +32:r22 +32:r23 +32:r24 +32:r25 +32:r26 +32:r27 +32:r28 +32:r29 +32:r30 +32:r31 +32:rpc +32:rmsr +32:rear +32:resr +32:rfsr +32:rbtr +32:rpvr0 +32:rpvr1 +32:rpvr2 +32:rpvr3 +32:rpvr4 +32:rpvr5 +32:rpvr6 +32:rpvr7 +32:rpvr8 +32:rpvr9 +32:rpvr10 +32:rpvr11 +32:redr +32:rpid +32:rzpr +32:rtlbx +32:rtlbsx +32:rtlblo +32:rtlbhi +32:rslr +32:rshr diff --git a/gdb/regformats/microblaze.dat b/gdb/regformats/microblaze.dat new file mode 100644 index 00000000000..fbc3edbb729 --- /dev/null +++ b/gdb/regformats/microblaze.dat @@ -0,0 +1,61 @@ +# DO NOT EDIT: generated from microblaze.xml +name:microblaze +xmltarget:microblaze.xml +expedite:r1,pc +32:r0 +32:r1 +32:r2 +32:r3 +32:r4 +32:r5 +32:r6 +32:r7 +32:r8 +32:r9 +32:r10 +32:r11 +32:r12 +32:r13 +32:r14 +32:r15 +32:r16 +32:r17 +32:r18 +32:r19 +32:r20 +32:r21 +32:r22 +32:r23 +32:r24 +32:r25 +32:r26 +32:r27 +32:r28 +32:r29 +32:r30 +32:r31 +32:rpc +32:rmsr +32:rear +32:resr +32:rfsr +32:rbtr +32:rpvr0 +32:rpvr1 +32:rpvr2 +32:rpvr3 +32:rpvr4 +32:rpvr5 +32:rpvr6 +32:rpvr7 +32:rpvr8 +32:rpvr9 +32:rpvr10 +32:rpvr11 +32:redr +32:rpid +32:rzpr +32:rtlbx +32:rtlbsx +32:rtlblo +32:rtlbhi -- 2.30.2