On Tue, Aug 30, 2011 at 7:43 PM, Blue Swirl <blauwir...@gmail.com> wrote: > On Mon, Aug 29, 2011 at 12:17 PM, Stefan Hajnoczi <stefa...@gmail.com> wrote: >> On Fri, Aug 26, 2011 at 8:06 PM, Blue Swirl <blauwir...@gmail.com> wrote: >>> Let guests inject tracepoint data via fw_cfg device. >>> >>> Signed-off-by: Blue Swirl <blauwir...@gmail.com> >>> --- >>> The patch is used like this: >>> ../configure --with-guest-trace-file=/src/openbios-devel/trace-events >>> make >>> sparc64-softmmu/qemu-system-sparc64 -trace file=foo >>> # ugly hack to combine the file, but my laziness^Wpython-fu is too >>> weak to add handling of "--guest-trace-file >>> /src/openbios-devel/trace-events" to simpletrace.py >>> cat ../trace-events /src/openbios-devel/trace-events >/tmp/trace-events >>> # examine trace file with OpenBIOS trace data with simpletrace.py >>> ../scripts/simpletrace.py /tmp/trace-events foo >>> ob_ide_read_blocks 0.000 dest=0xfff0bed0 blk=0x0 n=0x1 >>> ob_ide_read_blocks 6491.806 dest=0xfff0bed0 blk=0x0 n=0x1 >>> >>> An example of a generated guest-trace.c file: >>> /* This file is autogenerated by tracetool, do not edit. */ >>> #include "trace.h" >>> #include "guest-trace.h" >>> >>> void guest_trace(uint64_t event_id, uint64_t arg1, uint64_t arg2, >>> uint64_t arg3, uint64_t arg4, uint64_t arg5, uint64_t arg6) >>> >>> { >>> switch (event_id) { >>> >>> case 0: >>> trace_esp_do_command(arg1, arg2, arg3); >>> break; >>> >>> case 1: >>> trace_ob_ide_pio_insw(arg1); >>> break; >>> >>> case 2: >>> trace_ob_ide_read_blocks(arg1, arg2, arg3); >>> break; >>> >>> default: >>> break; >>> } >>> } >>> >>> --- >>> Makefile.objs | 15 +++++++++++- >>> configure | 9 +++++++- >>> guest-trace.h | 3 ++ >>> hw/fw_cfg.c | 31 +++++++++++++++++++++++++++ >>> hw/fw_cfg.h | 10 ++++++-- >>> scripts/tracetool | 60 >>> +++++++++++++++++++++++++++++++++++++++++++++++++++- >>> 6 files changed, 120 insertions(+), 8 deletions(-) >>> create mode 100644 guest-trace.h >> >> The ability to trace from the guest can be handy, so I think we should >> have this feature. Please add documentation on how to hook it up >> (e.g. how people would use this for other firmware/guest code and/or >> other architectures). > > OK. The format should be the same as raw simpletrace data, but words > always in little endian like used elsewhere with fw_cfg. BTW, > currently simpletrace file format depends on host endianness, is that > intentional?
Yes, it is intentional. The rationale is that we want to stream trace events to disk as quickly as possible without any overhead. Since there is a magic number in the first trace record, the post-processing tool can in theory determine the endianness and do the byteswapping at that time. The current simpletrace.py script does not do this. Stefan