From: Nathan Sidwell <nathan@codesourcery.com>
To: gdb-patches@sources.redhat.com
Cc: Paul Brook <paul@codesourcery.com>
Subject: [PATCH] Some tracepoint fixes
Date: Wed, 09 Feb 2005 11:00:00 -0000 [thread overview]
Message-ID: <4209D595.7010602@codesourcery.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1035 bytes --]
In porting gdb to a new architecture, I came across a number of core gdb
bugs. Here is the first set of them and addresses the following issues,
1) we did not allow 'extended-remote' targets to use tracepoints.
2) We could only trace architectures with 64 registers, not 256 like
a comment suggested.
3) There was an erroneous comment about tracing memory ranges
4) If a ^D was entered when entering the 'actions' list, we'd create
a NULL action, which would cause a segfault when tracing started.
5) The 'tstatus' command did not actually print any status. testcase
gdb.trace/tfind.exp exepected it to do so.
6) Parsing the tfind responses uses strtol to read hex. That reads
'FFFFFFFF' as '7FFFFFFF' (and sets errno). Using sscanf reads that as
-1, as desired.
built and tested on i686-pc-linux-gnu, (and on the unreleased architecture
I ported to) ok?
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
[-- Attachment #2: tracepoint1.patch --]
[-- Type: text/plain, Size: 4311 bytes --]
2005-02-08 Nathan Sidwell <nathan@codesourcery.com>
* tracepoint.c (target_is_remote): Allow extended-remote.
(struct collection_list): Allow 256 registers, like the comment
said.
(add_memrange): Fix comment.
(read_actions): Turn EOF into 'end'.
(trace_status_command): Print the status.
(finish_tfind_command): Use sscanf not strtol.
Index: tracepoint.c
===================================================================
RCS file: /cvs/src/src/gdb/tracepoint.c,v
retrieving revision 1.68
diff -c -3 -p -r1.68 tracepoint.c
*** tracepoint.c 2 Feb 2005 00:20:05 -0000 1.68
--- tracepoint.c 8 Feb 2005 11:31:20 -0000
*************** static int
*** 164,170 ****
target_is_remote (void)
{
if (current_target.to_shortname &&
! strcmp (current_target.to_shortname, "remote") == 0)
return 1;
else
return 0;
--- 164,171 ----
target_is_remote (void)
{
if (current_target.to_shortname &&
! (strcmp (current_target.to_shortname, "remote") == 0
! || strcmp (current_target.to_shortname, "extended-remote") == 0))
return 1;
else
return 0;
*************** read_actions (struct tracepoint *t)
*** 860,865 ****
--- 861,869 ----
else
line = gdb_readline (0);
+ if (!line)
+ line = "end";
+
linetype = validate_actionline (&line, t);
if (linetype == BADLINE)
continue; /* already warned -- collect another line */
*************** struct memrange
*** 1074,1080 ****
struct collection_list
{
! unsigned char regs_mask[8]; /* room for up to 256 regs */
long listsize;
long next_memrange;
struct memrange *list;
--- 1078,1084 ----
struct collection_list
{
! unsigned char regs_mask[32]; /* room for up to 256 regs */
long listsize;
long next_memrange;
struct memrange *list;
*************** add_memrange (struct collection_list *me
*** 1171,1177 ****
printf_filtered (",%ld)\n", len);
}
! /* type: 0 == memory, n == basereg */
memranges->list[memranges->next_memrange].type = type;
/* base: addr if memory, offset if reg relative. */
memranges->list[memranges->next_memrange].start = base;
--- 1175,1181 ----
printf_filtered (",%ld)\n", len);
}
! /* type: -1 == memory, n == basereg */
memranges->list[memranges->next_memrange].type = type;
/* base: addr if memory, offset if reg relative. */
memranges->list[memranges->next_memrange].start = base;
*************** trace_status_command (char *args, int fr
*** 1873,1878 ****
--- 1877,1886 ----
/* exported for use by the GUI */
trace_running_p = (target_buf[1] == '1');
+ if (trace_running_p)
+ printf_filtered ("Trace is running.\n");
+ else
+ printf_filtered ("Trace is not running.\n");
}
else
error ("Trace can only be run on remote targets.");
*************** finish_tfind_command (char *msg,
*** 1888,1893 ****
--- 1896,1902 ----
CORE_ADDR old_frame_addr;
struct symbol *old_func;
char *reply;
+ int len;
old_frame_addr = get_frame_base (get_current_frame ());
old_func = find_pc_function (read_pc ());
*************** finish_tfind_command (char *msg,
*** 1899,1905 ****
switch (*reply)
{
case 'F':
! if ((target_frameno = (int) strtol (++reply, &reply, 16)) == -1)
{
/* A request for a non-existant trace frame has failed.
Our response will be different, depending on FROM_TTY:
--- 1908,1916 ----
switch (*reply)
{
case 'F':
! sscanf (reply, "F%X%n", &target_frameno, &len);
! reply += len;
! if (target_frameno == -1)
{
/* A request for a non-existant trace frame has failed.
Our response will be different, depending on FROM_TTY:
*************** finish_tfind_command (char *msg,
*** 1937,1943 ****
}
break;
case 'T':
! if ((target_tracept = (int) strtol (++reply, &reply, 16)) == -1)
error ("Target failed to find requested trace frame.");
break;
case 'O': /* "OK"? */
--- 1948,1956 ----
}
break;
case 'T':
! sscanf (reply, "T%X%n", &target_tracept, &len);
! reply += len;
! if (target_tracept == -1)
error ("Target failed to find requested trace frame.");
break;
case 'O': /* "OK"? */
next reply other threads:[~2005-02-09 9:19 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-09 11:00 Nathan Sidwell [this message]
2005-02-27 1:20 ` Daniel Jacobowitz
2005-03-08 10:06 ` Nathan Sidwell
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=4209D595.7010602@codesourcery.com \
--to=nathan@codesourcery.com \
--cc=gdb-patches@sources.redhat.com \
--cc=paul@codesourcery.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