This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [Patch, microblaze]: Port of Linux gdbserver
- From: Pedro Alves <palves at redhat dot com>
- To: Ajit Kumar Agarwal <ajit dot kumar dot agarwal at xilinx dot com>, Michael Eager <eager at eagercon dot com>, Joel Brobecker <brobecker at adacore dot com>
- Cc: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>, Vinod Kathail <vinodk at xilinx dot com>, Vidhumouli Hunsigida <vidhum at xilinx dot com>, Nagaraju Mekala <nmekala at xilinx dot com>
- Date: Tue, 16 Sep 2014 18:04:21 +0100
- Subject: Re: [Patch, microblaze]: Port of Linux gdbserver
- Authentication-results: sourceware.org; auth=none
- References: <2570e3c7-f55b-45cd-aa6e-7f4fa145f32a at BN1BFFO11FD002 dot protection dot gbl> <541052B5 dot 5080503 at eagercon dot com> <20140910134606 dot GO28404 at adacore dot com> <050c6461-c35c-441d-9b63-7636d9164e2e at BL2FFO11FD048 dot protection dot gbl> <20140910144313 dot GP28404 at adacore dot com> <89d100d8-4ebd-4f50-b5e9-59312124db6a at BL2FFO11FD057 dot protection dot gbl> <54131362 dot 1050009 at eagercon dot com> <daf38849-83e4-44a7-8903-a5251b5bbbbd at BY2FFO11FD021 dot protection dot gbl>
On 09/16/2014 07:41 AM, Ajit Kumar Agarwal wrote:
>>> >>This is identical to microblaze-with-stack-protect.c. Both specify tdesc_create_feature (result, "org.gnu.gdb.microblaze.core");
>>> >>Why is this needed?
> This is needed as gdbserver code expects the register pc as "pc" instead of "rpc" for baremetel. The microblaze-linux-core.xml is changed from "rpc" to "pc" for gdbserver code to work.
This doesn't make much sense to me. Can you expand please? Why would
you want the register to be named differently on Linux? We've
defined the org.gnu.gdb.microblaze.core with "rpc", presumably because
that's what the architecture calls that core register.
Not reporting all the registers with the exact names GDB reports
should be making GDB consider the description invalid. Aren't you
seeing that happen?
/me looks at code
Oh, microblaze_gdbarch_init is incomplete...
/* 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");
}
}
Note nothing is done with valid_p. It's write-only. Compare with
other ports, like arm-tdep.c or mips-tdep.c.
Thanks,
Pedro Alves