This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Extend tsave: save start time, stop time, user and notes
- From: Dmitry Kozlov <dmitry_kozlov at mentor dot com>
- To: Yao Qi <yao at codesourcery dot com>
- Cc: <gdb-patches at sourceware dot org>, "'Stan_Shebs at mentor dot com'" <Stan_Shebs at mentor dot com>, Vladimir Prus <vladimir at codesourcery dot com>
- Date: Thu, 11 Oct 2012 19:53:10 +0400
- Subject: Re: [PATCH] Extend tsave: save start time, stop time, user and notes
- References: <506C4719.3030900@mentor.com> <5072CB78.8030908@codesourcery.com>
Hi Yao,
I have added xfree to this patch also. Please se attached patch.
Thank you,
Dmitry
On 10/08/2012 04:47 PM, Yao Qi wrote:
On 10/03/2012 10:09 PM, Dmitry Kozlov wrote:
In general, I think it is useful to include these attributes in
tracefile saved by command 'tsave'.
2012-10-03 Dmitry Kozlov<ddk@mentor.com>
* tracepoint.c (trace_save): Add saving starttime, stoptime, user
and notes.
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 0f94150..f7e96eb 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -3036,6 +3036,24 @@ trace_save (const char *filename, int
target_does_save)
fprintf (fp, ";disconn:%x", ts->disconnected_tracing);
if (ts->circular_buffer)
fprintf (fp, ";circular:%x", ts->circular_buffer);
+ if (ts->start_time)
+ fprintf (fp, ";starttime:%ld%06ld", (long int) (ts->start_time /
1000000), (long int) (ts->start_time % 1000000));
This line is too long...
+ if (ts->stop_time)
+ fprintf (fp, ";stoptime:%ld%06ld", (long int) (ts->stop_time /
1000000), (long int) (ts->stop_time % 1000000));
and this line.
+ if (ts->notes)
ts->notes will never be NULL, because GDBserver will always send
"notes:" in qTStatus packet (See gdbserver/tracepoint.c:cmd_qtstatus),
but other stubs may don't include "notes:" in qTStatus packet, so we
may do the check here like this,
if (ts->notes && ts->notes[0] != 0)
+ {
+ char *buf = (char *) alloca (strlen (ts->notes) * 2 + 1);
We need a blank line here. Looks 'alloca' is not encouraged to use,
and it should be replaced with xmalloc/xfree.
[PATCH] Replace potentially unsafe alloca with xmalloc/xfree in
value_concat
http://sourceware.org/ml/gdb-patches/2012-09/msg00274.html
+ bin2hex ((gdb_byte *) ts->notes, buf, 0);
+ fprintf (fp, ";notes:%s", buf);
+
+ }
+ if (ts->user_name)
+ {
+ char *buf = (char *) alloca (strlen (ts->user_name) * 2 + 1);
Likewise.
+ bin2hex ((gdb_byte *) ts->user_name, buf, 0);
+ fprintf (fp, ";username:%s", buf);
+
+ }
fprintf (fp, "\n");
/* Note that we want to upload tracepoints and save those, rather
Logically, this patch depends on your previous patch
PATCH fix start-time and stop-time in trace-status
http://sourceware.org/ml/gdb-patches/2012-09/msg00621.html
otherwise, we generate start-time and stop-time in trace file in
decimal format, while gdb still interprets it as hex.
commit 06786b04e1948d0037909e7fa6834ddd7c171968
Author: Dmitry Kozlov <dmitry_kozlov@mentor.com>
Date: Thu Oct 4 13:06:38 2012 +0400
Extend tsave to save trace start time, stop time and notes.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 53f2078..9196bc2 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2012-10-04 Dmitry Kozlov <ddk@codesourcery.com>
+
+ * tracepoint.c (trace_save): Add saving starttime, stoptime, user and notes.
+
+2012-10-04 Dmitry Kozlov <ddk@mentor.com>
+
+ * tracepoint.c (trace_status_command): Fix type of printf arg.
+ (trace_status_mi): Likewise.
+
2012-10-03 Doug Evans <dje@google.com>
PR symtab/14601
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 0f94150..959ede5 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -3018,10 +3018,11 @@ trace_save (const char *filename, int target_does_save)
(ts->running ? '1' : '0'), stop_reason_names[ts->stop_reason]);
if (ts->stop_reason == tracepoint_error)
{
- char *buf = (char *) alloca (strlen (ts->stop_desc) * 2 + 1);
+ char *buf = (char *) xmalloc (strlen (ts->stop_desc) * 2 + 1);
bin2hex ((gdb_byte *) ts->stop_desc, buf, 0);
fprintf (fp, ":%s", buf);
+ xfree (buf);
}
fprintf (fp, ":%x", ts->stopping_tracepoint);
if (ts->traceframe_count >= 0)
@@ -3036,6 +3037,35 @@ trace_save (const char *filename, int target_does_save)
fprintf (fp, ";disconn:%x", ts->disconnected_tracing);
if (ts->circular_buffer)
fprintf (fp, ";circular:%x", ts->circular_buffer);
+ if (ts->start_time)
+ {
+ fprintf (fp, ";starttime:%ld%06ld",
+ (long int) (ts->start_time / 1000000),
+ (long int) (ts->start_time % 1000000));
+ }
+ if (ts->stop_time)
+ {
+ fprintf (fp, ";stoptime:%ld%06ld",
+ (long int) (ts->stop_time / 1000000),
+ (long int) (ts->stop_time % 1000000));
+ }
+ if (ts->notes && ts->notes[0] != 0 )
+ {
+ char *buf = (char *) xmalloc (strlen (ts->notes) * 2 + 1);
+
+ bin2hex ((gdb_byte *) ts->notes, buf, 0);
+ fprintf (fp, ";notes:%s", buf);
+ xfree (buf);
+ }
+ if (ts->user_name)
+ {
+ char *buf = (char *) xmalloc (strlen (ts->user_name) * 2 + 1);
+
+ bin2hex ((gdb_byte *) ts->user_name, buf, 0);
+ fprintf (fp, ";username:%s", buf);
+ xfree (buf);
+ }
+
fprintf (fp, "\n");
/* Note that we want to upload tracepoints and save those, rather