Specify trace file name
PATCH 1/1 Specify trace file name
[PATCH] Allow users to specify a file for trace-outputs at configuration. Also, allow trace files to be annotated by <pid> so each qemu instance has unique traces.
The trace file name can be passed as a config option:
--trace-file=/path/to/file
(Default : /tmp/trace )
At runtime, the pid of the qemu process is appended to the filename so that mutiple qemu instances do not have overlapping logs.
Eg : /tmp/trace-1234 for qemu launched with pid 1234.
I have yet to test this on windows. getpid() is used at many places in code(including vnc.c), so I'm hoping this would be okay too.
Signed-off-by Prerna Saxena <[email protected]>
--- configure | 20 ++++++++++++++++++++ simpletrace.c | 13 ++++++++++++- tracetool | 1 + vl.c | 8 ++++++++ 4 files changed, 41 insertions(+), 1 deletions(-)
configure +20 -0
@@ -313,6 +313,7 @@ check_utests="no" user_pie="no" zero_malloc="" trace_backend="nop" +trace_file="" # OS specific if check_define __linux__ ; then
@@ -517,6 +518,8 @@ for opt do ;; --trace-backend=*) trace_backend="$optarg" ;; + --trace-file=*) trace_file="$optarg" + ;; --enable-gprof) gprof="yes" ;; --static)
@@ -876,6 +879,9 @@ echo " --disable-docs disable documentation build" echo " --disable-vhost-net disable vhost-net acceleration support" echo " --enable-vhost-net enable vhost-net acceleration support" echo " --trace-backend=B Trace backend nop simple ust" +echo " --trace-file=NAME Full PATH,NAME of file to store traces" +echo " Default:/tmp/trace-<pid>" +echo " Default:trace-<pid> on Windows" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1
@@ -2132,6 +2138,7 @@ echo "fdatasync $fdatasync" echo "uuid support $uuid" echo "vhost-net support $vhost_net" echo "Trace backend $trace_backend" +echo "Trace Output File $trace_file-<pid>" if test $sdl_too_old = "yes"; then echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -2387,6 +2394,19 @@ fi if test "$trace_backend" = "ust"; then LIBS="-lust $LIBS" fi +# Set the appropriate trace file. +if test "$trace_backend" = "simple"; then + if test "$trace_file" = ""; then + if test "$mingw32" = "yes" ; then + trace_file="\"trace-%u\"" + else + trace_file="\"/tmp/trace-%u\"" + fi + else + trace_file="\"$trace_file-%u\"" + fi +fi +echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak echo "TOOLS=$tools" >> $config_host_mak echo "ROMS=$roms" >> $config_host_mak echo "MAKE=$make" >> $config_host_mak
simpletrace.c +12 -1
@@ -20,6 +20,16 @@ static TraceRecord trace_buf[TRACE_BUF_LEN];static unsigned int trace_idx;static FILE *trace_fp; +char * trace_file_name; + +/** +* Initialize trace file name. +*/ +int init_trace_file (void ) +{ +return asprintf (&trace_file_name,CONFIG_TRACE_FILE ,getpid ()); +} +static void trace (TraceEventID event,unsigned long x1,unsigned long x2,unsigned long x3,unsigned long x4,unsigned long x5) {
@@ -40,7 +50,7 @@ static void trace(TraceEventID event, unsigned long x1, trace_idx =0 ;if (!trace_fp) { - trace_fp =fopen ("/tmp/trace.log" ,"w" ); + trace_fp =fopen (trace_file_name,"w" ); }if (trace_fp) {size_t result =fwrite (trace_buf,sizeof trace_buf,1 , trace_fp);
@@ -78,6 +88,7 @@ void do_info_trace(Monitor *mon) trace_buf[i].event, trace_buf[i].x1, trace_buf[i].x2, trace_buf[i].x3, trace_buf[i].x4, trace_buf[i].x5); } +monitor_printf (mon,"Trace output logged at %s" , trace_file_name); }void do_info_all_trace_events (Monitor *mon)
tracetool +1 -0
@@ -125,6 +125,7 @@ typedef struct { bool state; } TraceEvent; +int init_trace_file(void); 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);
vl.c +8 -0
@@ -95,6 +95,10 @@ extern int madvise(caddr_t, size_t, int);#include <windows.h> #endif +#ifdef CONFIG_SIMPLE_TRACE +#include "trace.h" +#endif +#ifdef CONFIG_SDL #if defined(__APPLE__) || defined(main)#include <SDL.h>
@@ -2758,6 +2762,10 @@ int main(int argc, char **argv, char **envp)exit (1 ); } +/* Init tracing, if configured */ +#ifdef CONFIG_SIMPLE_TRACE +init_trace_file (); +#endif /* init the bluetooth world */ if (foreach_device_config (DEV_BT , bt_parse))exit (1 );
Signature · 8 lines
1.6.2.5 -- Prerna Saxena Linux Technology Centre, IBM Systems and Technology Lab, Bangalore, India