From: Matthias Pfaller <leo@marco.de>
To: gdb@sourceware.org
Subject: Re: embedded system and "target remote"
Date: Wed, 09 Nov 2016 09:52:00 -0000 [thread overview]
Message-ID: <5822F1B0.6040403@marco.de> (raw)
In-Reply-To: <CAH=s-PNcjGoBwwXMBrsbgtaCEx73g=h_fR8-L7fYM1RM4z4J1w@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 1132 bytes --]
Hi,
I have done a patch that hands down thread information to remote.c.
As this is the first time I had a look at the gdb sources I'm pretty
sure my code is not suitable for integration...
The patch has (at least) the following problems:
- the thread id is needed in bp_target_info because this is what
remote.c will get. Because of this I now have the thread id in three
places (bp_location.thread, bp_location.overlay_target_info.thread and
bp_location.target_info.thread).
- there is no way to turn this off (I have no idea how this would
normally be handled)
- I have extended the Z0/Z1/z0/z1 to provide an additional parameter
(the thread id) when target_info.thread is >= 0.
regards, Matthias
PS: The stub code will hopefully follow in a couple of days.
--
Matthias Pfaller Software Entwicklung
marco Systemanalyse und Entwicklung GmbH Tel +49 8131 5161 41
Hans-Böckler-Str. 2, D 85221 Dachau Fax +49 8131 5161 66
http://www.marco.de/ Email leo@marco.de
Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München
[-- Attachment #1.2: gdb-patch --]
[-- Type: text/plain, Size: 4417 bytes --]
--- ../orig/gdb/breakpoint.c
+++ ./gdb/breakpoint.c
@@ -7267,7 +7267,8 @@
/* We compare bp_location.length in order to cover ranged breakpoints. */
return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
loc2->pspace->aspace, loc2->address)
- && loc1->length == loc2->length);
+ && loc1->length == loc2->length
+ && loc1->thread == loc2->thread);
}
static void
@@ -7354,6 +7355,10 @@
loc->cond_bytecode = NULL;
loc->shlib_disabled = 0;
loc->enabled = 1;
+ loc->thread = owner->thread;
+ loc->target_info.thread = owner->thread;
+ loc->overlay_target_info.thread = owner->thread;
+ loc->thread = owner->thread;
switch (owner->type)
{
@@ -8984,6 +8989,9 @@
copy->loc->line_number = orig->loc->line_number;
copy->loc->symtab = orig->loc->symtab;
copy->loc->enabled = loc_enabled;
+ copy->loc->thread = orig->loc->thread;
+ copy->loc->target_info.thread = orig->loc->thread;
+ copy->loc->overlay_target_info.thread = orig->loc->thread;
copy->frame_id = orig->frame_id;
copy->thread = orig->thread;
copy->pspace = orig->pspace;
@@ -9302,6 +9310,9 @@
{
init_raw_breakpoint (b, gdbarch, sal, type, ops);
b->thread = thread;
+ b->loc->thread = thread;
+ b->loc->target_info.thread = thread;
+ b->loc->overlay_target_info.thread = thread;
b->task = task;
b->cond_string = cond_string;
@@ -9655,6 +9666,10 @@
*task = 0;
*rest = NULL;
+ /* default to current thread on non-stop targets */
+ if (target_is_non_stop_p ())
+ *thread = inferior_thread ()->global_num;
+
while (tok && *tok)
{
const char *end_tok;
@@ -9946,6 +9961,9 @@
}
b->cond_string = cond_string;
b->thread = thread;
+ b->loc->thread = thread;
+ b->loc->target_info.thread = thread;
+ b->loc->overlay_target_info.thread = thread;
}
/* Create a private copy of any extra string. */
--- ../orig/gdb/breakpoint.h
+++ ./gdb/breakpoint.h
@@ -279,6 +279,9 @@
/* Flag that is true if the breakpoint should be left in place even
when GDB is not connected. */
int persist;
+
+ /* Thread identifier for which this breakpoint should be activated */
+ int thread;
};
/* GDB maintains two types of information about each breakpoint (or
@@ -399,7 +402,8 @@
char duplicate;
/* If we someday support real thread-specific breakpoints, then
- the breakpoint location will need a thread identifier. */
+ the breakpoint location will need a thread identifier. */
+ int thread;
/* Data for specific breakpoint types. These could be a union, but
simplicity is more important than memory usage for breakpoints. */
--- ../orig/gdb/remote.c
+++ ./gdb/remote.c
@@ -9300,7 +9300,12 @@
addr = (ULONGEST) remote_address_masked (addr);
p += hexnumstr (p, addr);
xsnprintf (p, endbuf - p, ",%d", bpsize);
-
+ p += strlen(p);
+ if (bp_tgt->thread >= 0)
+ {
+ *(p++) = ',';
+ write_ptid (p, endbuf, global_thread_id_to_ptid (bp_tgt->thread));
+ }
if (remote_supports_cond_breakpoints (ops))
remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
@@ -9358,6 +9363,12 @@
addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
p += hexnumstr (p, addr);
xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
+ p += strlen(p);
+ if (bp_tgt->thread >= 0)
+ {
+ *(p++) = ',';
+ write_ptid (p, endbuf, global_thread_id_to_ptid (bp_tgt->thread));
+ }
putpkt (rs->buf);
getpkt (&rs->buf, &rs->buf_size, 0);
@@ -9619,6 +9630,12 @@
addr = remote_address_masked (addr);
p += hexnumstr (p, (ULONGEST) addr);
xsnprintf (p, endbuf - p, ",%x", bpsize);
+ p += strlen(p);
+ if (bp_tgt->thread >= 0)
+ {
+ *(p++) = ',';
+ write_ptid (p, endbuf, global_thread_id_to_ptid (bp_tgt->thread));
+ }
if (remote_supports_cond_breakpoints (self))
remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
@@ -9675,6 +9692,12 @@
addr = remote_address_masked (bp_tgt->placed_address);
p += hexnumstr (p, (ULONGEST) addr);
xsnprintf (p, endbuf - p, ",%x", bp_tgt->placed_size);
+ p += strlen(p);
+ if (bp_tgt->thread >= 0)
+ {
+ *(p++) = ',';
+ write_ptid (p, endbuf, global_thread_id_to_ptid (bp_tgt->thread));
+ }
putpkt (rs->buf);
getpkt (&rs->buf, &rs->buf_size, 0);
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4349 bytes --]
prev parent reply other threads:[~2016-11-09 9:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-08 10:31 Matthias Pfaller
2016-11-08 11:14 ` Yao Qi
2016-11-08 12:17 ` Matthias Pfaller
2016-11-09 9:52 ` Matthias Pfaller [this message]
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=5822F1B0.6040403@marco.de \
--to=leo@marco.de \
--cc=gdb@sourceware.org \
/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