From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40088 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Oj4Pt-0004xB-AJ for qemu-devel@nongnu.org; Wed, 11 Aug 2010 02:03:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Oj4Pr-0000hf-NC for qemu-devel@nongnu.org; Wed, 11 Aug 2010 02:03:56 -0400 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:35923) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Oj4Pr-0000gt-4I for qemu-devel@nongnu.org; Wed, 11 Aug 2010 02:03:55 -0400 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [202.81.31.247]) by e23smtp09.au.ibm.com (8.14.4/8.13.1) with ESMTP id o7B63lVq007843 for ; Wed, 11 Aug 2010 16:03:47 +1000 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o7B63lXq720980 for ; Wed, 11 Aug 2010 16:03:47 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o7B63ldi021768 for ; Wed, 11 Aug 2010 16:03:47 +1000 Message-ID: <4C623D40.6020600@linux.vnet.ibm.com> Date: Wed, 11 Aug 2010 11:33:44 +0530 From: Prerna Saxena MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] trace: Make trace record fields 64-bit References: <4C5FC2A5.8030907@linux.vnet.ibm.com> <1281360914-9937-1-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1281360914-9937-1-git-send-email-stefanha@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Mahesh Jagannath Salgaonkar , Ananth , qemu-devel@nongnu.org On 08/09/2010 07:05 PM, Stefan Hajnoczi wrote: > Explicitly use 64-bit fields in trace records so that timestamps and > magic numbers work for 32-bit host builds. > > Signed-off-by: Stefan Hajnoczi > --- > simpletrace.c | 31 +++++++++++++++++++++---------- > simpletrace.h | 11 ++++++----- > simpletrace.py | 2 +- > tracetool | 6 +++--- > 4 files changed, 31 insertions(+), 19 deletions(-) > > diff --git a/simpletrace.c b/simpletrace.c > index 954cc4e..01acfc5 100644 > --- a/simpletrace.c > +++ b/simpletrace.c > @@ -9,18 +9,29 @@ > */ > > #include > +#include > #include > #include > #include "trace.h" > > +/** Trace file header event ID */ > +#define HEADER_EVENT_ID (~(uint64_t)0) /* avoids conflicting with TraceEventIDs */ > + > +/** Trace file magic number */ > +#define HEADER_MAGIC 0xf2b177cb0aa429b4ULL > + > +/** Trace file version number, bump if format changes */ > +#define HEADER_VERSION 0 > + > +/** Trace buffer entry */ > typedef struct { > - unsigned long event; > - unsigned long timestamp_ns; > - unsigned long x1; > - unsigned long x2; > - unsigned long x3; > - unsigned long x4; > - unsigned long x5; > + uint64_t event; > + uint64_t timestamp_ns; > + uint64_t x1; > + uint64_t x2; > + uint64_t x3; > + uint64_t x4; > + uint64_t x5; > } TraceRecord; > > enum { > @@ -42,9 +53,9 @@ void st_print_trace_file_status(FILE *stream, int (*stream_printf)(FILE *stream, > static bool write_header(FILE *fp) > { > TraceRecord header = { > - .event = -1UL, /* max avoids conflicting with TraceEventIDs */ > - .timestamp_ns = 0xf2b177cb0aa429b4, /* magic number */ > - .x1 = 0, /* bump this version number if file format changes */ > + .event = HEADER_EVENT_ID, > + .timestamp_ns = HEADER_MAGIC, > + .x1 = HEADER_VERSION, > }; > > return fwrite(&header, sizeof header, 1, fp) == 1; > diff --git a/simpletrace.h b/simpletrace.h > index 6a2b8d9..f81aa8e 100644 > --- a/simpletrace.h > +++ b/simpletrace.h > @@ -10,6 +10,7 @@ > #define SIMPLETRACE_H > > #include > +#include > #include > > typedef unsigned int TraceEventID; It would be useful to have : typedef uint64_t TraceEventID; This ensures that the maximum number of trace events available on both 32 and 64 bit builds is same. > @@ -20,11 +21,11 @@ typedef struct { > } TraceEvent; > > void trace0(TraceEventID event); > -void trace1(TraceEventID event, unsigned long x1); > -void trace2(TraceEventID event, unsigned long x1, unsigned long x2); > -void trace3(TraceEventID event, unsigned long x1, unsigned long x2, unsigned long x3); > -void trace4(TraceEventID event, unsigned long x1, unsigned long x2, unsigned long x3, unsigned long x4); > -void trace5(TraceEventID event, unsigned long x1, unsigned long x2, unsigned long x3, unsigned long x4, unsigned long x5); > +void trace1(TraceEventID event, uint64_t x1); > +void trace2(TraceEventID event, uint64_t x1, uint64_t x2); > +void trace3(TraceEventID event, uint64_t x1, uint64_t x2, uint64_t x3); > +void trace4(TraceEventID event, uint64_t x1, uint64_t x2, uint64_t x3, uint64_t x4); > +void trace5(TraceEventID event, uint64_t x1, uint64_t x2, uint64_t x3, uint64_t x4, uint64_t x5); > void st_print_trace(FILE *stream, int (*stream_printf)(FILE *stream, const char *fmt, ...)); > void st_print_trace_events(FILE *stream, int (*stream_printf)(FILE *stream, const char *fmt, ...)); > void st_change_trace_event_state(const char *tname, bool tstate); > diff --git a/simpletrace.py b/simpletrace.py > index 979d911..fdf0eb5 100755 > --- a/simpletrace.py > +++ b/simpletrace.py > @@ -17,7 +17,7 @@ header_event_id = 0xffffffffffffffff > header_magic = 0xf2b177cb0aa429b4 > header_version = 0 > > -trace_fmt = 'LLLLLLL' > +trace_fmt = '=QQQQQQQ' > trace_len = struct.calcsize(trace_fmt) > event_re = re.compile(r'(disable\s+)?([a-zA-Z0-9_]+)\(([^)]*)\)\s+"([^"]*)"') > > diff --git a/tracetool b/tracetool > index c5a5bdc..b78cd97 100755 > --- a/tracetool > +++ b/tracetool > @@ -151,11 +151,11 @@ EOF > simple_event_num=0 > } > > -cast_args_to_ulong() > +cast_args_to_uint64_t() > { > local arg > for arg in $(get_argnames "$1"); do > - echo -n "(unsigned long)$arg" > + echo -n "(uint64_t)$arg" Tested this on a 32 bit host. It throws up some warnings, and we need : echo -n "(uint64_t)(uintptr_t)$arg" > done > } > > @@ -173,7 +173,7 @@ linetoh_simple() > trace_args="$simple_event_num" > if [ "$argc" -gt 0 ] > then > - trace_args="$trace_args, $(cast_args_to_ulong "$1")" > + trace_args="$trace_args, $(cast_args_to_uint64_t "$1")" > fi > > cat<