From: Ofir Cohen <ofircohenn@gmail.com>
To: Tim Newsome <tim@sifive.com>
Cc: gdb <gdb@sourceware.org>
Subject: Re: read target register to decide breakpoint size
Date: Sat, 19 Nov 2016 01:16:00 -0000 [thread overview]
Message-ID: <CAHOBVAeUnwKFQCYjmVwtOdCEpEOvxi5Kde6_g1NTL+MZJ3apmw@mail.gmail.com> (raw)
In-Reply-To: <CAGDihemd3g3_ropX=Y-wWSeyWBbH-sCA6FDX2FaTwKP8e-3Nng@mail.gmail.com>
Hi,
I've been messing with that code lately,
and I recall gdb is checking if the instruction is a breakpoint instruction
in validate_inserted_breakpoint() function:
if (err || memcmp (buf, bp_opcode (bp), bp_size (bp)) != 0)
Also, you should check out breakpoint_from_pc callback function (IIRC
implemented in target_ops), from [1]:
"breakpoint_from_pc. Returns the breakpoint instruction to be used
when the PC is at a
particular location in memory. For architectures with variable length
instructions, the
choice of breakpoint instruction may depend on the length of the
instruction at the
program counter. Returns the instruction sequence and its length.
The default value is NULL (undefined). This function should always be
defined if GDB is
to support breakpointing for this architecture."
So IOW gdb is (somewhat) flexible when it comes to determining
instruction breakpoints.
You should probably initialize the breakpoint size (2/4) at target
init stage, cache it within your module and return at runtime the
(correct) cached size.
Guys on the mailing list can probably elabore more on this, but hey
this is a place to start :-).
Good luck.
Regards,
Ofir Cohen
[1] http://www.embecosm.com/appnotes/ean3/embecosm-howto-gdb-porting-ean3-issue-2.pdf
On 19 November 2016 at 01:44, Tim Newsome <tim@sifive.com> wrote:
> I'm still working on RISC-V support for gdb. Any given RISC-V core may
> support a compressed instruction set (2 bytes per instruction as
> opposed to 4). There are corresponding 2-byte and 4-byte breakpoint
> instructions. On cores that support the compressed instruction set it
> is safe to just always use the 2-byte version, and there is a register
> I can read to tell me whether the compressed instruction set is
> supported. What I would like to do is read (and cache) that register
> when breakpoint size is determined. That seems more robust than making
> a decision based on ELF info, which may not reflect what is actually
> being executed.
>
> Is that a good idea? Are there examples of operations that read target
> registers to complete?
>
> Thank you,
> Tim
next prev parent reply other threads:[~2016-11-19 1:16 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 23:44 Tim Newsome
2016-11-19 1:16 ` Ofir Cohen [this message]
2016-11-21 16:37 ` Antoine Tremblay
2016-11-21 18:00 ` Tim Newsome
2016-12-13 20:58 ` Tim Newsome
2016-12-13 21:30 ` Tim Newsome
2016-12-14 9:18 ` Yao Qi
2016-12-14 12:32 ` Antoine Tremblay
2016-12-14 17:02 ` Tim Newsome
2016-12-14 17:22 ` Yao Qi
2016-12-14 18:15 ` Antoine Tremblay
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=CAHOBVAeUnwKFQCYjmVwtOdCEpEOvxi5Kde6_g1NTL+MZJ3apmw@mail.gmail.com \
--to=ofircohenn@gmail.com \
--cc=gdb@sourceware.org \
--cc=tim@sifive.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