From: Ajit Kumar Agarwal <ajit.kumar.agarwal@xilinx.com>
To: Joel Brobecker <brobecker@adacore.com>,
Michael Eager <eager@eagercon.com>
Cc: "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
Vinod Kathail <vinodk@xilinx.com>,
Vidhumouli Hunsigida <vidhum@xilinx.com>,
"Nagaraju Mekala" <nmekala@xilinx.com>
Subject: RE: [Patch, microblaze]: Port of Linux gdbserver
Date: Wed, 10 Sep 2014 14:23:00 -0000 [thread overview]
Message-ID: <050c6461-c35c-441d-9b63-7636d9164e2e@BL2FFO11FD048.protection.gbl> (raw)
In-Reply-To: <20140910134606.GO28404@adacore.com>
[-- Attachment #1: Type: text/plain, Size: 1930 bytes --]
Please find the updated patch with review feedbacks are incorporated.
[Patch, microblaze]: Port of Linux gdbserver
This patch is the port of Linux gdbserver.
ChangeLog:
2014-10-09 Ajit Agarwal <ajitkum@xilinx.com>
* configure.host (microblaze): New.
(microblaze*-*-linux*): New.
* configure.tgt (build_gdbserver): New Definition.
* gdbserver/Makefile.in (microblaze-linux.c): New target.
* gdbserver/configure.srv (microblaze*-*-linux*): New target.
* gdbserver/linux-microblaze-low.c: New file.
Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
Thanks & Regards
Ajit
-----Original Message-----
From: Joel Brobecker [mailto:brobecker@adacore.com]
Sent: Wednesday, September 10, 2014 7:16 PM
To: Michael Eager
Cc: Ajit Kumar Agarwal; gdb-patches@sourceware.org; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala
Subject: Re: [Patch, microblaze]: Port of Linux gdbserver
> > This patch is the port of Linux gdbserver.
> >
> > ChangeLog:
> > 2014-10-09 Ajit Agarwal <ajitkum@xilinx.com>
> >
> > * microblaze-tdep.h (MICROBLAZE_BREAKPOINT): New Macro.
> > (MICROBLAZE_BREAKPOINT_LE): New Macro.
> > * microblaze-linux-tdep.c
> > (microblaze_linux_memory_remove_breakpoint): Use of
> > set_gdbarch_fetch_tls_load_module_address, do_cleanup.
> > * configure.host (microblaze): New.
> > (microblaze*-*-linux*): New.
> > * configure.tgt (build_gdbserver): New Definition.
> > * gdbserver/Makefile.in (microblaze-linux.c): New target.
> > * gdbserver/configure.srv (microblaze*-*-linux*): New target.
> > * gdbserver/linux-microblaze-low.c: New file.
In addition to Michael's comment, I am not sure why the gdb changes are combined with the gdbserver changes. Shouldn't these be submitted separately?
--
Joel
[-- Attachment #2: 0001-Patch-microblaze-Port-of-Linux-gdbserver.patch --]
[-- Type: application/octet-stream, Size: 11334 bytes --]
From 0cb7626ea548b85b41e83da9a23c5bcba632c597 Mon Sep 17 00:00:00 2001
From: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
Date: Wed, 10 Sep 2014 19:43:53 +0530
Subject: [PATCH] [Patch, microblaze]: Port of Linux gdbserver
This patch is the port of Linux gdbserver.
ChangeLog:
2014-10-09 Ajit Agarwal <ajitkum@xilinx.com>
* configure.host (microblaze): New.
(microblaze*-*-linux*): New.
* configure.tgt (build_gdbserver): New Definition.
* gdbserver/Makefile.in (microblaze-linux.c): New target.
* gdbserver/configure.srv (microblaze*-*-linux*): New target.
* gdbserver/linux-microblaze-low.c: New file.
Signed-off-by:Ajit Agarwal ajitkum@xilinx.com
---
gdb/configure.host | 3 +
gdb/configure.tgt | 1 +
gdb/gdbserver/Makefile.in | 4 +
gdb/gdbserver/configure.srv | 6 +
gdb/gdbserver/linux-microblaze-low.c | 236 ++++++++++++++++++++++++++++++++++
5 files changed, 250 insertions(+), 0 deletions(-)
create mode 100644 gdb/gdbserver/linux-microblaze-low.c
diff --git a/gdb/configure.host b/gdb/configure.host
index 15a8288..6f02ddd 100644
--- a/gdb/configure.host
+++ b/gdb/configure.host
@@ -59,6 +59,7 @@ i[34567]86*) gdb_host_cpu=i386 ;;
m68*) gdb_host_cpu=m68k ;;
m88*) gdb_host_cpu=m88k ;;
mips*) gdb_host_cpu=mips ;;
+microblaze*) gdb_host_cpu=microblaze ;;
powerpc* | rs6000) gdb_host_cpu=powerpc ;;
sparcv9 | sparc64) gdb_host_cpu=sparc ;;
s390*) gdb_host_cpu=s390 ;;
@@ -133,6 +134,8 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
gdb_host=nbsd ;;
mips64*-*-openbsd*) gdb_host=obsd64 ;;
+microblaze*-*linux*) gdb_host=linux ;;
+
powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
gdb_host=aix ;;
powerpc*-*-freebsd*) gdb_host=fbsd ;;
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 01311b2..e4894da 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -343,6 +343,7 @@ microblaze*-linux-*|microblaze*-*-linux*)
gdb_target_obs="microblaze-tdep.o microblaze-linux-tdep.o microblaze-rom.o \
monitor.o dsrec.o solib-svr4.o symfile-mem.o linux-tdep.o"
gdb_sim=../sim/microblaze/libsim.a
+ build_gdbserver=yes
;;
microblaze*-*-*)
# Target: Xilinx MicroBlaze running standalone
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 1447e61..b2a01f5 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -153,6 +153,7 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \
$(srcdir)/linux-ia64-low.c $(srcdir)/linux-low.c \
$(srcdir)/linux-m32r-low.c \
$(srcdir)/linux-m68k-low.c $(srcdir)/linux-mips-low.c \
+ $(srcdir)/linux-microblaze-low.c \
$(srcdir)/linux-nios2-low.c \
$(srcdir)/linux-ppc-low.c \
$(srcdir)/linux-s390-low.c \
@@ -364,6 +365,7 @@ clean:
rm -f amd64-mpx.c amd64-mpx-linux.c
rm -f amd64-avx512.c amd64-avx512-linux.c
rm -f i386-mmx.c i386-mmx-linux.c
+ rm -f microblaze-linux.c
rm -f x32.c x32-linux.c
rm -f x32-avx.c x32-avx-linux.c
rm -f x32-avx512.c x32-avx512-linux.c
@@ -634,6 +636,8 @@ mips64-linux.c : $(srcdir)/../regformats/mips64-linux.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips64-linux.dat mips64-linux.c
mips64-dsp-linux.c : $(srcdir)/../regformats/mips64-dsp-linux.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/mips64-dsp-linux.dat mips64-dsp-linux.c
+microblaze-linux.c : $(srcdir)/../regformats/microblaze-with-stack-protect.dat $(regdat_sh)
+ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/microblaze-with-stack-protect.dat microblaze-linux.c
nios2-linux.c : $(srcdir)/../regformats/nios2-linux.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/nios2-linux.dat nios2-linux.c
powerpc-32.c : $(srcdir)/../regformats/rs6000/powerpc-32.dat $(regdat_sh)
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 679fc9f..16e44ee 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -194,6 +194,12 @@ case "${target}" in
srv_linux_usrregs=yes
srv_linux_thread_db=yes
;;
+ microblaze*-*-linux*) srv_regobj=microblaze-linux.o
+ srv_tgtobj="$srv_linux_obj linux-microblaze-low.o"
+ srv_linux_usrregs=yes
+ srv_linux_regsets=yes
+ srv_linux_thread_db=yes
+ ;;
nios2*-*-linux*) srv_regobj="nios2-linux.o"
srv_tgtobj="$srv_linux_obj linux-nios2-low.o"
srv_xmlfiles="nios2-linux.xml"
diff --git a/gdb/gdbserver/linux-microblaze-low.c b/gdb/gdbserver/linux-microblaze-low.c
new file mode 100644
index 0000000..b86b4f5
--- /dev/null
+++ b/gdb/gdbserver/linux-microblaze-low.c
@@ -0,0 +1,236 @@
+/* GNU/Linux/Microblaze specific low level interface, for the remote server for
+ GDB.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "server.h"
+#include "linux-low.h"
+#include <asm/ptrace.h>
+#include <sys/procfs.h>
+
+#include "gdb_proc_service.h"
+
+void init_registers_microblaze_with_stack_protect (void);
+extern const struct target_desc *tdesc_microblaze_with_stack_protect;
+
+static int microblaze_regmap[] = {
+ PT_GPR(0), PT_GPR(1), PT_GPR(2), PT_GPR(3),
+ PT_GPR(4), PT_GPR(5), PT_GPR(6), PT_GPR(7),
+ PT_GPR(8), PT_GPR(9), PT_GPR(10), PT_GPR(11),
+ PT_GPR(12), PT_GPR(13), PT_GPR(14), PT_GPR(15),
+ PT_GPR(16), PT_GPR(17), PT_GPR(18), PT_GPR(19),
+ PT_GPR(20), PT_GPR(21), PT_GPR(22), PT_GPR(23),
+ PT_GPR(24), PT_GPR(25), PT_GPR(26), PT_GPR(27),
+ PT_GPR(28), PT_GPR(29), PT_GPR(30), PT_GPR(31),
+ PT_PC, PT_MSR, PT_EAR, PT_ESR,
+ PT_FSR, PT_BTR, PT_PVR0, PT_PVR1,
+ PT_PVR2, PT_PVR3, PT_PVR4, PT_PVR5,
+ PT_PVR6, PT_PVR7, PT_PVR8, PT_PVR9,
+ PT_PVR10, PT_PVR11, PT_EDR, PT_PID,
+ PT_ZPR, PT_TLBX, PT_TLBSX, PT_TLBLO,
+ PT_TLBHI, PT_SLR, PT_SHR
+};
+
+#define microblaze_num_regs (sizeof microblaze_regmap / sizeof microblaze_regmap[0])
+
+static int
+microblaze_cannot_store_register (int regno)
+{
+ if (microblaze_regmap[regno] == -1 || regno == 0)
+ return 1;
+
+ return 0;
+}
+
+static int
+microblaze_cannot_fetch_register (int regno)
+{
+ return 0;
+}
+
+static CORE_ADDR
+microblaze_get_pc (struct regcache *regcache)
+{
+ unsigned long pc;
+ collect_register_by_name (regcache, "pc", &pc);
+ return (CORE_ADDR) (pc);
+}
+
+static void
+microblaze_set_pc (struct regcache *regcache, CORE_ADDR pc)
+{
+ unsigned long newpc = pc;
+ supply_register_by_name (regcache, "pc", &newpc);
+}
+
+static const unsigned long microblaze_breakpoint = 0xba0c0018;
+
+#define microblaze_breakpoint_len 4
+
+static int
+microblaze_breakpoint_at (CORE_ADDR where)
+{
+ unsigned long insn;
+ (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
+
+ if (insn == microblaze_breakpoint)
+ return 1;
+
+ /* If necessary, recognize more trap instructions here. GDB only uses the
+ one. */
+ return 0;
+}
+
+static CORE_ADDR
+microblaze_reinsert_addr (struct regcache *regcache)
+{
+ unsigned long pc;
+ collect_register_by_name (regcache, "r15", &pc);
+ return pc;
+}
+
+#ifdef HAVE_PTRACE_GETREGS
+
+static void
+microblaze_collect_ptrace_register (struct regcache *regcache, int regno, char *buf)
+{
+ int size = register_size (regcache->tdesc, regno);
+ memset (buf, 0, sizeof (long));
+
+ if (size < sizeof (long))
+ collect_register (regcache, regno, buf + sizeof (long) - size);
+ else
+ collect_register (regcache, regno, buf);
+}
+
+static void
+microblaze_supply_ptrace_register (struct regcache *regcache,
+ int regno, const char *buf)
+{
+ int i;
+ int size = register_size (regcache->tdesc, regno);
+
+ if (regno == 0)
+ {
+ unsigned long regbuf_0 = 0;
+ /* Clobbering r0 so that it is always 0 as enforced by hardware. */
+ supply_register (regcache, regno, (const char*)®buf_0);
+ }
+ else
+ {
+ if (size < sizeof (long))
+ supply_register (regcache, regno, buf + sizeof (long) - size);
+ else
+ supply_register (regcache, regno, buf);
+ }
+}
+
+/* Provide only a fill function for the general register set. ps_lgetregs
+ will use this for NPTL support. */
+
+static void microblaze_fill_gregset (struct regcache *regcache, void *buf)
+{
+ int i;
+
+ for (i = 0; i < microblaze_num_regs; i++)
+ microblaze_collect_ptrace_register (regcache, i,
+ (char *) buf + microblaze_regmap[i]);
+}
+
+static void
+microblaze_store_gregset (struct regcache *regcache, const void *buf)
+{
+ int i;
+ for (i = 0; i < microblaze_num_regs; i++)
+ supply_register (regcache, i, (char *) buf + microblaze_regmap[i]);
+}
+
+#endif /* HAVE_PTRACE_GETREGS */
+
+static struct regset_info microblaze_regsets[] = {
+#ifdef HAVE_PTRACE_GETREGS
+ { PTRACE_GETREGS, PTRACE_SETREGS, 0, 36 * sizeof (elf_gregset_t),
+ GENERAL_REGS, microblaze_fill_gregset, microblaze_store_gregset },
+ { 0, 0, 0, -1, -1, NULL, NULL },
+#endif /* HAVE_PTRACE_GETREGS */
+ { 0, 0, 0, -1, -1, NULL, NULL }
+};
+
+static struct regsets_info microblaze_regsets_info = {
+ microblaze_regsets, /* regsets */
+ 0, /* num_regsets */
+ NULL, /* disabled_regsets */
+};
+
+static struct usrregs_info microblaze_usrregs_info =
+{
+ microblaze_num_regs,
+ microblaze_regmap,
+};
+
+static struct regs_info regs_info =
+{
+ NULL, /* regset_bitmap */
+ µblaze_usrregs_info,
+ µblaze_regsets_info
+};
+
+static const struct regs_info *
+microblaze_regs_info (void)
+{
+ return ®s_info;
+}
+
+static void
+microblaze_arch_setup (void)
+{
+ current_process ()->tdesc = tdesc_microblaze_with_stack_protect;
+}
+
+struct linux_target_ops the_low_target = {
+ microblaze_arch_setup,
+ microblaze_regs_info,
+ microblaze_cannot_fetch_register,
+ microblaze_cannot_store_register,
+ NULL, /* fetch_register */
+ microblaze_get_pc,
+ microblaze_set_pc,
+ (const unsigned char *) µblaze_breakpoint,
+ microblaze_breakpoint_len,
+ microblaze_reinsert_addr,
+ 0,
+ microblaze_breakpoint_at,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ microblaze_collect_ptrace_register,
+ microblaze_supply_ptrace_register,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+};
+
+void
+initialize_low_arch (void)
+{
+ init_registers_microblaze_with_stack_protect ();
+
+ initialize_regsets_info (µblaze_regsets_info);
+}
--
1.7.1
next prev parent reply other threads:[~2014-09-10 14:23 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-10 10:14 Ajit Kumar Agarwal
2014-09-10 13:31 ` Michael Eager
2014-09-10 13:46 ` Joel Brobecker
2014-09-10 14:23 ` Ajit Kumar Agarwal [this message]
2014-09-10 14:39 ` Michael Eager
2014-09-10 14:59 ` Ajit Kumar Agarwal
2014-09-10 15:12 ` Ajit Kumar Agarwal
2014-09-10 15:27 ` Michael Eager
2014-09-10 15:30 ` Ajit Kumar Agarwal
2014-09-10 15:35 ` Michael Eager
2014-09-10 15:51 ` Ajit Kumar Agarwal
2014-09-10 14:43 ` Joel Brobecker
2014-09-10 15:04 ` Ajit Kumar Agarwal
2014-09-10 15:54 ` Joel Brobecker
2014-09-10 16:10 ` Ajit Kumar Agarwal
2014-09-12 8:01 ` Ajit Kumar Agarwal
2014-09-12 8:39 ` Ajit Kumar Agarwal
2014-09-12 15:38 ` Michael Eager
2014-09-16 6:42 ` Ajit Kumar Agarwal
2014-09-16 12:06 ` Michael Eager
2014-09-17 9:36 ` Ajit Kumar Agarwal
2014-09-17 14:12 ` Michael Eager
2014-09-16 17:04 ` Pedro Alves
2014-09-17 6:16 ` Ajit Kumar Agarwal
2014-09-17 8:15 ` Pedro Alves
2014-09-17 8:20 ` Ajit Kumar Agarwal
2014-09-23 12:49 ` Ajit Kumar Agarwal
2014-09-30 11:43 ` Pedro Alves
2014-09-30 13:27 ` Ajit Kumar Agarwal
2014-09-30 13:37 ` Pedro Alves
2014-09-30 14:21 ` Ajit Kumar Agarwal
2014-10-08 13:52 [Patch] Microblaze: " Ajit Kumar Agarwal
2014-10-09 16:29 ` Michael Eager
2014-10-09 18:54 ` Ajit Kumar Agarwal
2014-10-09 23:42 ` Michael Eager
2014-10-13 16:00 ` Ajit Kumar Agarwal
2014-10-13 17:49 ` Michael Eager
2014-10-14 3:03 ` Ajit Kumar Agarwal
2014-10-14 15:07 ` Michael Eager
2014-10-14 15:33 ` Ajit Kumar Agarwal
2014-10-14 15:42 ` Ajit Kumar Agarwal
2014-10-15 13:27 ` Pedro Alves
2014-10-17 19:22 ` Ajit Kumar Agarwal
2014-12-15 18:02 ` Pedro Alves
2014-12-15 18:13 ` Michael Eager
2014-12-18 8:58 ` Ajit Kumar Agarwal
2014-12-18 16:10 ` Michael Eager
2014-12-18 8:57 ` Ajit Kumar Agarwal
2014-12-18 11:28 ` Pedro Alves
2014-12-18 16:53 ` Ajit Kumar Agarwal
2014-12-18 17:40 ` Pedro Alves
2014-12-19 8:27 ` Ajit Kumar Agarwal
2014-12-19 10:56 ` Pedro Alves
2014-12-19 10:26 ` Ajit Kumar Agarwal
2014-12-19 11:02 ` Pedro Alves
2014-12-19 18:06 ` Ajit Kumar Agarwal
2014-11-26 12:13 ` Ajit Kumar Agarwal
2014-12-15 16:08 ` Ajit Kumar Agarwal
2014-10-08 14:59 Ajit Kumar Agarwal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=050c6461-c35c-441d-9b63-7636d9164e2e@BL2FFO11FD048.protection.gbl \
--to=ajit.kumar.agarwal@xilinx.com \
--cc=brobecker@adacore.com \
--cc=eager@eagercon.com \
--cc=gdb-patches@sourceware.org \
--cc=nmekala@xilinx.com \
--cc=vidhum@xilinx.com \
--cc=vinodk@xilinx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).