public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
@ 2014-06-12  8:56 Ajit Kumar Agarwal
  2014-06-12 14:52 ` Michael Eager
  2014-06-17 11:17 ` Pedro Alves
  0 siblings, 2 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-12  8:56 UTC (permalink / raw)
  To: gdb-patches, Pedro Alves
  Cc: Michael Eager, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 1797 bytes --]

Based on the feedbacks, all changes have been incorporated.
 
May I know who will committing this patch to the upstream ?

[Patch, microblaze]: 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
    fixes the above problem for baremetal and also supports the backward compatibility.
    
    ChangeLog:
    
    2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
    
        * 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 and MICROBLAZE_SHR_REGNUM
        MICROBLAZE_NUM_REGS.
        (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
    
        * features/microblaze-cpu.xml: New file.
    
        * features/microblaze-linux.c: New file.
    
        * features/microblaze-linux.xml: New file.
    
        * regformats/reg-microblaze.dat: New file.

        * features/Makefile (microblaze-linux): Add microblaze-linux
        and microblaze-expedite.
    
    Signed-off-by:Ajit Agarwal ajitkum@xilinx.com

Thanks & Regards
Ajit

[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 16906 bytes --]

From ce1e6c1f1cd7d49df24727fc179df4c3f6f66bee Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Thu, 12 Jun 2014 12:50:16 +0530
Subject: [PATCH] [Patch, microblaze]: 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
fixes the above problem for baremetal and also supports the backward compatibility.

ChangeLog:

2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>

	* 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 and MICROBLAZE_SHR_REGNUM
	MICROBLAZE_NUM_REGS.
	(microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.

	* features/microblaze-cpu.xml: New file.

	* features/microblaze-linux.c: New file.

	* features/microblaze-linux.xml: New file.

	* regformats/reg-microblaze.dat: New file.

	* features/Makefile (microblaze-linux): Add microblaze-linux
	and microblaze-expedite.

Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
---
 gdb/features/Makefile             |    2 +
 gdb/features/microblaze-cpu.xml   |   69 +++++++++++++++++++++++++++++++
 gdb/features/microblaze-linux.c   |   81 +++++++++++++++++++++++++++++++++++++
 gdb/features/microblaze-linux.xml |   13 ++++++
 gdb/microblaze-tdep.c             |   55 +++++++++++++++++++++++--
 gdb/microblaze-tdep.h             |   48 +++++++++++----------
 gdb/regformats/reg-microblaze.dat |   63 ++++++++++++++++++++++++++++
 7 files changed, 303 insertions(+), 28 deletions(-)
 create mode 100644 gdb/features/microblaze-cpu.xml
 create mode 100644 gdb/features/microblaze-linux.c
 create mode 100644 gdb/features/microblaze-linux.xml
 create mode 100644 gdb/regformats/reg-microblaze.dat

diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index dbf4963..5e9ea70 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-linux \
 	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-cpu.xml b/gdb/features/microblaze-cpu.xml
new file mode 100644
index 0000000..603a655
--- /dev/null
+++ b/gdb/features/microblaze-cpu.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.MicroBlaze.cpu">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-linux.c b/gdb/features/microblaze-linux.c
new file mode 100644
index 0000000..e32ecd8
--- /dev/null
+++ b/gdb/features/microblaze-linux.c
@@ -0,0 +1,81 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: microblaze-linux.xml */
+
+#include "defs.h"
+#include "osabi.h"
+#include "target-descriptions.h"
+
+struct target_desc *tdesc_microblaze_linux;
+static void
+initialize_tdesc_microblaze_linux (void)
+{
+  struct target_desc *result = allocate_target_description ();
+  struct tdesc_feature *feature;
+
+  set_tdesc_architecture (result, bfd_scan_arch ("MicroBlaze"));
+
+  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.MicroBlaze.cpu");
+  tdesc_create_reg (feature, "r0", 0, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "r1", 1, 1, NULL, 32, "int");
+  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, "int");
+  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_create_reg (feature, "rslr", 57, 1, NULL, 32, "int");
+  tdesc_create_reg (feature, "rshr", 58, 1, NULL, 32, "int");
+
+  tdesc_microblaze_linux = result;
+}
diff --git a/gdb/features/microblaze-linux.xml b/gdb/features/microblaze-linux.xml
new file mode 100644
index 0000000..2ae73e7
--- /dev/null
+++ b/gdb/features/microblaze-linux.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <architecture>MicroBlaze</architecture>
+  <osabi>GNU/Linux</osabi>
+  <xi:include href="microblaze-cpu.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..0f72621 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -33,13 +33,14 @@
 #include "frame-unwind.h"
 #include "dwarf2-frame.h"
 #include "osabi.h"
-
+#include "features/microblaze-linux.c"
 #include "gdb_assert.h"
 #include <string.h>
 #include "target-descriptions.h"
 #include "opcodes/microblaze-opcm.h"
 #include "opcodes/microblaze-dis.h"
 #include "microblaze-tdep.h"
+#include "remote.h"
 \f
 /* Instruction macros used for analyzing the prologue.  */
 /* This set of instruction macros need to be changed whenever the
@@ -73,7 +74,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)
@@ -663,17 +665,55 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   gdb_assert (reg < sizeof (dwarf2_to_reg_map));
   return dwarf2_to_reg_map[reg];
 }
+static void
+microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+      register_remote_g_packet_guess (gdbarch,
+                                      MICROBLAZE_NUM_REGS, 
+                                      tdesc_microblaze_linux);
 
+      register_remote_g_packet_guess (gdbarch,
+                                      MICROBLAZE_NUM_REGS-2,
+                                      tdesc_microblaze_linux);
+}
 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_linux;
+  /* 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.cpu");
+      if (feature == NULL)
+        {
+          return NULL;
+        }
+      tdesc_data = tdesc_data_alloc ();
+
+      valid_p = 1;
+      for (i = 0; i < MICROBLAZE_NUM_REGS; i++)
+        valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
+                                            microblaze_register_names[i]);
+     }
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
+
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,7 +765,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-
+  if (tdesc_data)
+    {
+      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      set_gdbarch_register_type (gdbarch, microblaze_register_type);
+    }
   return gdbarch;
 }
 
@@ -736,7 +780,8 @@ void
 _initialize_microblaze_tdep (void)
 {
   register_gdbarch_init (bfd_arch_microblaze, microblaze_gdbarch_init);
-
+  
+  initialize_tdesc_microblaze_linux ();
   /* Debug this files internals.  */
   add_setshow_zuinteger_cmd ("microblaze", class_maintenance,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..8658bc5 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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_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];    /* Must match 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/reg-microblaze.dat b/gdb/regformats/reg-microblaze.dat
new file mode 100644
index 0000000..08da50d
--- /dev/null
+++ b/gdb/regformats/reg-microblaze.dat
@@ -0,0 +1,63 @@
+# DO NOT EDIT: generated from microblaze-linux.xml
+name:microblaze_linux
+xmltarget:microblaze-linux.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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-12  8:56 [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal Ajit Kumar Agarwal
@ 2014-06-12 14:52 ` Michael Eager
  2014-06-17 11:17 ` Pedro Alves
  1 sibling, 0 replies; 33+ messages in thread
From: Michael Eager @ 2014-06-12 14:52 UTC (permalink / raw)
  To: Ajit Kumar Agarwal, gdb-patches
  Cc: Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

On 06/12/14 01:56, Ajit Kumar Agarwal wrote:
> Based on the feedbacks, all changes have been incorporated.

Thanks!

This patch addresses some of the issues raised, such as eliminating
gdbserver changes which were unrelated.  There were a number of other
issues raised previously.  I'll let you know if there were any which
still need to be addressed.

>
> May I know who will committing this patch to the upstream ?

When approved, as MicroBlaze maintainer, I will apply the patch.

>
> [Patch, microblaze]: 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
>      fixes the above problem for baremetal and also supports the backward compatibility.
>
>      ChangeLog:
>
>      2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
>
>          * 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 and MICROBLAZE_SHR_REGNUM
>          MICROBLAZE_NUM_REGS.
>          (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
>
>          * features/microblaze-cpu.xml: New file.
>
>          * features/microblaze-linux.c: New file.
>
>          * features/microblaze-linux.xml: New file.
>
>          * regformats/reg-microblaze.dat: New file.
>
>          * features/Makefile (microblaze-linux): Add microblaze-linux
>          and microblaze-expedite.
>
>      Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>
> Thanks & Regards
> Ajit
>


-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-12  8:56 [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal Ajit Kumar Agarwal
  2014-06-12 14:52 ` Michael Eager
@ 2014-06-17 11:17 ` Pedro Alves
  2014-06-18 11:06   ` Ajit Kumar Agarwal
  1 sibling, 1 reply; 33+ messages in thread
From: Pedro Alves @ 2014-06-17 11:17 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/12/2014 09:56 AM, Ajit Kumar Agarwal wrote:
> Based on the feedbacks, all changes have been incorporated.
>  
> May I know who will committing this patch to the upstream ?
> 
> [Patch, microblaze]: 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
>     fixes the above problem for baremetal and also supports the backward compatibility.
>     
>     ChangeLog:
>     
>     2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
>     
>         * 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 and MICROBLAZE_SHR_REGNUM
>         MICROBLAZE_NUM_REGS.
>         (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
>     
>         * features/microblaze-cpu.xml: New file.
>     
>         * features/microblaze-linux.c: New file.
>     
>         * features/microblaze-linux.xml: New file.
>     
>         * regformats/reg-microblaze.dat: New file.
> 
>         * features/Makefile (microblaze-linux): Add microblaze-linux
>         and microblaze-expedite.
>     
>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
> 
> Thanks & Regards
> Ajit
> 
> 
> 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch
> 
> 
> From ce1e6c1f1cd7d49df24727fc179df4c3f6f66bee Mon Sep 17 00:00:00 2001
> From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
> Date: Thu, 12 Jun 2014 12:50:16 +0530
> Subject: [PATCH] [Patch, microblaze]: 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
> fixes the above problem for baremetal and also supports the backward compatibility.

Yet, you've named the xml files "linux", and, made the default description
assume GNU/Linux osabi.  That doesn't look right.

> 
> ChangeLog:
> 
> 2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
> 
> 	* 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 and MICROBLAZE_SHR_REGNUM
> 	MICROBLAZE_NUM_REGS.
> 	(microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
> 
> 	* features/microblaze-cpu.xml: New file.
> 
> 	* features/microblaze-linux.c: New file.
> 
> 	* features/microblaze-linux.xml: New file.
> 
> 	* regformats/reg-microblaze.dat: New file.
> 
> 	* features/Makefile (microblaze-linux): Add microblaze-linux
> 	and microblaze-expedite.

No empty line between entries, please.

> 

> +++ b/gdb/features/microblaze-cpu.xml
> @@ -0,0 +1,69 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
> +
> +     Copying and distribution of this file, with or without modification,
> +     are permitted in any medium without royalty provided the copyright
> +     notice and this notice are preserved.  -->
> +
> +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
> +<feature name="org.gnu.gdb.MicroBlaze.cpu">
> +  <reg name="r0" bitsize="32" regnum="0"/>
> +  <reg name="r1" bitsize="32"/>
> +  <reg name="r2" bitsize="32"/>
> +  <reg name="r3" bitsize="32"/>
> +  <reg name="r4" bitsize="32"/>
> +  <reg name="r5" bitsize="32"/>
> +  <reg name="r6" bitsize="32"/>
> +  <reg name="r7" bitsize="32"/>
> +  <reg name="r8" bitsize="32"/>
> +  <reg name="r9" bitsize="32"/>
> +  <reg name="r10" bitsize="32"/>
> +  <reg name="r11" bitsize="32"/>
> +  <reg name="r12" bitsize="32"/>
> +  <reg name="r13" bitsize="32"/>
> +  <reg name="r14" bitsize="32"/>
> +  <reg name="r15" bitsize="32"/>
> +  <reg name="r16" bitsize="32"/>
> +  <reg name="r17" bitsize="32"/>
> +  <reg name="r18" bitsize="32"/>
> +  <reg name="r19" bitsize="32"/>
> +  <reg name="r20" bitsize="32"/>
> +  <reg name="r21" bitsize="32"/>
> +  <reg name="r22" bitsize="32"/>
> +  <reg name="r23" bitsize="32"/>
> +  <reg name="r24" bitsize="32"/>
> +  <reg name="r25" bitsize="32"/>
> +  <reg name="r26" bitsize="32"/>
> +  <reg name="r27" bitsize="32"/>
> +  <reg name="r28" bitsize="32"/>
> +  <reg name="r29" bitsize="32"/>
> +  <reg name="r30" bitsize="32"/>
> +  <reg name="r31" bitsize="32"/>
> +  <reg name="rpc" bitsize="32"/>
> +  <reg name="rmsr" bitsize="32"/>
> +  <reg name="rear" bitsize="32"/>
> +  <reg name="resr" bitsize="32"/>
> +  <reg name="rfsr" bitsize="32"/>
> +  <reg name="rbtr" bitsize="32"/>
> +  <reg name="rpvr0" bitsize="32"/> 
> +  <reg name="rpvr1" bitsize="32"/> 
> +  <reg name="rpvr2" bitsize="32"/> 
> +  <reg name="rpvr3" bitsize="32"/> 
> +  <reg name="rpvr4" bitsize="32"/> 
> +  <reg name="rpvr5" bitsize="32"/> 
> +  <reg name="rpvr6" bitsize="32"/>
> +  <reg name="rpvr7" bitsize="32"/> 
> +  <reg name="rpvr8" bitsize="32"/> 
> +  <reg name="rpvr9" bitsize="32"/> 
> +  <reg name="rpvr10" bitsize="32"/> 
> +  <reg name="rpvr11" bitsize="32"/>
> +  <reg name="redr" bitsize="32"/> 
> +  <reg name="rpid" bitsize="32"/> 
> +  <reg name="rzpr" bitsize="32"/> 
> +  <reg name="rtlbx" bitsize="32"/> 
> +  <reg name="rtlbsx" bitsize="32"/> 
> +  <reg name="rtlblo" bitsize="32"/> 
> +  <reg name="rtlbhi" bitsize="32"/>
> +  <reg name="rslr" bitsize="32"/>
> +  <reg name="rshr" bitsize="32"/>
> +</feature>

I don't think this is right.  What you want to do, is create a
"core" feature, that includes only the set of generic purpose
registers that are always available in all microblaze
configurations.  As discussed, rslr and rshr aren't of that
kind.  Note that most ports call that feature "core":

 $ grep "org.gnu" * | grep cpu
 mips-tdep.c:                                "org.gnu.gdb.mips.cpu");
 nios2-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nios2.cpu");

 $ grep "org.gnu" * | grep core
 aarch64-tdep.c:  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.core");
 arm-tdep.c:                                 "org.gnu.gdb.arm.core");
 i386-tdep.c:  feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
 m68k-tdep.c:                                "org.gnu.gdb.m68k.core");
 m68k-tdep.c:                                    "org.gnu.gdb.coldfire.core");
 m68k-tdep.c:                                    "org.gnu.gdb.fido.core");
 rs6000-tdep.c:                              "org.gnu.gdb.power.core");
 s390-linux-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
 tic6x-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.core");

Btw, note how feature names are all lowercase, so

 "org.gnu.gdb.microblaze"

would be more standard.

Then, you'll want to create another xml description feature for the
C_USE_STACK_PROTECTION microblaze feature, like:

<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.microblaze.stack-protect">
  <reg name="r0" bitsize="32" regnum="0"/>
  <reg name="rslr" bitsize="32"/>
  <reg name="rshr" bitsize="32"/>
</feature>

Finally, a machine that has the stack protection feature enabled
can report a description that makes use of xi:include, like:

<!DOCTYPE target SYSTEM "gdb-target.dtd">
<target>
  <xi:include href="microblaze-core.xml"/>
  <xi:include href="microblaze-stack-protect.xml"/>
</target>

There are several examples of this in the features/ directory.
E.g., see arm-with-vfpv2.xml.

> +static void
> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
> +{
> +      register_remote_g_packet_guess (gdbarch,
> +                                      MICROBLAZE_NUM_REGS, 
> +                                      tdesc_microblaze_linux);
>  
> +      register_remote_g_packet_guess (gdbarch,
> +                                      MICROBLAZE_NUM_REGS-2,
> +                                      tdesc_microblaze_linux);

Now here you'll want to guess different descriptions.  The second
case should guess a description that doesn't include rslr and
rshr at all.

Formatting isn't following the BTW, coding conventions.
Spaces around '-' missing and statements should indented with
2 spaces, not 6.

Thanks,
-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-17 11:17 ` Pedro Alves
@ 2014-06-18 11:06   ` Ajit Kumar Agarwal
  2014-06-18 14:58     ` Michael Eager
  2014-06-18 15:10     ` Pedro Alves
  0 siblings, 2 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-18 11:06 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 11635 bytes --]

Based on the feedback incorporated the changes as mentioned below. Could you please 
review the patch and let me know if its okay.


   [Patch, microblaze]: 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-06-18 Ajit Agarwal <ajitkum@xilinx.com>
    
        * 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 and MICROBLAZE_SHR_REGNUM
        MICROBLAZE_NUM_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/Makefile (microblaze-linux): Add
        microblaze-linux and microblaze-expedite.
        * regformats/microblaze-with-stack-protect.dat: New file.
    
    Signed-off-by:Ajit Agarwal ajitkum@xilinx.com

Thanks & Regards
Ajit

-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Tuesday, June 17, 2014 4:47 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/12/2014 09:56 AM, Ajit Kumar Agarwal wrote:
> Based on the feedbacks, all changes have been incorporated.
>  
> May I know who will committing this patch to the upstream ?
> 
> [Patch, microblaze]: 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
>     fixes the above problem for baremetal and also supports the backward compatibility.
>     
>     ChangeLog:
>     
>     2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
>     
>         * 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 and MICROBLAZE_SHR_REGNUM
>         MICROBLAZE_NUM_REGS.
>         (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
>     
>         * features/microblaze-cpu.xml: New file.
>     
>         * features/microblaze-linux.c: New file.
>     
>         * features/microblaze-linux.xml: New file.
>     
>         * regformats/reg-microblaze.dat: New file.
> 
>         * features/Makefile (microblaze-linux): Add microblaze-linux
>         and microblaze-expedite.
>     
>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
> 
> Thanks & Regards
> Ajit
> 
> 
> 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch
> 
> 
> From ce1e6c1f1cd7d49df24727fc179df4c3f6f66bee Mon Sep 17 00:00:00 2001
> From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
> Date: Thu, 12 Jun 2014 12:50:16 +0530
> Subject: [PATCH] [Patch, microblaze]: 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 fixes the above problem for baremetal and also supports the backward compatibility.

Yet, you've named the xml files "linux", and, made the default description assume GNU/Linux osabi.  That doesn't look right.

> 
> ChangeLog:
> 
> 2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
> 
> 	* 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 and MICROBLAZE_SHR_REGNUM
> 	MICROBLAZE_NUM_REGS.
> 	(microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
> 
> 	* features/microblaze-cpu.xml: New file.
> 
> 	* features/microblaze-linux.c: New file.
> 
> 	* features/microblaze-linux.xml: New file.
> 
> 	* regformats/reg-microblaze.dat: New file.
> 
> 	* features/Makefile (microblaze-linux): Add microblaze-linux
> 	and microblaze-expedite.

No empty line between entries, please.

> 

> +++ b/gdb/features/microblaze-cpu.xml
> @@ -0,0 +1,69 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
> +
> +     Copying and distribution of this file, with or without modification,
> +     are permitted in any medium without royalty provided the copyright
> +     notice and this notice are preserved.  -->
> +
> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature 
> +name="org.gnu.gdb.MicroBlaze.cpu">
> +  <reg name="r0" bitsize="32" regnum="0"/>
> +  <reg name="r1" bitsize="32"/>
> +  <reg name="r2" bitsize="32"/>
> +  <reg name="r3" bitsize="32"/>
> +  <reg name="r4" bitsize="32"/>
> +  <reg name="r5" bitsize="32"/>
> +  <reg name="r6" bitsize="32"/>
> +  <reg name="r7" bitsize="32"/>
> +  <reg name="r8" bitsize="32"/>
> +  <reg name="r9" bitsize="32"/>
> +  <reg name="r10" bitsize="32"/>
> +  <reg name="r11" bitsize="32"/>
> +  <reg name="r12" bitsize="32"/>
> +  <reg name="r13" bitsize="32"/>
> +  <reg name="r14" bitsize="32"/>
> +  <reg name="r15" bitsize="32"/>
> +  <reg name="r16" bitsize="32"/>
> +  <reg name="r17" bitsize="32"/>
> +  <reg name="r18" bitsize="32"/>
> +  <reg name="r19" bitsize="32"/>
> +  <reg name="r20" bitsize="32"/>
> +  <reg name="r21" bitsize="32"/>
> +  <reg name="r22" bitsize="32"/>
> +  <reg name="r23" bitsize="32"/>
> +  <reg name="r24" bitsize="32"/>
> +  <reg name="r25" bitsize="32"/>
> +  <reg name="r26" bitsize="32"/>
> +  <reg name="r27" bitsize="32"/>
> +  <reg name="r28" bitsize="32"/>
> +  <reg name="r29" bitsize="32"/>
> +  <reg name="r30" bitsize="32"/>
> +  <reg name="r31" bitsize="32"/>
> +  <reg name="rpc" bitsize="32"/>
> +  <reg name="rmsr" bitsize="32"/>
> +  <reg name="rear" bitsize="32"/>
> +  <reg name="resr" bitsize="32"/>
> +  <reg name="rfsr" bitsize="32"/>
> +  <reg name="rbtr" bitsize="32"/>
> +  <reg name="rpvr0" bitsize="32"/>
> +  <reg name="rpvr1" bitsize="32"/>
> +  <reg name="rpvr2" bitsize="32"/>
> +  <reg name="rpvr3" bitsize="32"/>
> +  <reg name="rpvr4" bitsize="32"/>
> +  <reg name="rpvr5" bitsize="32"/>
> +  <reg name="rpvr6" bitsize="32"/>
> +  <reg name="rpvr7" bitsize="32"/>
> +  <reg name="rpvr8" bitsize="32"/>
> +  <reg name="rpvr9" bitsize="32"/>
> +  <reg name="rpvr10" bitsize="32"/>
> +  <reg name="rpvr11" bitsize="32"/>
> +  <reg name="redr" bitsize="32"/>
> +  <reg name="rpid" bitsize="32"/>
> +  <reg name="rzpr" bitsize="32"/>
> +  <reg name="rtlbx" bitsize="32"/>
> +  <reg name="rtlbsx" bitsize="32"/>
> +  <reg name="rtlblo" bitsize="32"/>
> +  <reg name="rtlbhi" bitsize="32"/>
> +  <reg name="rslr" bitsize="32"/>
> +  <reg name="rshr" bitsize="32"/>
> +</feature>

I don't think this is right.  What you want to do, is create a "core" feature, that includes only the set of generic purpose registers that are always available in all microblaze configurations.  As discussed, rslr and rshr aren't of that kind.  Note that most ports call that feature "core":

 $ grep "org.gnu" * | grep cpu
 mips-tdep.c:                                "org.gnu.gdb.mips.cpu");
 nios2-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nios2.cpu");

 $ grep "org.gnu" * | grep core
 aarch64-tdep.c:  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.core");
 arm-tdep.c:                                 "org.gnu.gdb.arm.core");
 i386-tdep.c:  feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
 m68k-tdep.c:                                "org.gnu.gdb.m68k.core");
 m68k-tdep.c:                                    "org.gnu.gdb.coldfire.core");
 m68k-tdep.c:                                    "org.gnu.gdb.fido.core");
 rs6000-tdep.c:                              "org.gnu.gdb.power.core");
 s390-linux-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
 tic6x-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.core");

Btw, note how feature names are all lowercase, so

 "org.gnu.gdb.microblaze"

would be more standard.

Then, you'll want to create another xml description feature for the C_USE_STACK_PROTECTION microblaze feature, like:

<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature name="org.gnu.gdb.microblaze.stack-protect">
  <reg name="r0" bitsize="32" regnum="0"/>
  <reg name="rslr" bitsize="32"/>
  <reg name="rshr" bitsize="32"/>
</feature>

Finally, a machine that has the stack protection feature enabled can report a description that makes use of xi:include, like:

<!DOCTYPE target SYSTEM "gdb-target.dtd"> <target>
  <xi:include href="microblaze-core.xml"/>
  <xi:include href="microblaze-stack-protect.xml"/>
</target>

There are several examples of this in the features/ directory.
E.g., see arm-with-vfpv2.xml.

> +static void
> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
> +      register_remote_g_packet_guess (gdbarch,
> +                                      MICROBLAZE_NUM_REGS, 
> +                                      tdesc_microblaze_linux);
>  
> +      register_remote_g_packet_guess (gdbarch,
> +                                      MICROBLAZE_NUM_REGS-2,
> +                                      tdesc_microblaze_linux);

Now here you'll want to guess different descriptions.  The second case should guess a description that doesn't include rslr and rshr at all.

Formatting isn't following the BTW, coding conventions.
Spaces around '-' missing and statements should indented with
2 spaces, not 6.

Thanks,
--
Pedro Alves

[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 18798 bytes --]

From c2b889729c620d8a0aa619681b5617c06e5f68cf Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Wed, 18 Jun 2014 15:57:26 +0530
Subject: [PATCH] [Patch, microblaze]: 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
fixes the above problem for baremetal and also supports the backward compatibility.

ChangeLog:
2014-06-18 Ajit Agarwal <ajitkum@xilinx.com>

	* 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 and MICROBLAZE_SHR_REGNUM
	MICROBLAZE_NUM_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/Makefile (microblaze-linux): Add
	microblaze-linux and microblaze-expedite.
	* regformats/microblaze-with-stack-protect.dat: New file.

Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
---
 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 ++++++++++++++++++++++
 gdb/features/microblaze-with-stack-protect.xml   |   12 +++
 gdb/microblaze-tdep.c                            |   68 +++++++++++++++++--
 gdb/microblaze-tdep.h                            |   49 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 8 files changed, 324 insertions(+), 28 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/regformats/microblaze-with-stack-protect.dat

diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index dbf4963..1c50419 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 0000000..69ef8c6
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..6c53863
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..ab162fd
--- /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, "int");
+  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, "int");
+  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 0000000..f3f233f
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..9408fe9 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -33,13 +33,14 @@
 #include "frame-unwind.h"
 #include "dwarf2-frame.h"
 #include "osabi.h"
-
+#include "features/microblaze-with-stack-protect.c"
 #include "gdb_assert.h"
 #include <string.h>
 #include "target-descriptions.h"
 #include "opcodes/microblaze-opcm.h"
 #include "opcodes/microblaze-dis.h"
 #include "microblaze-tdep.h"
+#include "remote.h"
 \f
 /* Instruction macros used for analyzing the prologue.  */
 /* This set of instruction macros need to be changed whenever the
@@ -73,7 +74,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)
@@ -663,17 +665,68 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   gdb_assert (reg < sizeof (dwarf2_to_reg_map));
   return dwarf2_to_reg_map[reg];
 }
+static void
+microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+  register_remote_g_packet_guess (gdbarch,
+                                  MICROBLAZE_NUM_REGS, 
+                                  tdesc_microblaze_with_stack_protect);
 
+  register_remote_g_packet_guess (gdbarch,
+                                  MICROBLAZE_NUM_REGS - 2,
+                                  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_with_stack_protect;
+  /* 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_REGS - 2 ; 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");
+        }
+     }
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
+
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,7 +778,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-
+  if (tdesc_data)
+    {
+      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      set_gdbarch_register_type (gdbarch, microblaze_register_type);
+    }
   return gdbarch;
 }
 
@@ -736,7 +793,8 @@ void
 _initialize_microblaze_tdep (void)
 {
   register_gdbarch_init (bfd_arch_microblaze, microblaze_gdbarch_init);
-
+  
+  initialize_tdesc_microblaze_with_stack_protect ();
   /* Debug this files internals.  */
   add_setshow_zuinteger_cmd ("microblaze", class_maintenance,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..bbce428 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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_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];    /* Must match MICROBLAZE_NUM_REGS.  */
+
+  /* Table of saved registers.  */
+  struct trad_frame_saved_reg *saved_regs;
+};
 /* All registers are 32 bits.  */
 #define MICROBLAZE_REGISTER_SIZE 4
 
@@ -117,4 +119,5 @@ enum microblaze_regnum
    Only used for native debugging.  */
 #define MICROBLAZE_BREAKPOINT {0xb9, 0xcc, 0x00, 0x60}
 
+
 #endif /* microblaze-tdep.h */
diff --git a/gdb/regformats/microblaze-with-stack-protect.dat b/gdb/regformats/microblaze-with-stack-protect.dat
new file mode 100644
index 0000000..f71c111
--- /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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 11:06   ` Ajit Kumar Agarwal
@ 2014-06-18 14:58     ` Michael Eager
  2014-06-18 15:10     ` Pedro Alves
  1 sibling, 0 replies; 33+ messages in thread
From: Michael Eager @ 2014-06-18 14:58 UTC (permalink / raw)
  To: Ajit Kumar Agarwal, Pedro Alves
  Cc: gdb-patches, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

On 06/18/14 04:05, Ajit Kumar Agarwal wrote:
> Based on the feedback incorporated the changes as mentioned below. Could you please
> review the patch and let me know if its okay.

 From a brief review, the patch looks OK.

There were a number of issues raised previously.  I haven't reviewed the
the comments to see if all have been addressed.

I'll let you know if there are any remaining issues.

>
>
>     [Patch, microblaze]: 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-06-18 Ajit Agarwal <ajitkum@xilinx.com>
>
>          * 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 and MICROBLAZE_SHR_REGNUM
>          MICROBLAZE_NUM_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/Makefile (microblaze-linux): Add
>          microblaze-linux and microblaze-expedite.
>          * regformats/microblaze-with-stack-protect.dat: New file.
>
>      Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>
> Thanks & Regards
> Ajit
>
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Tuesday, June 17, 2014 4:47 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
>
> On 06/12/2014 09:56 AM, Ajit Kumar Agarwal wrote:
>> Based on the feedbacks, all changes have been incorporated.
>>
>> May I know who will committing this patch to the upstream ?
>>
>> [Patch, microblaze]: 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
>>      fixes the above problem for baremetal and also supports the backward compatibility.
>>
>>      ChangeLog:
>>
>>      2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
>>
>>          * 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 and MICROBLAZE_SHR_REGNUM
>>          MICROBLAZE_NUM_REGS.
>>          (microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
>>
>>          * features/microblaze-cpu.xml: New file.
>>
>>          * features/microblaze-linux.c: New file.
>>
>>          * features/microblaze-linux.xml: New file.
>>
>>          * regformats/reg-microblaze.dat: New file.
>>
>>          * features/Makefile (microblaze-linux): Add microblaze-linux
>>          and microblaze-expedite.
>>
>>      Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>>
>> Thanks & Regards
>> Ajit
>>
>>
>> 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch
>>
>>
>>  From ce1e6c1f1cd7d49df24727fc179df4c3f6f66bee Mon Sep 17 00:00:00 2001
>> From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
>> Date: Thu, 12 Jun 2014 12:50:16 +0530
>> Subject: [PATCH] [Patch, microblaze]: 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 fixes the above problem for baremetal and also supports the backward compatibility.
>
> Yet, you've named the xml files "linux", and, made the default description assume GNU/Linux osabi.  That doesn't look right.
>
>>
>> ChangeLog:
>>
>> 2014-06-12 Ajit Agarwal <ajitkum@xilinx.com>
>>
>> 	* 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 and MICROBLAZE_SHR_REGNUM
>> 	MICROBLAZE_NUM_REGS.
>> 	(microblaze_frame_cache): Use of MICROBLAZE_NUM_REGS.
>>
>> 	* features/microblaze-cpu.xml: New file.
>>
>> 	* features/microblaze-linux.c: New file.
>>
>> 	* features/microblaze-linux.xml: New file.
>>
>> 	* regformats/reg-microblaze.dat: New file.
>>
>> 	* features/Makefile (microblaze-linux): Add microblaze-linux
>> 	and microblaze-expedite.
>
> No empty line between entries, please.
>
>>
>
>> +++ b/gdb/features/microblaze-cpu.xml
>> @@ -0,0 +1,69 @@
>> +<?xml version="1.0"?>
>> +<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
>> +
>> +     Copying and distribution of this file, with or without modification,
>> +     are permitted in any medium without royalty provided the copyright
>> +     notice and this notice are preserved.  -->
>> +
>> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature
>> +name="org.gnu.gdb.MicroBlaze.cpu">
>> +  <reg name="r0" bitsize="32" regnum="0"/>
>> +  <reg name="r1" bitsize="32"/>
>> +  <reg name="r2" bitsize="32"/>
>> +  <reg name="r3" bitsize="32"/>
>> +  <reg name="r4" bitsize="32"/>
>> +  <reg name="r5" bitsize="32"/>
>> +  <reg name="r6" bitsize="32"/>
>> +  <reg name="r7" bitsize="32"/>
>> +  <reg name="r8" bitsize="32"/>
>> +  <reg name="r9" bitsize="32"/>
>> +  <reg name="r10" bitsize="32"/>
>> +  <reg name="r11" bitsize="32"/>
>> +  <reg name="r12" bitsize="32"/>
>> +  <reg name="r13" bitsize="32"/>
>> +  <reg name="r14" bitsize="32"/>
>> +  <reg name="r15" bitsize="32"/>
>> +  <reg name="r16" bitsize="32"/>
>> +  <reg name="r17" bitsize="32"/>
>> +  <reg name="r18" bitsize="32"/>
>> +  <reg name="r19" bitsize="32"/>
>> +  <reg name="r20" bitsize="32"/>
>> +  <reg name="r21" bitsize="32"/>
>> +  <reg name="r22" bitsize="32"/>
>> +  <reg name="r23" bitsize="32"/>
>> +  <reg name="r24" bitsize="32"/>
>> +  <reg name="r25" bitsize="32"/>
>> +  <reg name="r26" bitsize="32"/>
>> +  <reg name="r27" bitsize="32"/>
>> +  <reg name="r28" bitsize="32"/>
>> +  <reg name="r29" bitsize="32"/>
>> +  <reg name="r30" bitsize="32"/>
>> +  <reg name="r31" bitsize="32"/>
>> +  <reg name="rpc" bitsize="32"/>
>> +  <reg name="rmsr" bitsize="32"/>
>> +  <reg name="rear" bitsize="32"/>
>> +  <reg name="resr" bitsize="32"/>
>> +  <reg name="rfsr" bitsize="32"/>
>> +  <reg name="rbtr" bitsize="32"/>
>> +  <reg name="rpvr0" bitsize="32"/>
>> +  <reg name="rpvr1" bitsize="32"/>
>> +  <reg name="rpvr2" bitsize="32"/>
>> +  <reg name="rpvr3" bitsize="32"/>
>> +  <reg name="rpvr4" bitsize="32"/>
>> +  <reg name="rpvr5" bitsize="32"/>
>> +  <reg name="rpvr6" bitsize="32"/>
>> +  <reg name="rpvr7" bitsize="32"/>
>> +  <reg name="rpvr8" bitsize="32"/>
>> +  <reg name="rpvr9" bitsize="32"/>
>> +  <reg name="rpvr10" bitsize="32"/>
>> +  <reg name="rpvr11" bitsize="32"/>
>> +  <reg name="redr" bitsize="32"/>
>> +  <reg name="rpid" bitsize="32"/>
>> +  <reg name="rzpr" bitsize="32"/>
>> +  <reg name="rtlbx" bitsize="32"/>
>> +  <reg name="rtlbsx" bitsize="32"/>
>> +  <reg name="rtlblo" bitsize="32"/>
>> +  <reg name="rtlbhi" bitsize="32"/>
>> +  <reg name="rslr" bitsize="32"/>
>> +  <reg name="rshr" bitsize="32"/>
>> +</feature>
>
> I don't think this is right.  What you want to do, is create a "core" feature, that includes only the set of generic purpose registers that are always available in all microblaze configurations.  As discussed, rslr and rshr aren't of that kind.  Note that most ports call that feature "core":
>
>   $ grep "org.gnu" * | grep cpu
>   mips-tdep.c:                                "org.gnu.gdb.mips.cpu");
>   nios2-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nios2.cpu");
>
>   $ grep "org.gnu" * | grep core
>   aarch64-tdep.c:  feature = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.core");
>   arm-tdep.c:                                 "org.gnu.gdb.arm.core");
>   i386-tdep.c:  feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.core");
>   m68k-tdep.c:                                "org.gnu.gdb.m68k.core");
>   m68k-tdep.c:                                    "org.gnu.gdb.coldfire.core");
>   m68k-tdep.c:                                    "org.gnu.gdb.fido.core");
>   rs6000-tdep.c:                              "org.gnu.gdb.power.core");
>   s390-linux-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.s390.core");
>   tic6x-tdep.c:      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.tic6x.core");
>
> Btw, note how feature names are all lowercase, so
>
>   "org.gnu.gdb.microblaze"
>
> would be more standard.
>
> Then, you'll want to create another xml description feature for the C_USE_STACK_PROTECTION microblaze feature, like:
>
> <!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature name="org.gnu.gdb.microblaze.stack-protect">
>    <reg name="r0" bitsize="32" regnum="0"/>
>    <reg name="rslr" bitsize="32"/>
>    <reg name="rshr" bitsize="32"/>
> </feature>
>
> Finally, a machine that has the stack protection feature enabled can report a description that makes use of xi:include, like:
>
> <!DOCTYPE target SYSTEM "gdb-target.dtd"> <target>
>    <xi:include href="microblaze-core.xml"/>
>    <xi:include href="microblaze-stack-protect.xml"/>
> </target>
>
> There are several examples of this in the features/ directory.
> E.g., see arm-with-vfpv2.xml.
>
>> +static void
>> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
>> +      register_remote_g_packet_guess (gdbarch,
>> +                                      MICROBLAZE_NUM_REGS,
>> +                                      tdesc_microblaze_linux);
>>
>> +      register_remote_g_packet_guess (gdbarch,
>> +                                      MICROBLAZE_NUM_REGS-2,
>> +                                      tdesc_microblaze_linux);
>
> Now here you'll want to guess different descriptions.  The second case should guess a description that doesn't include rslr and rshr at all.
>
> Formatting isn't following the BTW, coding conventions.
> Spaces around '-' missing and statements should indented with
> 2 spaces, not 6.
>
> Thanks,
> --
> Pedro Alves
>


-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 11:06   ` Ajit Kumar Agarwal
  2014-06-18 14:58     ` Michael Eager
@ 2014-06-18 15:10     ` Pedro Alves
  2014-06-18 15:30       ` Pedro Alves
  2014-06-18 15:40       ` Ajit Kumar Agarwal
  1 sibling, 2 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-18 15:10 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/18/2014 12:05 PM, Ajit Kumar Agarwal wrote:
>    gdb_assert (reg < sizeof (dwarf2_to_reg_map));
>    return dwarf2_to_reg_map[reg];
>  }
> +static void
> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
> +{
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS, 
> +                                  tdesc_microblaze_with_stack_protect);
>  
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS - 2,
> +                                  tdesc_microblaze_with_stack_protect);

Again, this doesn't make sense.  If the g packet doesn't include
shrl and rslr (the '- 2' case), then the guess should be a
description _without_ the stack protect feature.  Please make sure
you test GDB against such a stub, and confirm that "info registers"
does not show $shrl $rslr.

> +      feature = tdesc_find_feature (tdesc,
> +                                    "org.gnu.gdb.microblaze.core");
> +      if (feature == NULL)
> +        {
> +          return NULL;
> +        }

Unnecessary braces:

      if (feature == NULL)
        return NULL;


> @@ -736,7 +793,8 @@ void
>  _initialize_microblaze_tdep (void)
>  {
>    register_gdbarch_init (bfd_arch_microblaze, microblaze_gdbarch_init);
> -
> +  

This add spurious whitespace at the end of the line.  I bet
running "git am" on your patch complains.

> +  initialize_tdesc_microblaze_with_stack_protect ();
>    /* Debug this files internals.  */
>    add_setshow_zuinteger_cmd ("microblaze", class_maintenance,
>  			     &microblaze_debug_flag, _("\
> diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
> index a532092..bbce428 100644
> --- a/gdb/microblaze-tdep.h
> +++ b/gdb/microblaze-tdep.h
> @@ -26,28 +26,6 @@ struct gdbarch_tdep
>  {
>  };

...

> @@ -117,4 +119,5 @@ enum microblaze_regnum
>     Only used for native debugging.  */
>  #define MICROBLAZE_BREAKPOINT {0xb9, 0xcc, 0x00, 0x60}
>  
> +
>  #endif /* microblaze-tdep.h */

Spurious whitespace change.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 15:10     ` Pedro Alves
@ 2014-06-18 15:30       ` Pedro Alves
  2014-06-18 15:40       ` Ajit Kumar Agarwal
  1 sibling, 0 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-18 15:30 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

Also, I forgot to say -- new xml target features should be documented
in the manual.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 15:10     ` Pedro Alves
  2014-06-18 15:30       ` Pedro Alves
@ 2014-06-18 15:40       ` Ajit Kumar Agarwal
  2014-06-18 15:54         ` Pedro Alves
  1 sibling, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-18 15:40 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

Thanks for the review comments.

-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Wednesday, June 18, 2014 8:41 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/18/2014 12:05 PM, Ajit Kumar Agarwal wrote:
>    gdb_assert (reg < sizeof (dwarf2_to_reg_map));
>    return dwarf2_to_reg_map[reg];
>  }
> +static void
> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS, 
> +                                  
> +tdesc_microblaze_with_stack_protect);
>  
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS - 2,
> +                                  
> + tdesc_microblaze_with_stack_protect);

>>Again, this doesn't make sense.  If the g packet doesn't include shrl and rslr (the '- 2' case), then the guess should be a description _without_ the stack protect feature.  Please make >>sure you test GDB against such a stub, and confirm that "info registers"
>>does not show $shrl $rslr.

The info registers against such a  stub( where the design does not have stack-protect registers) shows the registers $rshr and $rslr but it shows as <unavailable>.  Is the display of $rshr and $rslr happening because of this second guess with -2 case? Is it inappropriate to have the second guess with -2 case?
> +      feature = tdesc_find_feature (tdesc,
> +                                    "org.gnu.gdb.microblaze.core");
> +      if (feature == NULL)
> +        {
> +          return NULL;
> +        }

Unnecessary braces:

      if (feature == NULL)
        return NULL;


> @@ -736,7 +793,8 @@ void
>  _initialize_microblaze_tdep (void)
>  {
>    register_gdbarch_init (bfd_arch_microblaze, 
> microblaze_gdbarch_init);
> -
> +  

This add spurious whitespace at the end of the line.  I bet running "git am" on your patch complains.

> +  initialize_tdesc_microblaze_with_stack_protect ();
>    /* Debug this files internals.  */
>    add_setshow_zuinteger_cmd ("microblaze", class_maintenance,
>  			     &microblaze_debug_flag, _("\
> diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h index 
> a532092..bbce428 100644
> --- a/gdb/microblaze-tdep.h
> +++ b/gdb/microblaze-tdep.h
> @@ -26,28 +26,6 @@ struct gdbarch_tdep  {  };

...

> @@ -117,4 +119,5 @@ enum microblaze_regnum
>     Only used for native debugging.  */
>  #define MICROBLAZE_BREAKPOINT {0xb9, 0xcc, 0x00, 0x60}
>  
> +
>  #endif /* microblaze-tdep.h */

>>Spurious whitespace change.

Thanks for this. I will incorporate this change.
-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 15:40       ` Ajit Kumar Agarwal
@ 2014-06-18 15:54         ` Pedro Alves
  2014-06-18 15:57           ` Ajit Kumar Agarwal
  2014-06-18 19:56           ` Ajit Kumar Agarwal
  0 siblings, 2 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-18 15:54 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/18/2014 04:39 PM, Ajit Kumar Agarwal wrote:

> The info registers against such a  stub( where the design does not
> have stack-protect registers) shows the registers $rshr and $rslr but
> it shows as <unavailable>.  Is the display of $rshr and $rslr happening 
> because of this second guess with -2 case? 

Yes, because you're guessing a target description that includes
the registers.

Is it inappropriate to have the second guess with -2 case?

It is, but you're guessing the wrong description...

In addition to tdesc_microblaze_with_stack_protect, create _another_
description that does _not_ xi:include the stack protect feature, and
register the guess with that:

microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
{
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS - 2,
                                  tdesc_microblaze);
}

I'd add a MICROBLAZE_NUM_CORE_REGS value to the registers enum.  Then
instead of that magic " - 2", you could write:

{
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_CORE_REGS,
                                  tdesc_microblaze);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 15:54         ` Pedro Alves
@ 2014-06-18 15:57           ` Ajit Kumar Agarwal
  2014-06-18 19:56           ` Ajit Kumar Agarwal
  1 sibling, 0 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-18 15:57 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala


Thanks for the clarifications and comments. I will incorporate the change.

Thanks & Regards
Ajit
-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Wednesday, June 18, 2014 9:24 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/18/2014 04:39 PM, Ajit Kumar Agarwal wrote:

> The info registers against such a  stub( where the design does not 
> have stack-protect registers) shows the registers $rshr and $rslr but 
> it shows as <unavailable>.  Is the display of $rshr and $rslr 
> happening because of this second guess with -2 case?

Yes, because you're guessing a target description that includes the registers.

Is it inappropriate to have the second guess with -2 case?

It is, but you're guessing the wrong description...

In addition to tdesc_microblaze_with_stack_protect, create _another_ description that does _not_ xi:include the stack protect feature, and register the guess with that:

microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS - 2,
                                  tdesc_microblaze); }

I'd add a MICROBLAZE_NUM_CORE_REGS value to the registers enum.  Then instead of that magic " - 2", you could write:

{
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_CORE_REGS,
                                  tdesc_microblaze);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 15:54         ` Pedro Alves
  2014-06-18 15:57           ` Ajit Kumar Agarwal
@ 2014-06-18 19:56           ` Ajit Kumar Agarwal
  2014-06-23 13:18             ` Pedro Alves
  1 sibling, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-18 19:56 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 4278 bytes --]

Based on feedback, review comments are incorporated. Could you please review
and let me know if its okay.

    [Patch, microblaze]: 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-06-19 Ajit Agarwal <ajitkum@xilinx.com>
    
        * 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-linux): Add
        microblaze-linux microblaze and microblaze-expedite.
        * regformats/microblaze-with-stack-protect.dat: New file.
        * regformats/microblaze.dat: New file.
    
    Signed-off-by:Ajit Agarwal ajitkum@xilinx.com

-----Original Message-----
From: Ajit Kumar Agarwal 
Sent: Wednesday, June 18, 2014 9:28 PM
To: 'Pedro Alves'
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.


Thanks for the clarifications and comments. I will incorporate the change.

Thanks & Regards
Ajit
-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com]
Sent: Wednesday, June 18, 2014 9:24 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/18/2014 04:39 PM, Ajit Kumar Agarwal wrote:

> The info registers against such a  stub( where the design does not 
> have stack-protect registers) shows the registers $rshr and $rslr but 
> it shows as <unavailable>.  Is the display of $rshr and $rslr 
> happening because of this second guess with -2 case?

Yes, because you're guessing a target description that includes the registers.

Is it inappropriate to have the second guess with -2 case?

It is, but you're guessing the wrong description...

In addition to tdesc_microblaze_with_stack_protect, create _another_ description that does _not_ xi:include the stack protect feature, and register the guess with that:

microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS - 2,
                                  tdesc_microblaze); }

I'd add a MICROBLAZE_NUM_CORE_REGS value to the registers enum.  Then instead of that magic " - 2", you could write:

{
  register_remote_g_packet_guess (gdbarch,
				  MICROBLAZE_NUM_CORE_REGS,
                                  tdesc_microblaze);

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

--
Pedro Alves


[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 24773 bytes --]

From 08048efadac93fe04c6f381413b3abe129f07721 Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Thu, 19 Jun 2014 01:15:06 +0530
Subject: [PATCH] [Patch, microblaze]: 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-06-19 Ajit Agarwal <ajitkum@xilinx.com>

	* 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-linux): Add
	microblaze-linux microblaze and microblaze-expedite.
	* regformats/microblaze-with-stack-protect.dat: New file.
	* regformats/microblaze.dat: New file.

Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
---
 gdb/features/Makefile                            |    3 +
 gdb/features/microblaze-core.xml                 |   67 ++++++++++++++++++
 gdb/features/microblaze-stack-protect.xml        |   12 +++
 gdb/features/microblaze-with-stack-protect.c     |   79 ++++++++++++++++++++++
 gdb/features/microblaze-with-stack-protect.xml   |   12 +++
 gdb/features/microblaze.c                        |   75 ++++++++++++++++++++
 gdb/features/microblaze.xml                      |   11 +++
 gdb/microblaze-tdep.c                            |   65 +++++++++++++++++-
 gdb/microblaze-tdep.h                            |   48 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 gdb/regformats/microblaze.dat                    |   61 +++++++++++++++++
 11 files changed, 470 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/features/Makefile b/gdb/features/Makefile
index dbf4963..9245689 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -46,6 +46,8 @@ WHICH = aarch64 \
 	i386/x32-avx i386/x32-avx-linux \
 	i386/x32-avx512 i386/x32-avx512-linux \
 	mips-linux mips-dsp-linux \
+	microblaze \
+	microblaze-with-stack-protect \
 	mips64-linux mips64-dsp-linux \
 	nios2-linux \
 	rs6000/powerpc-32 \
@@ -90,6 +92,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 0000000..69ef8c6
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..6c53863
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..ab162fd
--- /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, "int");
+  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, "int");
+  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 0000000..f3f233f
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
new file mode 100644
index 0000000..b6c57b1
--- /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, "int");
+  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, "int");
+  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 0000000..715b48c
--- /dev/null
+++ b/gdb/features/microblaze.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..667c99b 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -33,13 +33,15 @@
 #include "frame-unwind.h"
 #include "dwarf2-frame.h"
 #include "osabi.h"
-
+#include "features/microblaze-with-stack-protect.c"
+#include "features/microblaze.c"
 #include "gdb_assert.h"
 #include <string.h>
 #include "target-descriptions.h"
 #include "opcodes/microblaze-opcm.h"
 #include "opcodes/microblaze-dis.h"
 #include "microblaze-tdep.h"
+#include "remote.h"
 \f
 /* Instruction macros used for analyzing the prologue.  */
 /* This set of instruction macros need to be changed whenever the
@@ -73,7 +75,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)
@@ -663,17 +666,67 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   gdb_assert (reg < sizeof (dwarf2_to_reg_map));
   return dwarf2_to_reg_map[reg];
 }
+static void
+microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+  register_remote_g_packet_guess (gdbarch,
+                                  MICROBLAZE_NUM_CORE_REGS, 
+                                  tdesc_microblaze);
 
+  register_remote_g_packet_guess (gdbarch,
+                                  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_with_stack_protect;
+  /* 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");
+        }
+     }
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
+
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,7 +778,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-
+  if (tdesc_data)
+    {
+      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      set_gdbarch_register_type (gdbarch, microblaze_register_type);
+    }
   return gdbarch;
 }
 
@@ -737,6 +794,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,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..cdb531b 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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];    /* Must match 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 0000000..14a174c
--- /dev/null
+++ b/gdb/regformats/microblaze-with-stack-protect.dat
@@ -0,0 +1,63 @@
+# DO NOT EDIT: generated from microblaze-linux.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 0000000..fbc3edb
--- /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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-18 19:56           ` Ajit Kumar Agarwal
@ 2014-06-23 13:18             ` Pedro Alves
  2014-06-23 19:36               ` Ajit Kumar Agarwal
  0 siblings, 1 reply; 33+ messages in thread
From: Pedro Alves @ 2014-06-23 13:18 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/18/2014 08:56 PM, Ajit Kumar Agarwal wrote:
> Based on feedback, review comments are incorporated. Could you please review
> and let me know if its okay.
> 
>     [Patch, microblaze]: 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

(Please mind the the missing spaces after period in the commit log above.)

>     fixes the above problem for baremetal and also supports the backward compatibility.
>     
>     ChangeLog:
>     2014-06-19 Ajit Agarwal <ajitkum@xilinx.com>

Two spaces before and after name.

> +<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.

I assume this 2007 was just a copy/paste?  As this is all new content
only "2014" is appropriate.

> +++ b/gdb/features/microblaze-stack-protect.xml
> @@ -0,0 +1,12 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.

Likewise.


> +  if (tdesc_has_registers (tdesc))
> +    {
> +

Spurious empty line.

> +      const struct tdesc_feature *feature;


> +      int valid_p;
> +      int i;
> +      feature = tdesc_find_feature (tdesc,

Empty line after declarations missing.

> +                                    "org.gnu.gdb.microblaze.core");
> +      if (feature == NULL)
> +          return NULL;

Indentation of the return statement isn't right.

> +      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");
> +        }
> +     }
> +  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
> +  gdbarch = gdbarch_alloc (&info, tdep);
> +
> +  microblaze_register_g_packet_guesses (gdbarch);
> +
>  
>    /* Allocate space for the new architecture.  */
>    tdep = XNEW (struct gdbarch_tdep);
> @@ -725,7 +778,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>    dwarf2_append_unwinders (gdbarch);
>    frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
>    frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
> -
> +  if (tdesc_data)

Write:

  if (tdesc_data != NULL)

Otherwise I have no further comments.

Thanks,
-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-23 13:18             ` Pedro Alves
@ 2014-06-23 19:36               ` Ajit Kumar Agarwal
  2014-06-24  9:13                 ` Pedro Alves
  0 siblings, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-23 19:36 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 29264 bytes --]

Thanks Pedro for the suggestions and review comments. Based on the feedback, the patch
attached.

    [Patch, microblaze]: 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-06-24  Ajit Agarwal  <ajitkum@xilinx.com>
    
        * 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.

    Signed-off-by:Ajit Agarwal ajitkum@xilinx.com

---
 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 ++++++++++++++++++++++
 gdb/features/microblaze-with-stack-protect.xml   |   12 +++
 gdb/features/microblaze.c                        |   75 ++++++++++++++++++++
 gdb/features/microblaze.xml                      |   11 +++
 gdb/microblaze-tdep.c                            |   64 +++++++++++++++++-
 gdb/microblaze-tdep.h                            |   48 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 gdb/regformats/microblaze.dat                    |   61 +++++++++++++++++
 11 files changed, 468 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/features/Makefile b/gdb/features/Makefile
index dbf4963..1c50419 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 0000000..874b138
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..d18bb0c
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..ab162fd
--- /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, "int");
+  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, "int");
+  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 0000000..8f62a38
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
new file mode 100644
index 0000000..b6c57b1
--- /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, "int");
+  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, "int");
+  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 0000000..571f17f
--- /dev/null
+++ b/gdb/features/microblaze.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..c57437c 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -33,13 +33,15 @@
 #include "frame-unwind.h"
 #include "dwarf2-frame.h"
 #include "osabi.h"
-
+#include "features/microblaze-with-stack-protect.c"
+#include "features/microblaze.c"
 #include "gdb_assert.h"
 #include <string.h>
 #include "target-descriptions.h"
 #include "opcodes/microblaze-opcm.h"
 #include "opcodes/microblaze-dis.h"
 #include "microblaze-tdep.h"
+#include "remote.h"
 

 /* Instruction macros used for analyzing the prologue.  */
 /* This set of instruction macros need to be changed whenever the
@@ -73,7 +75,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)
@@ -663,17 +666,66 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   gdb_assert (reg < sizeof (dwarf2_to_reg_map));
   return dwarf2_to_reg_map[reg];
 }
+static void
+microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+  register_remote_g_packet_guess (gdbarch,
+                                  MICROBLAZE_NUM_CORE_REGS, 
+                                  tdesc_microblaze);
 
+  register_remote_g_packet_guess (gdbarch,
+                                  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_with_stack_protect;
+  /* 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");
+        }
+     }
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,7 +777,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-
+  if (tdesc_data != NULL)
+    {
+      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      set_gdbarch_register_type (gdbarch, microblaze_register_type);
+    }
   return gdbarch;
 }
 
@@ -737,6 +793,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,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..cdb531b 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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];    /* Must match 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 0000000..14a174c
--- /dev/null
+++ b/gdb/regformats/microblaze-with-stack-protect.dat
@@ -0,0 +1,63 @@
+# DO NOT EDIT: generated from microblaze-linux.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 0000000..fbc3edb
--- /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
-- 
1.7.1

Thanks & Regards
Ajit
 
-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Monday, June 23, 2014 6:48 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/18/2014 08:56 PM, Ajit Kumar Agarwal wrote:
> Based on feedback, review comments are incorporated. Could you please 
> review and let me know if its okay.
> 
>     [Patch, microblaze]: 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

(Please mind the the missing spaces after period in the commit log above.)

>     fixes the above problem for baremetal and also supports the backward compatibility.
>     
>     ChangeLog:
>     2014-06-19 Ajit Agarwal <ajitkum@xilinx.com>

Two spaces before and after name.

> +<!-- Copyright (C) 2007-2014 Free Software Foundation, Inc.

I assume this 2007 was just a copy/paste?  As this is all new content only "2014" is appropriate.

> +++ b/gdb/features/microblaze-stack-protect.xml
> @@ -0,0 +1,12 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2009-2014 Free Software Foundation, Inc.

Likewise.


> +  if (tdesc_has_registers (tdesc))
> +    {
> +

Spurious empty line.

> +      const struct tdesc_feature *feature;


> +      int valid_p;
> +      int i;
> +      feature = tdesc_find_feature (tdesc,

Empty line after declarations missing.

> +                                    "org.gnu.gdb.microblaze.core");
> +      if (feature == NULL)
> +          return NULL;

Indentation of the return statement isn't right.

> +      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");
> +        }
> +     }
> +  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));  gdbarch = 
> + gdbarch_alloc (&info, tdep);
> +
> +  microblaze_register_g_packet_guesses (gdbarch);
> +
>  
>    /* Allocate space for the new architecture.  */
>    tdep = XNEW (struct gdbarch_tdep);
> @@ -725,7 +778,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>    dwarf2_append_unwinders (gdbarch);
>    frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
>    frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
> -
> +  if (tdesc_data)

Write:

  if (tdesc_data != NULL)

Otherwise I have no further comments.

Thanks,
--
Pedro Alves


[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 24771 bytes --]

From 1b2a5986de1db0b279eae4e8ded545dcf40edd3f Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Tue, 24 Jun 2014 00:49:14 +0530
Subject: [PATCH] [Patch, microblaze]: 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-06-24  Ajit Agarwal  <ajitkum@xilinx.com>

	* 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.

Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
---
 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 ++++++++++++++++++++++
 gdb/features/microblaze-with-stack-protect.xml   |   12 +++
 gdb/features/microblaze.c                        |   75 ++++++++++++++++++++
 gdb/features/microblaze.xml                      |   11 +++
 gdb/microblaze-tdep.c                            |   64 +++++++++++++++++-
 gdb/microblaze-tdep.h                            |   48 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 gdb/regformats/microblaze.dat                    |   61 +++++++++++++++++
 11 files changed, 468 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/features/Makefile b/gdb/features/Makefile
index dbf4963..1c50419 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 0000000..874b138
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..d18bb0c
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..ab162fd
--- /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, "int");
+  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, "int");
+  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 0000000..8f62a38
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
new file mode 100644
index 0000000..b6c57b1
--- /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, "int");
+  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, "int");
+  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 0000000..571f17f
--- /dev/null
+++ b/gdb/features/microblaze.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..c57437c 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -33,13 +33,15 @@
 #include "frame-unwind.h"
 #include "dwarf2-frame.h"
 #include "osabi.h"
-
+#include "features/microblaze-with-stack-protect.c"
+#include "features/microblaze.c"
 #include "gdb_assert.h"
 #include <string.h>
 #include "target-descriptions.h"
 #include "opcodes/microblaze-opcm.h"
 #include "opcodes/microblaze-dis.h"
 #include "microblaze-tdep.h"
+#include "remote.h"
 \f
 /* Instruction macros used for analyzing the prologue.  */
 /* This set of instruction macros need to be changed whenever the
@@ -73,7 +75,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)
@@ -663,17 +666,66 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   gdb_assert (reg < sizeof (dwarf2_to_reg_map));
   return dwarf2_to_reg_map[reg];
 }
+static void
+microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
+{
+  register_remote_g_packet_guess (gdbarch,
+                                  MICROBLAZE_NUM_CORE_REGS, 
+                                  tdesc_microblaze);
 
+  register_remote_g_packet_guess (gdbarch,
+                                  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_with_stack_protect;
+  /* 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");
+        }
+     }
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,7 +777,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
-
+  if (tdesc_data != NULL)
+    {
+      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
+      set_gdbarch_register_type (gdbarch, microblaze_register_type);
+    }
   return gdbarch;
 }
 
@@ -737,6 +793,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,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..cdb531b 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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];    /* Must match 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 0000000..14a174c
--- /dev/null
+++ b/gdb/regformats/microblaze-with-stack-protect.dat
@@ -0,0 +1,63 @@
+# DO NOT EDIT: generated from microblaze-linux.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 0000000..fbc3edb
--- /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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-23 19:36               ` Ajit Kumar Agarwal
@ 2014-06-24  9:13                 ` Pedro Alves
  2014-06-24 10:28                   ` Ajit Kumar Agarwal
  0 siblings, 1 reply; 33+ messages in thread
From: Pedro Alves @ 2014-06-24  9:13 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

Hi,

I read this again and found things I should have mentioned before
or things I mentioned before but weren't addressed.  See below.

On 06/23/2014 08:36 PM, Ajit Kumar Agarwal wrote:

> diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
> index 14c1b52..c57437c 100644
> --- a/gdb/microblaze-tdep.c
> +++ b/gdb/microblaze-tdep.c
> @@ -33,13 +33,15 @@
>  #include "frame-unwind.h"
>  #include "dwarf2-frame.h"
>  #include "osabi.h"
> -
> +#include "features/microblaze-with-stack-protect.c"
> +#include "features/microblaze.c"
>  #include "gdb_assert.h"

A little odd to see the .c files included in the middle of the .h
files.  All other files seem to include the ".c" files
after all the .h files.  I wonder which existing file you modelled
from?

>  #include <string.h>
>  #include "target-descriptions.h"
>  #include "opcodes/microblaze-opcm.h"
>  #include "opcodes/microblaze-dis.h"
>  #include "microblaze-tdep.h"
> +#include "remote.h"
>  
> 
>  /* Instruction macros used for analyzing the prologue.  */
>  /* This set of instruction macros need to be changed whenever the
> @@ -73,7 +75,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)
> @@ -663,17 +666,66 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
>    gdb_assert (reg < sizeof (dwarf2_to_reg_map));
>    return dwarf2_to_reg_map[reg];
>  }
> +static void

Please make you sure there's an empty line between functions.  I
believe I commented on this before.

> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch)
> +{
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_CORE_REGS, 
> +                                  tdesc_microblaze);
>  
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS,
> +                                  tdesc_microblaze_with_stack_protect);
> +}
>  static struct gdbarch *

Here too.

>  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_with_stack_protect;

Shouldn't the default be to _not_ assume stack protect ?

> +  /* 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");
> +        }
> +     }
> +  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
> +  gdbarch = gdbarch_alloc (&info, tdep);
> +
> +  microblaze_register_g_packet_guesses (gdbarch);
>  
>    /* Allocate space for the new architecture.  */
>    tdep = XNEW (struct gdbarch_tdep);
> @@ -725,7 +777,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>    dwarf2_append_unwinders (gdbarch);
>    frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
>    frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
> -
> +  if (tdesc_data != NULL)
> +    {
> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
> +      set_gdbarch_register_type (gdbarch, microblaze_register_type);

Hmm, why is this set_gdbarch_register_type call necessary?

> +    }
>    return gdbarch;
>  }
>  


> +  /* Offsets to saved registers.  */
> +  int register_offsets[MICROBLAZE_NUM_REGS];    /* Must match MICROBLAZE_NUM_REGS.  */

The "Must match MICROBLAZE_NUM_REGS" comment now looks unnecessary to me.

As I mentioned before, please don't forget to document the new target
features in the manual.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24  9:13                 ` Pedro Alves
@ 2014-06-24 10:28                   ` Ajit Kumar Agarwal
  2014-06-24 12:06                     ` Pedro Alves
  0 siblings, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-24 10:28 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala



-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Tuesday, June 24, 2014 2:44 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

Hi,

>>I read this again and found things I should have mentioned before or things I mentioned before but weren't addressed.  See below.

Thanks !!

On 06/23/2014 08:36 PM, Ajit Kumar Agarwal wrote:

> diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c index 
> 14c1b52..c57437c 100644
> --- a/gdb/microblaze-tdep.c
> +++ b/gdb/microblaze-tdep.c
> @@ -33,13 +33,15 @@
>  #include "frame-unwind.h"
>  #include "dwarf2-frame.h"
>  #include "osabi.h"
> -
> +#include "features/microblaze-with-stack-protect.c"
> +#include "features/microblaze.c"
>  #include "gdb_assert.h"

>>A little odd to see the .c files included in the middle of the .h files.  All other files seem to include the ".c" files after all the .h files.  I wonder which existing file you modelled from?

I will incorporate this change.

>  #include <string.h>
>  #include "target-descriptions.h"
>  #include "opcodes/microblaze-opcm.h"
>  #include "opcodes/microblaze-dis.h"
>  #include "microblaze-tdep.h"
> +#include "remote.h"
>  
> 
>  /* Instruction macros used for analyzing the prologue.  */
>  /* This set of instruction macros need to be changed whenever the @@ 
> -73,7 +75,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) @@ 
> -663,17 +666,66 @@ microblaze_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
>    gdb_assert (reg < sizeof (dwarf2_to_reg_map));
>    return dwarf2_to_reg_map[reg];
>  }
> +static void

>>Please make you sure there's an empty line between functions.  I believe I commented on this before.

I will make this change.

> +microblaze_register_g_packet_guesses (struct gdbarch *gdbarch) {
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_CORE_REGS, 
> +                                  tdesc_microblaze);
>  
> +  register_remote_g_packet_guess (gdbarch,
> +                                  MICROBLAZE_NUM_REGS,
> +                                  
> +tdesc_microblaze_with_stack_protect);
> +}
>  static struct gdbarch *

Here too.

>  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_with_stack_protect;

Shouldn't the default be to _not_ assume stack protect ?

The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.

> +  /* 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");
> +        }
> +     }
> +  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));  gdbarch = 
> + gdbarch_alloc (&info, tdep);
> +
> +  microblaze_register_g_packet_guesses (gdbarch);
>  
>    /* Allocate space for the new architecture.  */
>    tdep = XNEW (struct gdbarch_tdep);
> @@ -725,7 +777,11 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>    dwarf2_append_unwinders (gdbarch);
>    frame_unwind_append_unwinder (gdbarch, &microblaze_frame_unwind);
>    frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
> -
> +  if (tdesc_data != NULL)
> +    {
> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
> +      set_gdbarch_register_type (gdbarch, microblaze_register_type);

>>Hmm, why is this set_gdbarch_register_type call necessary?

/* Override tdesc_register_type to adjust the types of VFP
         registers for NEON.  */
This is done for arm target  to set the different type for VFP registers for Neon with Boolean flags is set before this call for VFP registers. In the microblaze target it's not required for special case of stack protect as the microblaze_register_type always return builtin_int for these stack protect registers.


> +    }
>    return gdbarch;
>  }
>  


> +  /* Offsets to saved registers.  */
> +  int register_offsets[MICROBLAZE_NUM_REGS];    /* Must match MICROBLAZE_NUM_REGS.  */

>>The "Must match MICROBLAZE_NUM_REGS" comment now looks unnecessary to me.

I will make this change.

>>As I mentioned before, please don't forget to document the new target features in the manual.

Would you mind in explaining which manual need to be changed for the new target.
--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 10:28                   ` Ajit Kumar Agarwal
@ 2014-06-24 12:06                     ` Pedro Alves
  2014-06-24 12:31                       ` Ajit Kumar Agarwal
  2014-06-24 14:11                       ` Michael Eager
  0 siblings, 2 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-24 12:06 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/24/2014 11:28 AM, Ajit Kumar Agarwal wrote:

>> +  if (tdesc == NULL)
>> +    tdesc = tdesc_microblaze_with_stack_protect;
> 
> Shouldn't the default be to _not_ assume stack protect ?
> 
> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.

But you've already added the G packet size guess for that.

>> -
>> +  if (tdesc_data != NULL)
>> +    {
>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>> +      set_gdbarch_register_type (gdbarch, microblaze_register_type);
> 
>>> Hmm, why is this set_gdbarch_register_type call necessary?
> 
> /* Override tdesc_register_type to adjust the types of VFP
>          registers for NEON.  */
> This is done for arm target  to set the different type for VFP registers for Neon with Boolean flags is set before this call for VFP registers. In the microblaze target it's not required for special case of stack protect as the microblaze_register_type always return builtin_int for these stack protect registers.
> 
> 

Right.

>>> As I mentioned before, please don't forget to document the new target features in the manual.
> 
> Would you mind in explaining which manual need to be changed for the new target.

The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target
features.  See the "Standard Target Features" node, and add a new subsection
for MicroBlaze.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 12:06                     ` Pedro Alves
@ 2014-06-24 12:31                       ` Ajit Kumar Agarwal
  2014-06-24 12:46                         ` Pedro Alves
  2014-06-24 14:11                       ` Michael Eager
  1 sibling, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-24 12:31 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala



-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Tuesday, June 24, 2014 5:36 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/24/2014 11:28 AM, Ajit Kumar Agarwal wrote:

>> +  if (tdesc == NULL)
>> +    tdesc = tdesc_microblaze_with_stack_protect;
> 
> Shouldn't the default be to _not_ assume stack protect ?
> 
> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.

>> But you've already added the G packet size guess for that.

In this case is it correct to say 
If (tdesc  == NULL)
  tdesc = tdesc_microblaze; 

instead of tdesc_microblaze_with_stack_protect?

>> -
>> +  if (tdesc_data != NULL)
>> +    {
>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>> +      set_gdbarch_register_type (gdbarch, microblaze_register_type);
> 
>>> Hmm, why is this set_gdbarch_register_type call necessary?
> 
> /* Override tdesc_register_type to adjust the types of VFP
>          registers for NEON.  */
> This is done for arm target  to set the different type for VFP registers for Neon with Boolean flags is set before this call for VFP registers. In the microblaze target it's not required for special case of stack protect as the microblaze_register_type always return builtin_int for these stack protect registers.
> 
> 

Right.

>>> As I mentioned before, please don't forget to document the new target features in the manual.
> 
> Would you mind in explaining which manual need to be changed for the new target.

>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.

Thanks !! I will add subsection for Microblaze target.
--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 12:31                       ` Ajit Kumar Agarwal
@ 2014-06-24 12:46                         ` Pedro Alves
  2014-06-24 13:27                           ` Ajit Kumar Agarwal
  2014-06-30 10:32                           ` Ajit Kumar Agarwal
  0 siblings, 2 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-24 12:46 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/24/2014 01:31 PM, Ajit Kumar Agarwal wrote:

>>
>> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.
> 
>>> But you've already added the G packet size guess for that.
> 
> In this case is it correct to say 
> If (tdesc  == NULL)
>   tdesc = tdesc_microblaze; 
> 
> instead of tdesc_microblaze_with_stack_protect?

Yes.

> 
>>> -
>>> +  if (tdesc_data != NULL)
>>> +    {
>>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>>> +      set_gdbarch_register_type (gdbarch, microblaze_register_type);
>>
>>>> Hmm, why is this set_gdbarch_register_type call necessary?
>>
>> /* Override tdesc_register_type to adjust the types of VFP
>>          registers for NEON.  */
>> This is done for arm target  to set the different type for VFP registers for Neon with Boolean flags is set before this call for VFP registers. In the microblaze target it's not required for special case of stack protect as 
> the microblaze_register_type always return builtin_int for these stack protect registers.
> 
> Right.

Actually, not right...  This comment doesn't really appear to be correct:

> In the microblaze target it's not required for special case of stack protect as
> the microblaze_register_type always return builtin_int for these stack protect registers.


static struct type *
microblaze_register_type (struct gdbarch *gdbarch, int regnum)
{
  if (regnum == MICROBLAZE_SP_REGNUM)
    return builtin_type (gdbarch)->builtin_data_ptr;

  if (regnum == MICROBLAZE_PC_REGNUM)
    return builtin_type (gdbarch)->builtin_func_ptr;

  return builtin_type (gdbarch)->builtin_int;
}

MICROBLAZE_SP_REGNUM and MICROBLAZE_PC_REGNUM clearly
aren't builtin_int...

Doesn't your patch change the output of "ptype $sp" and
"ptype $pc" ?

That points at something missing in the target description:

> +<!DOCTYPE feature SYSTEM "gdb-target.dtd">
> +<feature name="org.gnu.gdb.microblaze.core">
> +  <reg name="r1" bitsize="32"/>
...
> +  <reg name="rpc" bitsize="32"/>

AFAICS, SP is "r1", and PC is "rpc".  These should be marked with
type="data_ptr" and type="code_ptr" .

> 
>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>
>> Would you mind in explaining which manual need to be changed for the new target.
> 
>>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.
> 
> Thanks !! I will add subsection for Microblaze target.

Thank you.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 12:46                         ` Pedro Alves
@ 2014-06-24 13:27                           ` Ajit Kumar Agarwal
  2014-06-30 10:32                           ` Ajit Kumar Agarwal
  1 sibling, 0 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-24 13:27 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala



-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Tuesday, June 24, 2014 6:17 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/24/2014 01:31 PM, Ajit Kumar Agarwal wrote:

>>
>> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.
> 
>>> But you've already added the G packet size guess for that.
> 
> In this case is it correct to say
> If (tdesc  == NULL)
>   tdesc = tdesc_microblaze;
> 
> instead of tdesc_microblaze_with_stack_protect?

Yes.

> 
>>> -
>>> +  if (tdesc_data != NULL)
>>> +    {
>>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>>> +      set_gdbarch_register_type (gdbarch, 
>>> + microblaze_register_type);
>>
>>>> Hmm, why is this set_gdbarch_register_type call necessary?
>>
>> /* Override tdesc_register_type to adjust the types of VFP
>>          registers for NEON.  */
>> This is done for arm target  to set the different type for VFP 
>> registers for Neon with Boolean flags is set before this call for VFP 
>> registers. In the microblaze target it's not required for special 
>> case of stack protect as
> the microblaze_register_type always return builtin_int for these stack protect registers.
> 
> Right.

Actually, not right...  This comment doesn't really appear to be correct:

> In the microblaze target it's not required for special case of stack 
> protect as the microblaze_register_type always return builtin_int for these stack protect registers.



>>static struct type *
>>microblaze_register_type (struct gdbarch *gdbarch, int regnum) {
  >>if (regnum == MICROBLAZE_SP_REGNUM)
   >> return builtin_type (gdbarch)->builtin_data_ptr;

  >>if (regnum == MICROBLAZE_PC_REGNUM)
    >>return builtin_type (gdbarch)->builtin_func_ptr;

  >>return builtin_type (gdbarch)->builtin_int; }

What I meant the stack protect register are neither MICROBLAZE_SP_REGNUM nor MICROBLAZE_PC_REGNUM so it always return register_type as builtin_int as derived from the code.

MICROBLAZE_SP_REGNUM and MICROBLAZE_PC_REGNUM clearly aren't builtin_int...

>>Doesn't your patch change the output of "ptype $sp" and "ptype $pc" ?

I will check this and add the changes mentioned below in xml files.

That points at something missing in the target description:

> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature 
> +name="org.gnu.gdb.microblaze.core">
> +  <reg name="r1" bitsize="32"/>
...
> +  <reg name="rpc" bitsize="32"/>

>>AFAICS, SP is "r1", and PC is "rpc".  These should be marked with type="data_ptr" and type="code_ptr" .

Surely I will do this.

> 
>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>
>> Would you mind in explaining which manual need to be changed for the new target.
> 
>>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.
> 
> Thanks !! I will add subsection for Microblaze target.

Thank you.

--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 12:06                     ` Pedro Alves
  2014-06-24 12:31                       ` Ajit Kumar Agarwal
@ 2014-06-24 14:11                       ` Michael Eager
  2014-06-25 13:00                         ` Ajit Kumar Agarwal
  2014-06-25 14:09                         ` Pedro Alves
  1 sibling, 2 replies; 33+ messages in thread
From: Michael Eager @ 2014-06-24 14:11 UTC (permalink / raw)
  To: Pedro Alves, Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/24/14 05:05, Pedro Alves wrote:
> On 06/24/2014 11:28 AM, Ajit Kumar Agarwal wrote:
>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>
>> Would you mind in explaining which manual need to be changed for the new target.
>
> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target
> features.  See the "Standard Target Features" node, and add a new subsection
> for MicroBlaze.

microblaze-gdb connects to the target using a JTAG interface which talks
to a Xilinx-proprietary program called XMD.  XMD implements the gdbserver
protocol.  As far as I'm aware, XMD does not provide target feature
descriptions.

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 14:11                       ` Michael Eager
@ 2014-06-25 13:00                         ` Ajit Kumar Agarwal
  2014-06-25 14:09                         ` Pedro Alves
  1 sibling, 0 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-25 13:00 UTC (permalink / raw)
  To: Michael Eager, Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala



-----Original Message-----
From: Michael Eager [mailto:eager@eagerm.com] 
Sent: Tuesday, June 24, 2014 7:41 PM
To: Pedro Alves; Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/24/14 05:05, Pedro Alves wrote:
> On 06/24/2014 11:28 AM, Ajit Kumar Agarwal wrote:
>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>
>> Would you mind in explaining which manual need to be changed for the new target.
>
> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML 
> target features.  See the "Standard Target Features" node, and add a 
> new subsection for MicroBlaze.

>>microblaze-gdb connects to the target using a JTAG interface which talks to a Xilinx-proprietary program called XMD.  XMD implements the gdbserver protocol.  As far as I'm aware, >>XMD does not provide target feature descriptions.

XMD gdb server does not have target feature descriptions. 
-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 14:11                       ` Michael Eager
  2014-06-25 13:00                         ` Ajit Kumar Agarwal
@ 2014-06-25 14:09                         ` Pedro Alves
  1 sibling, 0 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-25 14:09 UTC (permalink / raw)
  To: Michael Eager, Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/24/2014 03:10 PM, Michael Eager wrote:
> On 06/24/14 05:05, Pedro Alves wrote:
>> On 06/24/2014 11:28 AM, Ajit Kumar Agarwal wrote:
>>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>>
>>> Would you mind in explaining which manual need to be changed for the new target.
>>
>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target
>> features.  See the "Standard Target Features" node, and add a new subsection
>> for MicroBlaze.
> 
> microblaze-gdb connects to the target using a JTAG interface which talks
> to a Xilinx-proprietary program called XMD.  XMD implements the gdbserver
> protocol.  As far as I'm aware, XMD does not provide target feature
> descriptions.

It's expected that XMD does not provide target descriptions, because the support
on the GDB side was missing.  Ajit's patch teaches the microblaze port about
a couple new standard features.  All standard xml target features are defined
by GDB, and should be documented.  Nothing stops GDB from talking to servers other
than XMD after all.  After the patch is in, if future XMDs (or other servers) want to
expose random microblaze registers to GDB, like, e.g., I/O control registers, it
just needs to send in a target description that includes them, and GDB will
present them (without GDB changes).  Meanwhile, Ajit's patch keeps compatibility
with current XMDs by adding a G packet size to target description
mapping (a standard transitioning mechanism also used by ARM and MIPS).

Hope that clarifies things.

Thanks,
-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-24 12:46                         ` Pedro Alves
  2014-06-24 13:27                           ` Ajit Kumar Agarwal
@ 2014-06-30 10:32                           ` Ajit Kumar Agarwal
  2014-06-30 10:55                             ` Pedro Alves
  2014-06-30 14:47                             ` Michael Eager
  1 sibling, 2 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-30 10:32 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 5464 bytes --]

Based on the feedback, updated the patch with the review comments.
    
[Patch, microblaze]: 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-06-26  Ajit Agarwal  <ajitkum@xilinx.com>
    
        * 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

> In this case is it correct to say
> If (tdesc  == NULL)
>   tdesc = tdesc_microblaze;
> 
> instead of tdesc_microblaze_with_stack_protect?

>>Yes.

Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
The patch is unchanged with tdesc_microblaze_stack_protect.

Thanks & Regards
Ajit
-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Tuesday, June 24, 2014 6:17 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/24/2014 01:31 PM, Ajit Kumar Agarwal wrote:

>>
>> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.
> 
>>> But you've already added the G packet size guess for that.
> 
> In this case is it correct to say
> If (tdesc  == NULL)
>   tdesc = tdesc_microblaze;
> 
> instead of tdesc_microblaze_with_stack_protect?

Yes.

> 
>>> -
>>> +  if (tdesc_data != NULL)
>>> +    {
>>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>>> +      set_gdbarch_register_type (gdbarch, 
>>> + microblaze_register_type);
>>
>>>> Hmm, why is this set_gdbarch_register_type call necessary?
>>
>> /* Override tdesc_register_type to adjust the types of VFP
>>          registers for NEON.  */
>> This is done for arm target  to set the different type for VFP 
>> registers for Neon with Boolean flags is set before this call for VFP 
>> registers. In the microblaze target it's not required for special 
>> case of stack protect as
> the microblaze_register_type always return builtin_int for these stack protect registers.
> 
> Right.

Actually, not right...  This comment doesn't really appear to be correct:

> In the microblaze target it's not required for special case of stack 
> protect as the microblaze_register_type always return builtin_int for these stack protect registers.


static struct type *
microblaze_register_type (struct gdbarch *gdbarch, int regnum) {
  if (regnum == MICROBLAZE_SP_REGNUM)
    return builtin_type (gdbarch)->builtin_data_ptr;

  if (regnum == MICROBLAZE_PC_REGNUM)
    return builtin_type (gdbarch)->builtin_func_ptr;

  return builtin_type (gdbarch)->builtin_int; }

MICROBLAZE_SP_REGNUM and MICROBLAZE_PC_REGNUM clearly aren't builtin_int...

Doesn't your patch change the output of "ptype $sp" and "ptype $pc" ?

That points at something missing in the target description:

> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature 
> +name="org.gnu.gdb.microblaze.core">
> +  <reg name="r1" bitsize="32"/>
...
> +  <reg name="rpc" bitsize="32"/>

AFAICS, SP is "r1", and PC is "rpc".  These should be marked with type="data_ptr" and type="code_ptr" .

> 
>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>
>> Would you mind in explaining which manual need to be changed for the new target.
> 
>>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.
> 
> Thanks !! I will add subsection for Microblaze target.

Thank you.

--
Pedro Alves

[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 26025 bytes --]

From a2fd0468d5ef75021247716d5e5b11e073b5027b Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Thu, 26 Jun 2014 00:25:34 +0530
Subject: [PATCH] [Patch, microblaze]: 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-06-26  Ajit Agarwal  <ajitkum@xilinx.com>

	* 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/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 ++++++++++++++++++++++
 gdb/features/microblaze-with-stack-protect.xml   |   12 +++
 gdb/features/microblaze.c                        |   75 ++++++++++++++++++++
 gdb/features/microblaze.xml                      |   11 +++
 gdb/microblaze-tdep.c                            |   64 +++++++++++++++++-
 gdb/microblaze-tdep.h                            |   48 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 gdb/regformats/microblaze.dat                    |   61 +++++++++++++++++
 12 files changed, 483 insertions(+), 25 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/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 373ea07..6adb3d6 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -39106,6 +39106,7 @@ registers using the capitalization used in the description.
 * AArch64 Features::
 * ARM Features::
 * i386 Features::
+* MicroBlaze Features::
 * MIPS Features::
 * M68K Features::
 * Nios II Features::
@@ -39256,6 +39257,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 dbf4963..1c50419 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 0000000..620ac33
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32" type="data_ptr"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32" type="code_ptr"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..d18bb0c
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..b39aa19
--- /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 0000000..8f62a38
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
new file mode 100644
index 0000000..6c86fc0
--- /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 0000000..571f17f
--- /dev/null
+++ b/gdb/features/microblaze.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..8aff9a0 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 <string.h>
 #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"
 \f
 /* 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,68 @@ 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,
+                                  MICROBLAZE_NUM_CORE_REGS, 
+                                  tdesc_microblaze);
+
+  register_remote_g_packet_guess (gdbarch,
+                                  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_with_stack_protect;
+
+  /* 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");
+        }
+     }
+
+  tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
+  gdbarch = gdbarch_alloc (&info, tdep);
+
+  microblaze_register_g_packet_guesses (gdbarch);
 
   /* Allocate space for the new architecture.  */
   tdep = XNEW (struct gdbarch_tdep);
@@ -725,6 +781,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_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 +795,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,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..1aab4ab 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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 0000000..f71c111
--- /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 0000000..fbc3edb
--- /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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 10:32                           ` Ajit Kumar Agarwal
@ 2014-06-30 10:55                             ` Pedro Alves
  2014-06-30 11:13                               ` Ajit Kumar Agarwal
  2014-06-30 14:47                             ` Michael Eager
  1 sibling, 1 reply; 33+ messages in thread
From: Pedro Alves @ 2014-06-30 10:55 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/30/2014 11:32 AM, Ajit Kumar Agarwal wrote:
>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
> 
>> > In this case is it correct to say
>> > If (tdesc  == NULL)
>> >   tdesc = tdesc_microblaze;
>> > 
>> > instead of tdesc_microblaze_with_stack_protect?
>>> >>Yes.
> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.

Then it sounds like the G packet size guesses you're adding
aren't actually triggering.  Why?

> The patch is unchanged with tdesc_microblaze_stack_protect.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 10:55                             ` Pedro Alves
@ 2014-06-30 11:13                               ` Ajit Kumar Agarwal
  2014-06-30 11:23                                 ` Pedro Alves
  0 siblings, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-30 11:13 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Monday, June 30, 2014 4:25 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/30/2014 11:32 AM, Ajit Kumar Agarwal wrote:
>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
> 
>> > In this case is it correct to say
>> > If (tdesc  == NULL)
>> >   tdesc = tdesc_microblaze;
>> > 
>> > instead of tdesc_microblaze_with_stack_protect?
>>> >>Yes.
> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.

>>Then it sounds like the G packet size guesses you're adding aren't actually triggering.  Why?

I have checked the guesses are actually triggering as it works fine with backward compatibility with the Designs there is no stack-protect registers. For the Design that has the 
Stack protect register, it reports the message " G packet too long ". 

> The patch is unchanged with tdesc_microblaze_stack_protect.

--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 11:13                               ` Ajit Kumar Agarwal
@ 2014-06-30 11:23                                 ` Pedro Alves
  2014-06-30 16:29                                   ` Ajit Kumar Agarwal
  2014-07-01 19:36                                   ` Ajit Kumar Agarwal
  0 siblings, 2 replies; 33+ messages in thread
From: Pedro Alves @ 2014-06-30 11:23 UTC (permalink / raw)
  To: Ajit Kumar Agarwal
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 06/30/2014 12:13 PM, Ajit Kumar Agarwal wrote:
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com] 
> Sent: Monday, June 30, 2014 4:25 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
> 
> On 06/30/2014 11:32 AM, Ajit Kumar Agarwal wrote:
>>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>>
>>>> In this case is it correct to say
>>>> If (tdesc  == NULL)
>>>>   tdesc = tdesc_microblaze;
>>>>
>>>> instead of tdesc_microblaze_with_stack_protect?
>>>>>> Yes.
>> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
> 
>>> Then it sounds like the G packet size guesses you're adding aren't actually triggering.  Why?
> 
> I have checked the guesses are actually triggering as it works fine with backward compatibility with the Designs there is no stack-protect registers. For the Design that has the 
> Stack protect register, it reports the message " G packet too long ". 

If the G guess is triggering OK, and so GDB picks the description with the
stack protect registers based on the G packet size, why would the default
target description matter at all?  If it does, then something sounds broken.
What are you doing different from the other ports that use this mechanism?
Please debug this a bit further.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 10:32                           ` Ajit Kumar Agarwal
  2014-06-30 10:55                             ` Pedro Alves
@ 2014-06-30 14:47                             ` Michael Eager
  2014-07-01 16:07                               ` Ajit Kumar Agarwal
  1 sibling, 1 reply; 33+ messages in thread
From: Michael Eager @ 2014-06-30 14:47 UTC (permalink / raw)
  To: Ajit Kumar Agarwal, Pedro Alves
  Cc: gdb-patches, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

On 06/30/14 03:32, Ajit Kumar Agarwal wrote:
> Based on the feedback, updated the patch with the review comments.

How has this been tested?  Please be specific.

>
> [Patch, microblaze]: 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-06-26  Ajit Agarwal  <ajitkum@xilinx.com>
>
>          * 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
>
>> In this case is it correct to say
>> If (tdesc  == NULL)
>>    tdesc = tdesc_microblaze;
>>
>> instead of tdesc_microblaze_with_stack_protect?
>
>>> Yes.
>
> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
> The patch is unchanged with tdesc_microblaze_stack_protect.
>
> Thanks & Regards
> Ajit
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Tuesday, June 24, 2014 6:17 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
>
> On 06/24/2014 01:31 PM, Ajit Kumar Agarwal wrote:
>
>>>
>>> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.
>>
>>>> But you've already added the G packet size guess for that.
>>
>> In this case is it correct to say
>> If (tdesc  == NULL)
>>    tdesc = tdesc_microblaze;
>>
>> instead of tdesc_microblaze_with_stack_protect?
>
> Yes.
>
>>
>>>> -
>>>> +  if (tdesc_data != NULL)
>>>> +    {
>>>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>>>> +      set_gdbarch_register_type (gdbarch,
>>>> + microblaze_register_type);
>>>
>>>>> Hmm, why is this set_gdbarch_register_type call necessary?
>>>
>>> /* Override tdesc_register_type to adjust the types of VFP
>>>           registers for NEON.  */
>>> This is done for arm target  to set the different type for VFP
>>> registers for Neon with Boolean flags is set before this call for VFP
>>> registers. In the microblaze target it's not required for special
>>> case of stack protect as
>> the microblaze_register_type always return builtin_int for these stack protect registers.
>>
>> Right.
>
> Actually, not right...  This comment doesn't really appear to be correct:
>
>> In the microblaze target it's not required for special case of stack
>> protect as the microblaze_register_type always return builtin_int for these stack protect registers.
>
>
> static struct type *
> microblaze_register_type (struct gdbarch *gdbarch, int regnum) {
>    if (regnum == MICROBLAZE_SP_REGNUM)
>      return builtin_type (gdbarch)->builtin_data_ptr;
>
>    if (regnum == MICROBLAZE_PC_REGNUM)
>      return builtin_type (gdbarch)->builtin_func_ptr;
>
>    return builtin_type (gdbarch)->builtin_int; }
>
> MICROBLAZE_SP_REGNUM and MICROBLAZE_PC_REGNUM clearly aren't builtin_int...
>
> Doesn't your patch change the output of "ptype $sp" and "ptype $pc" ?
>
> That points at something missing in the target description:
>
>> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature
>> +name="org.gnu.gdb.microblaze.core">
>> +  <reg name="r1" bitsize="32"/>
> ...
>> +  <reg name="rpc" bitsize="32"/>
>
> AFAICS, SP is "r1", and PC is "rpc".  These should be marked with type="data_ptr" and type="code_ptr" .
>
>>
>>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>>
>>> Would you mind in explaining which manual need to be changed for the new target.
>>
>>>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.
>>
>> Thanks !! I will add subsection for Microblaze target.
>
> Thank you.
>
> --
> Pedro Alves
>


-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 11:23                                 ` Pedro Alves
@ 2014-06-30 16:29                                   ` Ajit Kumar Agarwal
  2014-07-01 19:36                                   ` Ajit Kumar Agarwal
  1 sibling, 0 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-06-30 16:29 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala



-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Monday, June 30, 2014 4:53 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/30/2014 12:13 PM, Ajit Kumar Agarwal wrote:
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Monday, June 30, 2014 4:25 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; 
> Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
> 
> On 06/30/2014 11:32 AM, Ajit Kumar Agarwal wrote:
>>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>>
>>>> In this case is it correct to say
>>>> If (tdesc  == NULL)
>>>>   tdesc = tdesc_microblaze;
>>>>
>>>> instead of tdesc_microblaze_with_stack_protect?
>>>>>> Yes.
>> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
> 
>>> Then it sounds like the G packet size guesses you're adding aren't actually triggering.  Why?
> 
> I have checked the guesses are actually triggering as it works fine 
> with backward compatibility with the Designs there is no stack-protect registers. For the Design that has the Stack protect register, it reports the message " G packet too long ".

>>If the G guess is triggering OK, and so GDB picks the description with the stack protect registers based on the G packet size, why would the default target description matter at all?  If it >>does, then something sounds broken.

In Microblaze Port the gdbarch_info has  tdesc always  set to NULL. Thus the gdbarch_init doesn't populates the register info based feature target description. Though the microblaze_register_g_packet_guesses is called by gdbarch_init and  register the guesses,  but the gdbarch_info.tdesc == NULL always and  features target description info is populated based on default target description.

>>What are you doing different from the other ports that use this mechanism?

In Microblaze port as compared to other architecture port lacking the function microblaze_read_description which sets the tdesc and the architecture set up based the Linux Kernel and Ptrace parameters. The other architecture  like ARM and MIPS has  arm_read_description and arm_linux_read_description which sets the tdesc info current()->Process.

>>Please debug this a bit further.

--
Pedro Alves

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 14:47                             ` Michael Eager
@ 2014-07-01 16:07                               ` Ajit Kumar Agarwal
  2014-07-01 16:46                                 ` Michael Eager
  0 siblings, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-07-01 16:07 UTC (permalink / raw)
  To: Michael Eager, Pedro Alves
  Cc: gdb-patches, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala



-----Original Message-----
From: Michael Eager [mailto:eager@eagercon.com] 
Sent: Monday, June 30, 2014 8:18 PM
To: Ajit Kumar Agarwal; Pedro Alves
Cc: gdb-patches@sourceware.org; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/30/14 03:32, Ajit Kumar Agarwal wrote:
> Based on the feedback, updated the patch with the review comments.

>>How has this been tested?  Please be specific.

The patch has been tested with in-house applications with the older and newer designs for tar remote localhost:1234( 1234 port number) command.
>
> [Patch, microblaze]: 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-06-26  Ajit Agarwal  <ajitkum@xilinx.com>
>
>          * 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
>
>> In this case is it correct to say
>> If (tdesc  == NULL)
>>    tdesc = tdesc_microblaze;
>>
>> instead of tdesc_microblaze_with_stack_protect?
>
>>> Yes.
>
> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
> The patch is unchanged with tdesc_microblaze_stack_protect.
>
> Thanks & Regards
> Ajit
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Tuesday, June 24, 2014 6:17 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; 
> Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
>
> On 06/24/2014 01:31 PM, Ajit Kumar Agarwal wrote:
>
>>>
>>> The default is choosen to assume stack protect to make compatible with the handling of stack protect registers in XMD Debugger.
>>
>>>> But you've already added the G packet size guess for that.
>>
>> In this case is it correct to say
>> If (tdesc  == NULL)
>>    tdesc = tdesc_microblaze;
>>
>> instead of tdesc_microblaze_with_stack_protect?
>
> Yes.
>
>>
>>>> -
>>>> +  if (tdesc_data != NULL)
>>>> +    {
>>>> +      tdesc_use_registers (gdbarch, tdesc, tdesc_data);
>>>> +      set_gdbarch_register_type (gdbarch, 
>>>> + microblaze_register_type);
>>>
>>>>> Hmm, why is this set_gdbarch_register_type call necessary?
>>>
>>> /* Override tdesc_register_type to adjust the types of VFP
>>>           registers for NEON.  */
>>> This is done for arm target  to set the different type for VFP 
>>> registers for Neon with Boolean flags is set before this call for 
>>> VFP registers. In the microblaze target it's not required for 
>>> special case of stack protect as
>> the microblaze_register_type always return builtin_int for these stack protect registers.
>>
>> Right.
>
> Actually, not right...  This comment doesn't really appear to be correct:
>
>> In the microblaze target it's not required for special case of stack 
>> protect as the microblaze_register_type always return builtin_int for these stack protect registers.
>
>
> static struct type *
> microblaze_register_type (struct gdbarch *gdbarch, int regnum) {
>    if (regnum == MICROBLAZE_SP_REGNUM)
>      return builtin_type (gdbarch)->builtin_data_ptr;
>
>    if (regnum == MICROBLAZE_PC_REGNUM)
>      return builtin_type (gdbarch)->builtin_func_ptr;
>
>    return builtin_type (gdbarch)->builtin_int; }
>
> MICROBLAZE_SP_REGNUM and MICROBLAZE_PC_REGNUM clearly aren't builtin_int...
>
> Doesn't your patch change the output of "ptype $sp" and "ptype $pc" ?
>
> That points at something missing in the target description:
>
>> +<!DOCTYPE feature SYSTEM "gdb-target.dtd"> <feature 
>> +name="org.gnu.gdb.microblaze.core">
>> +  <reg name="r1" bitsize="32"/>
> ...
>> +  <reg name="rpc" bitsize="32"/>
>
> AFAICS, SP is "r1", and PC is "rpc".  These should be marked with type="data_ptr" and type="code_ptr" .
>
>>
>>>>> As I mentioned before, please don't forget to document the new target features in the manual.
>>>
>>> Would you mind in explaining which manual need to be changed for the new target.
>>
>>>> The GDB manual, gdb/doc/gdb.texinfo, describes all the standard XML target features.  See the "Standard Target Features" node, and add a new subsection for MicroBlaze.
>>
>> Thanks !! I will add subsection for Microblaze target.
>
> Thank you.
>
> --
> Pedro Alves
>


-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-07-01 16:07                               ` Ajit Kumar Agarwal
@ 2014-07-01 16:46                                 ` Michael Eager
  2014-07-02 10:40                                   ` Ajit Kumar Agarwal
  0 siblings, 1 reply; 33+ messages in thread
From: Michael Eager @ 2014-07-01 16:46 UTC (permalink / raw)
  To: Ajit Kumar Agarwal, Pedro Alves
  Cc: gdb-patches, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

On 07/01/14 09:06, Ajit Kumar Agarwal wrote:
>
>
> -----Original Message-----
> From: Michael Eager [mailto:eager@eagercon.com]
> Sent: Monday, June 30, 2014 8:18 PM
> To: Ajit Kumar Agarwal; Pedro Alves
> Cc: gdb-patches@sourceware.org; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
>
> On 06/30/14 03:32, Ajit Kumar Agarwal wrote:
>> Based on the feedback, updated the patch with the review comments.
>
>>> How has this been tested?  Please be specific.
>
> The patch has been tested with in-house applications with the older and newer designs for tar remote localhost:1234( 1234 port number) command.

When I said "be specific" I meant to give me *all* of the
details of the environment.

Saying "older" and "newer" is much less than specific.
Saying "target remote ..." tells me absolutely nothing.

What target running which configurations built with
which versions of EDK?

Which versions of XMD were tested?

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-06-30 11:23                                 ` Pedro Alves
  2014-06-30 16:29                                   ` Ajit Kumar Agarwal
@ 2014-07-01 19:36                                   ` Ajit Kumar Agarwal
  2014-07-20 12:57                                     ` Michael Eager
  1 sibling, 1 reply; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-07-01 19:36 UTC (permalink / raw)
  To: Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

[-- Attachment #1: Type: text/plain, Size: 5634 bytes --]

Hello Pedro:

Please find the updated patch. Incorporated review comments.

    [Patch, microblaze]: 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  <ajitkum@xilinx.com>
    
        * 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

>>If the G guess is triggering OK, and so GDB picks the description with the stack protect registers based on the G packet size, why would the default target description matter at all?  If it >>does, then something sounds broken.
>>What are you doing different from the other ports that use this mechanism?
>>Please debug this a bit further.

Thanks for the above suggestion. The G guesses were not triggering because of the following code.

  register_remote_g_packet_guess (gdbarch,
                                  MICROBLAZE_NUM_CORE_REGS,
                                  tdesc_microblaze);

  register_remote_g_packet_guess (gdbarch,
                                   MICROBLAZE_NUM_REGS,
                                  tdesc_microblaze_with_stack_protect);

I have changed the above code with

  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);

With this change the G Packet guesses are triggered and the 'info registers" were not showing stack protect registers for the design where stack protect registers are not supported.
With the design where the stack protect registers are supported "info registers" were showing the stack protect registers. The target remote command are working fine with and without stack protect registers designs. The default target description is also been set with tdesc_microblaze as you have suggested.

Thanks & Regards
Ajit
-----Original Message-----
From: Pedro Alves [mailto:palves@redhat.com] 
Sent: Monday, June 30, 2014 4:53 PM
To: Ajit Kumar Agarwal
Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 06/30/2014 12:13 PM, Ajit Kumar Agarwal wrote:
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Monday, June 30, 2014 4:25 PM
> To: Ajit Kumar Agarwal
> Cc: gdb-patches@sourceware.org; Michael Eager; Vinod Kathail; 
> Vidhumouli Hunsigida; Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
> 
> On 06/30/2014 11:32 AM, Ajit Kumar Agarwal wrote:
>>     Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
>>
>>>> In this case is it correct to say
>>>> If (tdesc  == NULL)
>>>>   tdesc = tdesc_microblaze;
>>>>
>>>> instead of tdesc_microblaze_with_stack_protect?
>>>>>> Yes.
>> Instead of tdesc_microblaze_with_stack_protect if I use tdesc_microblaze  the "G Packet message is too long" error is not resolved.
> 
>>> Then it sounds like the G packet size guesses you're adding aren't actually triggering.  Why?
> 
> I have checked the guesses are actually triggering as it works fine 
> with backward compatibility with the Designs there is no stack-protect registers. For the Design that has the Stack protect register, it reports the message " G packet too long ".

If the G guess is triggering OK, and so GDB picks the description with the stack protect registers based on the G packet size, why would the default target description matter at all?  If it does, then something sounds broken.
What are you doing different from the other ports that use this mechanism?
Please debug this a bit further.

--
Pedro Alves


[-- Attachment #2: 0001-Patch-microblaze-Fix-for-remote-G-Packet-message-too.patch --]
[-- Type: application/octet-stream, Size: 26197 bytes --]

From e1fb88d1c8f060199581c8e2ed580cf0697b546f Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Wed, 2 Jul 2014 00:50:06 +0530
Subject: [PATCH] [Patch, microblaze]: 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  <ajitkum@xilinx.com>

	* 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/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 ++++++++++++++++++++++
 gdb/features/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                            |   48 +++++++------
 gdb/regformats/microblaze-with-stack-protect.dat |   63 +++++++++++++++++
 gdb/regformats/microblaze.dat                    |   61 +++++++++++++++++
 12 files changed, 480 insertions(+), 25 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/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 3662470..8101b87 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 dbf4963..1c50419 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 0000000..620ac33
--- /dev/null
+++ b/gdb/features/microblaze-core.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.core">
+  <reg name="r0" bitsize="32" regnum="0"/>
+  <reg name="r1" bitsize="32" type="data_ptr"/>
+  <reg name="r2" bitsize="32"/>
+  <reg name="r3" bitsize="32"/>
+  <reg name="r4" bitsize="32"/>
+  <reg name="r5" bitsize="32"/>
+  <reg name="r6" bitsize="32"/>
+  <reg name="r7" bitsize="32"/>
+  <reg name="r8" bitsize="32"/>
+  <reg name="r9" bitsize="32"/>
+  <reg name="r10" bitsize="32"/>
+  <reg name="r11" bitsize="32"/>
+  <reg name="r12" bitsize="32"/>
+  <reg name="r13" bitsize="32"/>
+  <reg name="r14" bitsize="32"/>
+  <reg name="r15" bitsize="32"/>
+  <reg name="r16" bitsize="32"/>
+  <reg name="r17" bitsize="32"/>
+  <reg name="r18" bitsize="32"/>
+  <reg name="r19" bitsize="32"/>
+  <reg name="r20" bitsize="32"/>
+  <reg name="r21" bitsize="32"/>
+  <reg name="r22" bitsize="32"/>
+  <reg name="r23" bitsize="32"/>
+  <reg name="r24" bitsize="32"/>
+  <reg name="r25" bitsize="32"/>
+  <reg name="r26" bitsize="32"/>
+  <reg name="r27" bitsize="32"/>
+  <reg name="r28" bitsize="32"/>
+  <reg name="r29" bitsize="32"/>
+  <reg name="r30" bitsize="32"/>
+  <reg name="r31" bitsize="32"/>
+  <reg name="rpc" bitsize="32" type="code_ptr"/>
+  <reg name="rmsr" bitsize="32"/>
+  <reg name="rear" bitsize="32"/>
+  <reg name="resr" bitsize="32"/>
+  <reg name="rfsr" bitsize="32"/>
+  <reg name="rbtr" bitsize="32"/>
+  <reg name="rpvr0" bitsize="32"/> 
+  <reg name="rpvr1" bitsize="32"/> 
+  <reg name="rpvr2" bitsize="32"/> 
+  <reg name="rpvr3" bitsize="32"/> 
+  <reg name="rpvr4" bitsize="32"/> 
+  <reg name="rpvr5" bitsize="32"/> 
+  <reg name="rpvr6" bitsize="32"/>
+  <reg name="rpvr7" bitsize="32"/> 
+  <reg name="rpvr8" bitsize="32"/> 
+  <reg name="rpvr9" bitsize="32"/> 
+  <reg name="rpvr10" bitsize="32"/> 
+  <reg name="rpvr11" bitsize="32"/>
+  <reg name="redr" bitsize="32"/> 
+  <reg name="rpid" bitsize="32"/> 
+  <reg name="rzpr" bitsize="32"/> 
+  <reg name="rtlbx" bitsize="32"/> 
+  <reg name="rtlbsx" bitsize="32"/> 
+  <reg name="rtlblo" bitsize="32"/> 
+  <reg name="rtlbhi" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-stack-protect.xml b/gdb/features/microblaze-stack-protect.xml
new file mode 100644
index 0000000..d18bb0c
--- /dev/null
+++ b/gdb/features/microblaze-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.microblaze.stack-protect">
+  <reg name="rslr" bitsize="32"/>
+  <reg name="rshr" bitsize="32"/>
+</feature>
diff --git a/gdb/features/microblaze-with-stack-protect.c b/gdb/features/microblaze-with-stack-protect.c
new file mode 100644
index 0000000..b39aa19
--- /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 0000000..8f62a38
--- /dev/null
+++ b/gdb/features/microblaze-with-stack-protect.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+  <xi:include href="microblaze-stack-protect.xml"/>
+</target>
diff --git a/gdb/features/microblaze.c b/gdb/features/microblaze.c
new file mode 100644
index 0000000..6c86fc0
--- /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 0000000..571f17f
--- /dev/null
+++ b/gdb/features/microblaze.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2014 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE target SYSTEM "gdb-target.dtd">
+<target>
+  <xi:include href="microblaze-core.xml"/>
+</target>
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 14c1b52..ff2db60 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 <string.h>
 #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"
 \f
 /* 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);
@@ -715,6 +766,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_write_pc (gdbarch, microblaze_write_pc);
 
   set_gdbarch_unwind_pc (gdbarch, microblaze_unwind_pc);
+  
+  microblaze_register_g_packet_guesses (gdbarch);
 
   frame_base_set_default (gdbarch, &microblaze_frame_base);
 
@@ -725,6 +778,8 @@ microblaze_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   dwarf2_append_unwinders (gdbarch);
   frame_unwind_append_unwinder (gdbarch, &microblaze_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,
 			     &microblaze_debug_flag, _("\
diff --git a/gdb/microblaze-tdep.h b/gdb/microblaze-tdep.h
index a532092..1aab4ab 100644
--- a/gdb/microblaze-tdep.h
+++ b/gdb/microblaze-tdep.h
@@ -26,28 +26,6 @@ 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 
 {
@@ -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 0000000..f71c111
--- /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 0000000..fbc3edb
--- /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
-- 
1.7.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-07-01 16:46                                 ` Michael Eager
@ 2014-07-02 10:40                                   ` Ajit Kumar Agarwal
  0 siblings, 0 replies; 33+ messages in thread
From: Ajit Kumar Agarwal @ 2014-07-02 10:40 UTC (permalink / raw)
  To: Michael Eager, Pedro Alves
  Cc: gdb-patches, Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala

-----Original Message-----
From: Michael Eager [mailto:eager@eagercon.com] 
Sent: Tuesday, July 01, 2014 10:16 PM
To: Ajit Kumar Agarwal; Pedro Alves
Cc: gdb-patches@sourceware.org; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.

On 07/01/14 09:06, Ajit Kumar Agarwal wrote:
>
>
> -----Original Message-----
> From: Michael Eager [mailto:eager@eagercon.com]
> Sent: Monday, June 30, 2014 8:18 PM
> To: Ajit Kumar Agarwal; Pedro Alves
> Cc: gdb-patches@sourceware.org; Vinod Kathail; Vidhumouli Hunsigida; 
> Nagaraju Mekala
> Subject: Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
>
> On 06/30/14 03:32, Ajit Kumar Agarwal wrote:
>> Based on the feedback, updated the patch with the review comments.
>
>>> How has this been tested?  Please be specific.
>
> The patch has been tested with in-house applications with the older and newer designs for tar remote localhost:1234( 1234 port number) command.

When I said "be specific" I meant to give me *all* of the details of the environment.

Saying "older" and "newer" is much less than specific.
Saying "target remote ..." tells me absolutely nothing.

>>What target running which configurations built with which versions of EDK?

Target is microblaze-xilinx-elf New version is EDK 13.3 and  New Microblaze version is 8.30.a( This supports the stack protect registers).

Target is microblaze-xilinx-elf old EDK version 12.4 and old microblaze version is 8.00b(This doesn't support the stack protect registers).  

>>Which versions of XMD were tested?

Xilinx EDK 14.7 is used for testing. The designs with different configuration as mentioned above are downloaded and tested using this XMD.

Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal.
  2014-07-01 19:36                                   ` Ajit Kumar Agarwal
@ 2014-07-20 12:57                                     ` Michael Eager
  0 siblings, 0 replies; 33+ messages in thread
From: Michael Eager @ 2014-07-20 12:57 UTC (permalink / raw)
  To: Ajit Kumar Agarwal, Pedro Alves
  Cc: gdb-patches, Michael Eager, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala

On 07/01/14 12:36, Ajit Kumar Agarwal wrote:
> Hello Pedro:
>
> Please find the updated patch. Incorporated review comments.
>
>      [Patch, microblaze]: 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  <ajitkum@xilinx.com>
>
>          * 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.
                                                     ^^^
                                          changed to Added.

Patch has trailing whitespace.

Committed 164224e9 without trailing whitespace.


-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2014-07-20  0:56 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-12  8:56 [Patch, microblaze]: Fix for remote G Packet message too long error for baremetal Ajit Kumar Agarwal
2014-06-12 14:52 ` Michael Eager
2014-06-17 11:17 ` Pedro Alves
2014-06-18 11:06   ` Ajit Kumar Agarwal
2014-06-18 14:58     ` Michael Eager
2014-06-18 15:10     ` Pedro Alves
2014-06-18 15:30       ` Pedro Alves
2014-06-18 15:40       ` Ajit Kumar Agarwal
2014-06-18 15:54         ` Pedro Alves
2014-06-18 15:57           ` Ajit Kumar Agarwal
2014-06-18 19:56           ` Ajit Kumar Agarwal
2014-06-23 13:18             ` Pedro Alves
2014-06-23 19:36               ` Ajit Kumar Agarwal
2014-06-24  9:13                 ` Pedro Alves
2014-06-24 10:28                   ` Ajit Kumar Agarwal
2014-06-24 12:06                     ` Pedro Alves
2014-06-24 12:31                       ` Ajit Kumar Agarwal
2014-06-24 12:46                         ` Pedro Alves
2014-06-24 13:27                           ` Ajit Kumar Agarwal
2014-06-30 10:32                           ` Ajit Kumar Agarwal
2014-06-30 10:55                             ` Pedro Alves
2014-06-30 11:13                               ` Ajit Kumar Agarwal
2014-06-30 11:23                                 ` Pedro Alves
2014-06-30 16:29                                   ` Ajit Kumar Agarwal
2014-07-01 19:36                                   ` Ajit Kumar Agarwal
2014-07-20 12:57                                     ` Michael Eager
2014-06-30 14:47                             ` Michael Eager
2014-07-01 16:07                               ` Ajit Kumar Agarwal
2014-07-01 16:46                                 ` Michael Eager
2014-07-02 10:40                                   ` Ajit Kumar Agarwal
2014-06-24 14:11                       ` Michael Eager
2014-06-25 13:00                         ` Ajit Kumar Agarwal
2014-06-25 14:09                         ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).