mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJYkeZAAAoJEJykq7OBq3PI6oUH/3qlRvQrWmhWLR+XCtwU0gON HRApL57Of+B1YbqJzb8wzjLMLfzZQYLoT7kf3FDRON751Iwpv2Qyl6j79kbmOQwy txvtgUTtPZrOZ9HMk6M1VboiKrkM1t0I1QiRYy/af2f1gD3KTqIt8YN1ic3xatKD Fgmx+oD+6EkrNilthemvDyaXtGsdTl4GC9ZbGcJB2VJzzWkksRUfeZWysIu9p2zP l6viegW/1+o5wYgBt6DxMalfNGbEiuBgXgx6PVFPbkw0xNURC52qDHhQ91xTSWt1 pvFrIhYWR/ETN0twJh+jtmCjkawKWSsx2nrLlrSh4H0EpwFoRfFqH/ZrOFSg0wg= =QnCX -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/tracing-pull-request' into staging # gpg: Signature made Wed 01 Feb 2017 13:44:32 GMT # gpg: using RSA key 0x9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha/tags/tracing-pull-request: trace: clean up trace-events files qapi: add missing trace_visit_type_enum() call trace: improve error reporting when parsing simpletrace header trace: update docs to reflect new code generation approach trace: switch to modular code generation for sub-directories trace: move setting of group name into Makefiles trace: move hw/i386/xen events to correct subdir trace: move hw/xen events to correct subdir trace: move hw/block/dataplane events to correct subdir make: move top level dir to end of include search path # Conflicts: # Makefile Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4e9f5244e1
22
.gitignore
vendored
22
.gitignore
vendored
@ -6,18 +6,12 @@
|
||||
/config.status
|
||||
/config-temp
|
||||
/trace-events-all
|
||||
/trace/generated-tracers.h
|
||||
/trace/generated-tracers.c
|
||||
/trace/generated-tracers-dtrace.h
|
||||
/trace/generated-tracers.dtrace
|
||||
/trace/generated-events.h
|
||||
/trace/generated-events.c
|
||||
/trace/generated-helpers-wrappers.h
|
||||
/trace/generated-helpers.h
|
||||
/trace/generated-helpers.c
|
||||
/trace/generated-tcg-tracers.h
|
||||
/trace/generated-ust-provider.h
|
||||
/trace/generated-ust.c
|
||||
/ui/shader/texture-blit-frag.h
|
||||
/ui/shader/texture-blit-vert.h
|
||||
*-timestamp
|
||||
@ -120,3 +114,19 @@ tags
|
||||
TAGS
|
||||
docker-src.*
|
||||
*~
|
||||
trace.h
|
||||
trace.c
|
||||
trace-ust.h
|
||||
trace-ust.h
|
||||
trace-dtrace.h
|
||||
trace-dtrace.dtrace
|
||||
trace-root.h
|
||||
trace-root.c
|
||||
trace-ust-root.h
|
||||
trace-ust-root.h
|
||||
trace-ust-all.h
|
||||
trace-ust-all.c
|
||||
trace-dtrace-root.h
|
||||
trace-dtrace-root.dtrace
|
||||
trace-ust-all.h
|
||||
trace-ust-all.c
|
||||
|
156
Makefile
156
Makefile
@ -56,25 +56,136 @@ GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c qapi-event.c
|
||||
GENERATED_HEADERS += qmp-introspect.h
|
||||
GENERATED_SOURCES += qmp-introspect.c
|
||||
|
||||
GENERATED_HEADERS += trace/generated-tracers.h
|
||||
ifeq ($(findstring dtrace,$(TRACE_BACKENDS)),dtrace)
|
||||
GENERATED_HEADERS += trace/generated-tracers-dtrace.h
|
||||
endif
|
||||
GENERATED_SOURCES += trace/generated-tracers.c
|
||||
|
||||
GENERATED_HEADERS += trace/generated-tcg-tracers.h
|
||||
|
||||
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
|
||||
GENERATED_HEADERS += trace/generated-helpers.h
|
||||
GENERATED_SOURCES += trace/generated-helpers.c
|
||||
|
||||
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
|
||||
GENERATED_HEADERS += trace/generated-ust-provider.h
|
||||
GENERATED_SOURCES += trace/generated-ust.c
|
||||
ifdef CONFIG_TRACE_UST
|
||||
GENERATED_HEADERS += trace-ust-all.h
|
||||
GENERATED_SOURCES += trace-ust-all.c
|
||||
endif
|
||||
|
||||
GENERATED_HEADERS += module_block.h
|
||||
|
||||
TRACE_HEADERS = trace-root.h $(trace-events-subdirs:%=%/trace.h)
|
||||
TRACE_SOURCES = trace-root.c $(trace-events-subdirs:%=%/trace.c)
|
||||
TRACE_DTRACE =
|
||||
ifdef CONFIG_TRACE_DTRACE
|
||||
TRACE_HEADERS += trace-dtrace-root.h $(trace-events-subdirs:%=%/trace-dtrace.h)
|
||||
TRACE_DTRACE += trace-dtrace-root.dtrace $(trace-events-subdirs:%=%/trace-dtrace.dtrace)
|
||||
endif
|
||||
ifdef CONFIG_TRACE_UST
|
||||
TRACE_HEADERS += trace-ust-root.h $(trace-events-subdirs:%=%/trace-ust.h)
|
||||
endif
|
||||
|
||||
GENERATED_HEADERS += $(TRACE_HEADERS)
|
||||
GENERATED_SOURCES += $(TRACE_SOURCES)
|
||||
|
||||
trace-group-name = $(shell dirname $1 | sed -e 's/[^a-zA-Z0-9]/_/g')
|
||||
|
||||
%/trace.h: %/trace.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
%/trace.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=$(call trace-group-name,$@) \
|
||||
--format=h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
%/trace.c: %/trace.c-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
%/trace.c-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=$(call trace-group-name,$@) \
|
||||
--format=c \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
%/trace-ust.h: %/trace-ust.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
%/trace-ust.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=$(call trace-group-name,$@) \
|
||||
--format=ust-events-h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
%/trace-dtrace.dtrace: %/trace-dtrace.dtrace-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
%/trace-dtrace.dtrace-timestamp: $(SRC_PATH)/%/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=$(call trace-group-name,$@) \
|
||||
--format=d \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
|
||||
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
||||
|
||||
%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)
|
||||
|
||||
|
||||
trace-root.h: trace-root.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=root \
|
||||
--format=h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-root.c: trace-root.c-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-root.c-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=root \
|
||||
--format=c \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-ust-root.h: trace-ust-root.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-ust-root.h-timestamp: $(SRC_PATH)/trace-events $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=root \
|
||||
--format=ust-events-h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-ust-all.h: trace-ust-all.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-ust-all.h-timestamp: $(trace-events-files) $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=ust-events-h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-ust-all.c: trace-ust-all.c-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-ust-all.c-timestamp: $(trace-events-files) $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=ust-events-c \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$(trace-events-files) > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-dtrace-root.dtrace: trace-dtrace-root.dtrace-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=root \
|
||||
--format=d \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(@:%-timestamp=%)")
|
||||
|
||||
trace-dtrace-root.h: trace-dtrace-root.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
||||
|
||||
trace-dtrace-root.o: trace-dtrace-root.dtrace
|
||||
|
||||
# Don't try to regenerate Makefile or configure
|
||||
# We don't generate any of them
|
||||
Makefile: ;
|
||||
@ -161,7 +272,8 @@ dummy := $(call unnest-vars,, \
|
||||
qom-obj-y \
|
||||
io-obj-y \
|
||||
common-obj-y \
|
||||
common-obj-m)
|
||||
common-obj-m \
|
||||
trace-obj-y)
|
||||
|
||||
ifneq ($(wildcard config-host.mak),)
|
||||
include $(SRC_PATH)/tests/Makefile.include
|
||||
@ -225,7 +337,7 @@ dtc/%:
|
||||
mkdir -p $@
|
||||
|
||||
$(SUBDIR_RULES): libqemuutil.a libqemustub.a $(common-obj-y) $(chardev-obj-y) \
|
||||
$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
|
||||
$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY)) $(trace-obj-y)
|
||||
|
||||
ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
|
||||
# Only keep -O and -g cflags
|
||||
@ -249,15 +361,17 @@ libqemuutil.a: $(util-obj-y)
|
||||
|
||||
######################################################################
|
||||
|
||||
COMMON_LDADDS = $(trace-obj-y) libqemuutil.a libqemustub.a
|
||||
|
||||
qemu-img.o: qemu-img-cmds.h
|
||||
|
||||
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
|
||||
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o libqemuutil.a libqemustub.a
|
||||
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
|
||||
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o libqemuutil.a libqemustub.a
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal.o fsdev/9p-iov-marshal.o $(COMMON_LDADDS)
|
||||
fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap
|
||||
|
||||
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
|
||||
@ -322,7 +436,7 @@ $(qapi-modules) $(SRC_PATH)/scripts/qapi-introspect.py $(qapi-py)
|
||||
QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
|
||||
$(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
|
||||
|
||||
qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
|
||||
qemu-ga$(EXESUF): $(qga-obj-y) $(COMMON_LDADDS)
|
||||
$(call LINK, $^)
|
||||
|
||||
ifdef QEMU_GA_MSI_ENABLED
|
||||
@ -347,9 +461,9 @@ ifneq ($(EXESUF),)
|
||||
qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
|
||||
endif
|
||||
|
||||
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) libqemuutil.a libqemustub.a
|
||||
ivshmem-client$(EXESUF): $(ivshmem-client-obj-y) $(COMMON_LDADDS)
|
||||
$(call LINK, $^)
|
||||
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) libqemuutil.a libqemustub.a
|
||||
ivshmem-server$(EXESUF): $(ivshmem-server-obj-y) $(COMMON_LDADDS)
|
||||
$(call LINK, $^)
|
||||
|
||||
module_block.h: $(SRC_PATH)/scripts/modules/module_block.py config-host.mak
|
||||
@ -666,6 +780,10 @@ ifneq ($(filter-out $(UNCHECKED_GOALS),$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fa
|
||||
Makefile: $(GENERATED_HEADERS)
|
||||
endif
|
||||
|
||||
.SECONDARY: $(TRACE_HEADERS) $(TRACE_HEADERS:%=%-timestamp) \
|
||||
$(TRACE_SOURCES) $(TRACE_SOURCES:%=%-timestamp) \
|
||||
$(TRACE_DTRACE) $(TRACE_DTRACE:%=%-timestamp)
|
||||
|
||||
# Include automatically generated dependency files
|
||||
# Dependencies in Makefile.objs files come from our recursive subdir rules
|
||||
-include $(wildcard *.d tests/*.d)
|
||||
|
@ -119,47 +119,58 @@ ivshmem-server-obj-y = contrib/ivshmem-server/
|
||||
libvhost-user-obj-y = contrib/libvhost-user/
|
||||
|
||||
######################################################################
|
||||
trace-events-y = trace-events
|
||||
trace-events-y += util/trace-events
|
||||
trace-events-y += crypto/trace-events
|
||||
trace-events-y += io/trace-events
|
||||
trace-events-y += migration/trace-events
|
||||
trace-events-y += block/trace-events
|
||||
trace-events-y += hw/block/trace-events
|
||||
trace-events-y += hw/char/trace-events
|
||||
trace-events-y += hw/intc/trace-events
|
||||
trace-events-y += hw/net/trace-events
|
||||
trace-events-y += hw/virtio/trace-events
|
||||
trace-events-y += hw/audio/trace-events
|
||||
trace-events-y += hw/misc/trace-events
|
||||
trace-events-y += hw/usb/trace-events
|
||||
trace-events-y += hw/scsi/trace-events
|
||||
trace-events-y += hw/nvram/trace-events
|
||||
trace-events-y += hw/display/trace-events
|
||||
trace-events-y += hw/input/trace-events
|
||||
trace-events-y += hw/timer/trace-events
|
||||
trace-events-y += hw/dma/trace-events
|
||||
trace-events-y += hw/sparc/trace-events
|
||||
trace-events-y += hw/sd/trace-events
|
||||
trace-events-y += hw/isa/trace-events
|
||||
trace-events-y += hw/mem/trace-events
|
||||
trace-events-y += hw/i386/trace-events
|
||||
trace-events-y += hw/9pfs/trace-events
|
||||
trace-events-y += hw/ppc/trace-events
|
||||
trace-events-y += hw/pci/trace-events
|
||||
trace-events-y += hw/s390x/trace-events
|
||||
trace-events-y += hw/vfio/trace-events
|
||||
trace-events-y += hw/acpi/trace-events
|
||||
trace-events-y += hw/arm/trace-events
|
||||
trace-events-y += hw/alpha/trace-events
|
||||
trace-events-y += ui/trace-events
|
||||
trace-events-y += audio/trace-events
|
||||
trace-events-y += net/trace-events
|
||||
trace-events-y += target/arm/trace-events
|
||||
trace-events-y += target/i386/trace-events
|
||||
trace-events-y += target/sparc/trace-events
|
||||
trace-events-y += target/s390x/trace-events
|
||||
trace-events-y += target/ppc/trace-events
|
||||
trace-events-y += qom/trace-events
|
||||
trace-events-y += linux-user/trace-events
|
||||
trace-events-y += qapi/trace-events
|
||||
trace-events-subdirs =
|
||||
trace-events-subdirs += util
|
||||
trace-events-subdirs += crypto
|
||||
trace-events-subdirs += io
|
||||
trace-events-subdirs += migration
|
||||
trace-events-subdirs += block
|
||||
trace-events-subdirs += hw/block
|
||||
trace-events-subdirs += hw/block/dataplane
|
||||
trace-events-subdirs += hw/char
|
||||
trace-events-subdirs += hw/intc
|
||||
trace-events-subdirs += hw/net
|
||||
trace-events-subdirs += hw/virtio
|
||||
trace-events-subdirs += hw/audio
|
||||
trace-events-subdirs += hw/misc
|
||||
trace-events-subdirs += hw/usb
|
||||
trace-events-subdirs += hw/scsi
|
||||
trace-events-subdirs += hw/nvram
|
||||
trace-events-subdirs += hw/display
|
||||
trace-events-subdirs += hw/input
|
||||
trace-events-subdirs += hw/timer
|
||||
trace-events-subdirs += hw/dma
|
||||
trace-events-subdirs += hw/sparc
|
||||
trace-events-subdirs += hw/sd
|
||||
trace-events-subdirs += hw/isa
|
||||
trace-events-subdirs += hw/mem
|
||||
trace-events-subdirs += hw/i386
|
||||
trace-events-subdirs += hw/i386/xen
|
||||
trace-events-subdirs += hw/9pfs
|
||||
trace-events-subdirs += hw/ppc
|
||||
trace-events-subdirs += hw/pci
|
||||
trace-events-subdirs += hw/s390x
|
||||
trace-events-subdirs += hw/vfio
|
||||
trace-events-subdirs += hw/acpi
|
||||
trace-events-subdirs += hw/arm
|
||||
trace-events-subdirs += hw/alpha
|
||||
trace-events-subdirs += hw/xen
|
||||
trace-events-subdirs += ui
|
||||
trace-events-subdirs += audio
|
||||
trace-events-subdirs += net
|
||||
trace-events-subdirs += target/arm
|
||||
trace-events-subdirs += target/i386
|
||||
trace-events-subdirs += target/sparc
|
||||
trace-events-subdirs += target/s390x
|
||||
trace-events-subdirs += target/ppc
|
||||
trace-events-subdirs += qom
|
||||
trace-events-subdirs += linux-user
|
||||
trace-events-subdirs += qapi
|
||||
|
||||
trace-events-files = $(SRC_PATH)/trace-events $(trace-events-subdirs:%=$(SRC_PATH)/%/trace-events)
|
||||
|
||||
trace-obj-y = trace-root.o
|
||||
trace-obj-y += $(trace-events-subdirs:%=%/trace.o)
|
||||
trace-obj-$(CONFIG_TRACE_UST) += trace-ust-all.o
|
||||
trace-obj-$(CONFIG_TRACE_DTRACE) += trace-dtrace-root.o
|
||||
trace-obj-$(CONFIG_TRACE_DTRACE) += $(trace-events-subdirs:%=%/trace-dtrace.o)
|
||||
|
@ -50,6 +50,7 @@ endif
|
||||
|
||||
$(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace-events-all
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=stap \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
--binary=$(bindir)/$(QEMU_PROG) \
|
||||
@ -59,6 +60,7 @@ $(QEMU_PROG).stp-installed: $(BUILD_DIR)/trace-events-all
|
||||
|
||||
$(QEMU_PROG).stp: $(BUILD_DIR)/trace-events-all
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=stap \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
--binary=$(realpath .)/$(QEMU_PROG) \
|
||||
@ -68,6 +70,7 @@ $(QEMU_PROG).stp: $(BUILD_DIR)/trace-events-all
|
||||
|
||||
$(QEMU_PROG)-simpletrace.stp: $(BUILD_DIR)/trace-events-all
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=simpletrace-stap \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
--probe-prefix=qemu.$(TARGET_TYPE).$(TARGET_NAME) \
|
||||
@ -185,7 +188,8 @@ dummy := $(call unnest-vars,.., \
|
||||
qom-obj-y \
|
||||
io-obj-y \
|
||||
common-obj-y \
|
||||
common-obj-m)
|
||||
common-obj-m \
|
||||
trace-obj-y)
|
||||
target-obj-y := $(target-obj-y-save)
|
||||
all-obj-y += $(common-obj-y)
|
||||
all-obj-y += $(target-obj-y)
|
||||
@ -197,8 +201,10 @@ all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y)
|
||||
|
||||
$(QEMU_PROG_BUILD): config-devices.mak
|
||||
|
||||
COMMON_LDADDS = $(trace-obj-y) ../libqemuutil.a ../libqemustub.a
|
||||
|
||||
# build either PROG or PROGW
|
||||
$(QEMU_PROG_BUILD): $(all-obj-y) ../libqemuutil.a ../libqemustub.a
|
||||
$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS)
|
||||
$(call LINK, $(filter-out %.mak, $^))
|
||||
ifdef CONFIG_DARWIN
|
||||
$(call quiet-command,Rez -append $(SRC_PATH)/pc-bios/qemu.rsrc -o $@,"REZ","$(TARGET_DIR)$@")
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "qemu/rcu_queue.h"
|
||||
#include "qemu/sockets.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#ifdef CONFIG_EPOLL_CREATE1
|
||||
#include <sys/epoll.h>
|
||||
#endif
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "exec/cpu-common.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sysemu/balloon.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "qmp-commands.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/qmp/qjson.h"
|
||||
|
2
block.c
2
block.c
@ -22,7 +22,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "trace.h"
|
||||
#include "block/trace.h"
|
||||
#include "block/block_int.h"
|
||||
#include "block/blockjob.h"
|
||||
#include "block/nbd.h"
|
||||
|
@ -35,8 +35,6 @@ mirror_one_iteration(void *s, int64_t sector_num, int nb_sectors) "s %p sector_n
|
||||
mirror_iteration_done(void *s, int64_t sector_num, int nb_sectors, int ret) "s %p sector_num %"PRId64" nb_sectors %d ret %d"
|
||||
mirror_yield(void *s, int64_t cnt, int buf_free_count, int in_flight) "s %p dirty count %"PRId64" free buffers %d in_flight %d"
|
||||
mirror_yield_in_flight(void *s, int64_t sector_num, int in_flight) "s %p sector_num %"PRId64" in_flight %d"
|
||||
mirror_yield_buf_busy(void *s, int nb_chunks, int in_flight) "s %p requested chunks %d in_flight %d"
|
||||
mirror_break_buf_busy(void *s, int nb_chunks, int in_flight) "s %p requested chunks %d in_flight %d"
|
||||
|
||||
# block/backup.c
|
||||
backup_do_cow_enter(void *job, int64_t start, int64_t sector_num, int nb_sectors) "job %p start %"PRId64" sector_num %"PRId64" nb_sectors %d"
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "qmp-commands.h"
|
||||
#include "trace.h"
|
||||
#include "block/nbd.h"
|
||||
#include "io/channel-socket.h"
|
||||
|
||||
|
@ -48,7 +48,7 @@
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "block/block_int.h"
|
||||
#include "qmp-commands.h"
|
||||
#include "trace.h"
|
||||
#include "block/trace.h"
|
||||
#include "sysemu/arch_init.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qemu/help_option.h"
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu-common.h"
|
||||
#include "trace.h"
|
||||
#include "block/block.h"
|
||||
#include "block/blockjob_int.h"
|
||||
#include "block/block_int.h"
|
||||
|
@ -18,7 +18,7 @@
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "cpu.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "disas/disas.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "tcg.h"
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/main-loop.h"
|
||||
|
||||
|
@ -27,18 +27,44 @@ for debugging, profiling, and observing execution.
|
||||
|
||||
== Trace events ==
|
||||
|
||||
=== Sub-directory setup ===
|
||||
|
||||
Each directory in the source tree can declare a set of static trace events
|
||||
in a "trace-events" file. Each trace event declaration names the event, its
|
||||
arguments, and the format string which can be used for pretty-printing:
|
||||
in a local "trace-events" file. All directories which contain "trace-events"
|
||||
files must be listed in the "trace-events-subdirs" make variable in the top
|
||||
level Makefile.objs. During build, the "trace-events" file in each listed
|
||||
subdirectory will be processed by the "tracetool" script to generate code for
|
||||
the trace events.
|
||||
|
||||
qemu_vmalloc(size_t size, void *ptr) "size %zu ptr %p"
|
||||
qemu_vfree(void *ptr) "ptr %p"
|
||||
The individual "trace-events" files are merged into a "trace-events-all" file,
|
||||
which is also installed into "/usr/share/qemu" with the name "trace-events".
|
||||
This merged file is to be used by the "simpletrace.py" script to later analyse
|
||||
traces in the simpletrace data format.
|
||||
|
||||
All "trace-events" files must be listed in the "trace-event-y" make variable
|
||||
in the top level Makefile.objs. During build the individual files are combined
|
||||
to create a "trace-events-all" file, which is processed by the "tracetool"
|
||||
script during build to generate code for the trace events. The
|
||||
"trace-events-all" file is also installed into "/usr/share/qemu".
|
||||
In the sub-directory the following files will be automatically generated
|
||||
|
||||
- trace.c - the trace event state declarations
|
||||
- trace.h - the trace event enums and probe functions
|
||||
- trace-dtrace.h - DTrace event probe specification
|
||||
- trace-dtrace.dtrace - DTrace event probe helper declaration
|
||||
- trace-dtrace.o - binary DTrace provider (generated by dtrace)
|
||||
- trace-ust.h - UST event probe helper declarations
|
||||
|
||||
Source files in the sub-directory should #include the local 'trace.h' file,
|
||||
without any sub-directory path prefix. eg io/channel-buffer.c would do
|
||||
|
||||
#include "trace.h"
|
||||
|
||||
To access the 'io/trace.h' file. While it is possible to include a trace.h
|
||||
file from outside a source files' own sub-directory, this is discouraged in
|
||||
general. It is strongly preferred that all events be declared directly in
|
||||
the sub-directory that uses them. The only exception is where there are some
|
||||
shared trace events defined in the top level directory trace-events file.
|
||||
The top level directory generates trace files with a filename prefix of
|
||||
"trace-root" instead of just "trace". This is to avoid ambiguity between
|
||||
a trace.h in the current directory, vs the top level directory.
|
||||
|
||||
=== Using trace events ===
|
||||
|
||||
Trace events are invoked directly from source code like this:
|
||||
|
||||
@ -83,6 +109,13 @@ Format strings should reflect the types defined in the trace event. Take
|
||||
special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
|
||||
respectively. This ensures portability between 32- and 64-bit platforms.
|
||||
|
||||
Each event declaration will start with the event name, then its arguments,
|
||||
finally a format string for pretty-printing. For example:
|
||||
|
||||
qemu_vmalloc(size_t size, void *ptr) "size %zu ptr %p"
|
||||
qemu_vfree(void *ptr) "ptr %p"
|
||||
|
||||
|
||||
=== Hints for adding new trace events ===
|
||||
|
||||
1. Trace state changes in the code. Interesting points in the code usually
|
||||
|
2
exec.c
2
exec.c
@ -44,7 +44,7 @@
|
||||
#include "sysemu/dma.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "sysemu/xen-mapcache.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#endif
|
||||
#include "exec/cpu-all.h"
|
||||
#include "qemu/rcu_queue.h"
|
||||
|
5
hw/block/dataplane/trace-events
Normal file
5
hw/block/dataplane/trace-events
Normal file
@ -0,0 +1,5 @@
|
||||
# See docs/tracing.txt for syntax documentation.
|
||||
|
||||
# hw/block/dataplane/virtio-blk.c
|
||||
virtio_blk_data_plane_start(void *s) "dataplane %p"
|
||||
virtio_blk_data_plane_stop(void *s) "dataplane %p"
|
@ -7,11 +7,6 @@ virtio_blk_handle_write(void *req, uint64_t sector, size_t nsectors) "req %p sec
|
||||
virtio_blk_handle_read(void *req, uint64_t sector, size_t nsectors) "req %p sector %"PRIu64" nsectors %zu"
|
||||
virtio_blk_submit_multireq(void *mrb, int start, int num_reqs, uint64_t offset, size_t size, bool is_write) "mrb %p start %d num_reqs %d offset %"PRIu64" size %zu is_write %d"
|
||||
|
||||
# hw/block/dataplane/virtio-blk.c
|
||||
virtio_blk_data_plane_start(void *s) "dataplane %p"
|
||||
virtio_blk_data_plane_stop(void *s) "dataplane %p"
|
||||
virtio_blk_data_plane_process_request(void *s, unsigned int out_num, unsigned int in_num, unsigned int head) "dataplane %p out_num %u in_num %u head %u"
|
||||
|
||||
# hw/block/hd-geometry.c
|
||||
hd_geometry_lchs_guess(void *blk, int cyls, int heads, int secs) "blk %p LCHS %d %d %d"
|
||||
hd_geometry_guess(void *blk, uint32_t cyls, uint32_t heads, uint32_t secs, int trans) "blk %p CHS %u %u %u trans %d"
|
||||
|
@ -34,7 +34,6 @@ vmware_setmode(uint32_t w, uint32_t h, uint32_t bpp) "%dx%d @ %d bpp"
|
||||
# hw/display/virtio-gpu.c
|
||||
virtio_gpu_features(bool virgl) "virgl %d"
|
||||
virtio_gpu_cmd_get_display_info(void) ""
|
||||
virtio_gpu_cmd_get_caps(void) ""
|
||||
virtio_gpu_cmd_set_scanout(uint32_t id, uint32_t res, uint32_t w, uint32_t h, uint32_t x, uint32_t y) "id %d, res 0x%x, w %d, h %d, x %d, y %d"
|
||||
virtio_gpu_cmd_res_create_2d(uint32_t res, uint32_t fmt, uint32_t w, uint32_t h) "res 0x%x, fmt 0x%x, w %d, h %d"
|
||||
virtio_gpu_cmd_res_create_3d(uint32_t res, uint32_t fmt, uint32_t w, uint32_t h, uint32_t d) "res 0x%x, fmt 0x%x, w %d, h %d, d %d"
|
||||
|
@ -1,12 +1,5 @@
|
||||
# See docs/tracing.txt for syntax documentation.
|
||||
|
||||
# hw/i386/xen/xen_platform.c
|
||||
xen_platform_log(char *s) "xen platform: %s"
|
||||
|
||||
# hw/i386/xen/xen_pvdevice.c
|
||||
xen_pv_mmio_read(uint64_t addr) "WARNING: read from Xen PV Device MMIO space (address %"PRIx64")"
|
||||
xen_pv_mmio_write(uint64_t addr) "WARNING: write to Xen PV Device MMIO space (address %"PRIx64")"
|
||||
|
||||
# hw/i386/x86-iommu.c
|
||||
x86_iommu_iec_notify(bool global, uint32_t index, uint32_t mask) "Notify IEC invalidation: global=%d index=%" PRIu32 " mask=%" PRIu32
|
||||
|
||||
@ -30,7 +23,6 @@ amdvi_devtab_inval(uint8_t bus, uint8_t slot, uint8_t func) "device table entry
|
||||
amdvi_completion_wait(uint64_t addr, uint64_t data) "completion wait requested with store address 0x%"PRIx64" and store data 0x%"PRIx64
|
||||
amdvi_control_status(uint64_t val) "MMIO_STATUS state 0x%"PRIx64
|
||||
amdvi_iotlb_reset(void) "IOTLB exceed size limit - reset "
|
||||
amdvi_completion_wait_exec(uint64_t addr, uint64_t data) "completion wait requested with store address 0x%"PRIx64" and store data 0x%"PRIx64
|
||||
amdvi_dte_get_fail(uint64_t addr, uint32_t offset) "error: failed to access Device Entry devtab 0x%"PRIx64" offset 0x%"PRIx32
|
||||
amdvi_invalid_dte(uint64_t addr) "PTE entry at 0x%"PRIx64" is invalid "
|
||||
amdvi_get_pte_hwerror(uint64_t addr) "hardware error eccessing PTE at addr 0x%"PRIx64
|
||||
|
6
hw/i386/xen/trace-events
Normal file
6
hw/i386/xen/trace-events
Normal file
@ -0,0 +1,6 @@
|
||||
# hw/i386/xen/xen_platform.c
|
||||
xen_platform_log(char *s) "xen platform: %s"
|
||||
|
||||
# hw/i386/xen/xen_pvdevice.c
|
||||
xen_pv_mmio_read(uint64_t addr) "WARNING: read from Xen PV Device MMIO space (address %"PRIx64")"
|
||||
xen_pv_mmio_write(uint64_t addr) "WARNING: write to Xen PV Device MMIO space (address %"PRIx64")"
|
@ -8,8 +8,6 @@ ps2_reset_keyboard(void *s) "%p"
|
||||
ps2_write_keyboard(void *opaque, int val) "%p val %d"
|
||||
ps2_keyboard_set_translation(void *opaque, int mode) "%p mode %d"
|
||||
ps2_mouse_send_packet(void *s, int dx1, int dy1, int dz1, int b) "%p x %d y %d z %d bs %#x"
|
||||
ps2_mouse_event_disabled(void *opaque, int dx, int dy, int dz, int buttons_state, int mouse_dx, int mouse_dy, int mouse_dz) "%p x %d y %d z %d bs %#x mx %d my %d mz %d "
|
||||
ps2_mouse_event(void *opaque, int dx, int dy, int dz, int buttons_state, int mouse_dx, int mouse_dy, int mouse_dz) "%p x %d y %d z %d bs %#x mx %d my %d mz %d "
|
||||
ps2_mouse_fake_event(void *opaque) "%p"
|
||||
ps2_write_mouse(void *opaque, int val) "%p val %d"
|
||||
ps2_kbd_reset(void *opaque) "%p"
|
||||
|
@ -67,7 +67,6 @@ xics_alloc(int irq) "irq %d"
|
||||
xics_alloc_block(int first, int num, bool lsi, int align) "first irq %d, %d irqs, lsi=%d, alignnum %d"
|
||||
xics_ics_free(int src, int irq, int num) "Source#%d, first irq %d, %d irqs"
|
||||
xics_ics_free_warn(int src, int irq) "Source#%d, irq %d is already free"
|
||||
xics_icp_post_load(uint32_t server_no, uint32_t xirr, uint64_t addr, uint8_t pend) "server_no %d, xirr %#x, xirr_owner 0x%" PRIx64 ", pending %d"
|
||||
|
||||
# hw/intc/s390_flic_kvm.c
|
||||
flic_create_device(int err) "flic: create device failed %d"
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "trace.h"
|
||||
#include "hw/ptimer.h"
|
||||
#include "etsec.h"
|
||||
#include "registers.h"
|
||||
|
@ -63,10 +63,6 @@ net_rx_pkt_l4_csum_validate_entry(void) "Starting L4 checksum validation"
|
||||
net_rx_pkt_l4_csum_validate_not_xxp(void) "Not a TCP/UDP packet"
|
||||
net_rx_pkt_l4_csum_validate_udp_with_no_checksum(void) "UDP packet without checksum"
|
||||
net_rx_pkt_l4_csum_validate_ip4_fragment(void) "IP4 fragment"
|
||||
net_rx_pkt_l4_csum_validate_ip4_udp(void) "IP4/UDP packet"
|
||||
net_rx_pkt_l4_csum_validate_ip4_tcp(void) "IP4/TCP packet"
|
||||
net_rx_pkt_l4_csum_validate_ip6_udp(void) "IP6/UDP packet"
|
||||
net_rx_pkt_l4_csum_validate_ip6_tcp(void) "IP6/TCP packet"
|
||||
net_rx_pkt_l4_csum_validate_csum(bool csum_valid) "Checksum valid: %d"
|
||||
|
||||
net_rx_pkt_l4_csum_calc_entry(void) "Starting L4 checksum calculation"
|
||||
@ -117,7 +113,6 @@ e1000e_core_mdic_read(uint8_t page, uint32_t addr, uint32_t data) "MDIC READ: PH
|
||||
e1000e_core_mdic_read_unhandled(uint8_t page, uint32_t addr) "MDIC READ: PHY[%u][%u] UNHANDLED"
|
||||
e1000e_core_mdic_write(uint8_t page, uint32_t addr, uint32_t data) "MDIC WRITE: PHY[%u][%u] = 0x%x"
|
||||
e1000e_core_mdic_write_unhandled(uint8_t page, uint32_t addr) "MDIC WRITE: PHY[%u][%u] UNHANDLED"
|
||||
e1000e_core_eeeprom_write(uint16_t bit_in, uint16_t bit_out, uint16_t reading) "eeprom bitnum in %d out %d, reading %d"
|
||||
e1000e_core_ctrl_write(uint64_t index, uint32_t val) "Write CTRL register 0x%"PRIx64", value: 0x%X"
|
||||
e1000e_core_ctrl_sw_reset(void) "Doing SW reset"
|
||||
e1000e_core_ctrl_phy_reset(void) "Doing PHY reset"
|
||||
@ -159,7 +154,6 @@ e1000e_rx_desc_buff_write(uint8_t idx, uint64_t addr, uint16_t offset, const voi
|
||||
e1000e_rx_descr(int ridx, uint64_t base, uint8_t len) "Next RX descriptor: ring #%d, PA: 0x%"PRIx64", length: %u"
|
||||
e1000e_rx_set_rctl(uint32_t rctl) "RCTL = 0x%x"
|
||||
e1000e_rx_receive_iov(int iovcnt) "Received vector of %d fragments"
|
||||
e1000e_rx_packet_size(size_t full, size_t vhdr, size_t data) "Received packet of %zu bytes total, %zu virt header, %zu data"
|
||||
e1000e_rx_flt_dropped(void) "Received packet dropped by RX filter"
|
||||
e1000e_rx_written_to_guest(uint32_t causes) "Received packet written to guest (ICR causes %u)"
|
||||
e1000e_rx_not_written_to_guest(uint32_t causes) "Received packet NOT written to guest (ICR causes %u)"
|
||||
@ -196,14 +190,12 @@ e1000e_rx_metadata_ipv6_filtering_disabled(void) "IPv6 RX filtering disabled by
|
||||
|
||||
e1000e_vlan_vet(uint16_t vet) "Setting VLAN ethernet type 0x%X"
|
||||
|
||||
e1000e_irq_set_cause(uint32_t cause) "IRQ cause set 0x%x"
|
||||
e1000e_irq_msi_notify(uint32_t cause) "MSI notify 0x%x"
|
||||
e1000e_irq_throttling_no_pending_interrupts(void) "No pending interrupts to notify"
|
||||
e1000e_irq_msi_notify_postponed(void) "Sending MSI postponed by ITR"
|
||||
e1000e_irq_legacy_notify_postponed(void) "Raising legacy IRQ postponed by ITR"
|
||||
e1000e_irq_throttling_no_pending_vec(int idx) "No pending interrupts for vector %d"
|
||||
e1000e_irq_msix_notify_postponed_vec(int idx) "Sending MSI-X postponed by EITR[%d]"
|
||||
e1000e_irq_msix_notify(uint32_t cause) "MSI-X notify 0x%x"
|
||||
e1000e_irq_legacy_notify(bool level) "IRQ line state: %d"
|
||||
e1000e_irq_msix_notify_vec(uint32_t vector) "MSI-X notify vector 0x%x"
|
||||
e1000e_irq_postponed_by_xitr(uint32_t reg) "Interrupt postponed by [E]ITR register 0x%x"
|
||||
|
@ -60,7 +60,6 @@ usb_ohci_mem_read_bad_offset(uint32_t addr) "%x"
|
||||
usb_ohci_mem_write_unaligned(uint32_t addr) "at %x"
|
||||
usb_ohci_mem_write_bad_offset(uint32_t addr) "%x"
|
||||
usb_ohci_process_lists(uint32_t head, uint32_t cur) "head %x, cur %x"
|
||||
usb_ohci_bus_eof_timer_failed(const char *name) "%s: timer_new_ns failed"
|
||||
usb_ohci_set_frame_interval(const char *name, uint16_t fi_x, uint16_t fi_u) "%s: FrameInterval = 0x%x (%u)"
|
||||
usb_ohci_hub_power_up(void) "powered up all ports"
|
||||
usb_ohci_hub_power_down(void) "powered down all ports"
|
||||
|
@ -46,7 +46,7 @@ vfio_pci_emulated_device_id(const char *name, uint16_t val) "%s %04x"
|
||||
vfio_pci_emulated_sub_vendor_id(const char *name, uint16_t val) "%s %04x"
|
||||
vfio_pci_emulated_sub_device_id(const char *name, uint16_t val) "%s %04x"
|
||||
|
||||
# hw/vfio/pci-quirks.
|
||||
# hw/vfio/pci-quirks.c
|
||||
vfio_quirk_rom_blacklisted(const char *name, uint16_t vid, uint16_t did) "%s %04x:%04x"
|
||||
vfio_quirk_generic_window_address_write(const char *name, const char * region_name, uint64_t data) "%s %s 0x%"PRIx64
|
||||
vfio_quirk_generic_window_data_read(const char *name, const char * region_name, uint64_t data) "%s %s 0x%"PRIx64
|
||||
|
13
hw/xen/trace-events
Normal file
13
hw/xen/trace-events
Normal file
@ -0,0 +1,13 @@
|
||||
# See docs/tracing.txt for syntax documentation.
|
||||
|
||||
# include/hw/xen/xen_common.h
|
||||
xen_default_ioreq_server(void) ""
|
||||
xen_ioreq_server_create(uint32_t id) "id: %u"
|
||||
xen_ioreq_server_destroy(uint32_t id) "id: %u"
|
||||
xen_ioreq_server_state(uint32_t id, bool enable) "id: %u: enable: %i"
|
||||
xen_map_mmio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_unmap_mmio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_map_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_unmap_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_map_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
||||
xen_unmap_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(SOFTMMU_CODE_ACCESS)
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#endif
|
||||
|
||||
#include "trace/mem.h"
|
||||
|
@ -24,7 +24,7 @@
|
||||
*/
|
||||
|
||||
#if !defined(CODE_ACCESS)
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#endif
|
||||
|
||||
#include "trace/mem.h"
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "hw/xen/xen.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "trace.h"
|
||||
#include "hw/xen/trace.h"
|
||||
|
||||
/*
|
||||
* We don't support Xen prior to 4.2.0.
|
||||
|
@ -1,6 +0,0 @@
|
||||
#ifndef TRACE_H
|
||||
#define TRACE_H
|
||||
|
||||
#include "trace/generated-tracers.h"
|
||||
|
||||
#endif /* TRACE_H */
|
2
ioport.c
2
ioport.c
@ -29,7 +29,7 @@
|
||||
#include "qemu-common.h"
|
||||
#include "cpu.h"
|
||||
#include "exec/ioport.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "exec/memory.h"
|
||||
#include "exec/address-spaces.h"
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "exec/ram_addr.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "hw/irq.h"
|
||||
|
||||
#include "hw/boards.h"
|
||||
|
2
memory.c
2
memory.c
@ -24,7 +24,7 @@
|
||||
#include "qemu/bitops.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qom/object.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
|
||||
#include "exec/memory-internal.h"
|
||||
#include "exec/ram_addr.h"
|
||||
|
@ -4,8 +4,6 @@
|
||||
qemu_loadvm_state_section(unsigned int section_type) "%d"
|
||||
qemu_loadvm_state_section_command(int ret) "%d"
|
||||
qemu_loadvm_state_section_partend(uint32_t section_id) "%u"
|
||||
qemu_loadvm_state_main(void) ""
|
||||
qemu_loadvm_state_main_quit_parent(void) ""
|
||||
qemu_loadvm_state_post_main(int ret) "%d"
|
||||
qemu_loadvm_state_section_startfull(uint32_t section_id, const char *idstr, uint32_t instance_id, uint32_t version_id) "%u(%s) %u %u"
|
||||
qemu_savevm_send_packaged(void) ""
|
||||
@ -118,7 +116,6 @@ qemu_rdma_accept_incoming_migration_accepted(void) ""
|
||||
qemu_rdma_accept_pin_state(bool pin) "%d"
|
||||
qemu_rdma_accept_pin_verbsc(void *verbs) "Verbs context after listen: %p"
|
||||
qemu_rdma_block_for_wrid_miss(const char *wcompstr, int wcomp, const char *gcompstr, uint64_t req) "A Wanted wrid %s (%d) but got %s (%" PRIu64 ")"
|
||||
qemu_rdma_block_for_wrid_miss_b(const char *wcompstr, int wcomp, const char *gcompstr, uint64_t req) "B Wanted wrid %s (%d) but got %s (%" PRIu64 ")"
|
||||
qemu_rdma_cleanup_disconnect(void) ""
|
||||
qemu_rdma_cleanup_waiting_for_disconnect(void) ""
|
||||
qemu_rdma_close(void) ""
|
||||
|
@ -60,7 +60,7 @@
|
||||
#include "qapi/qmp/json-streamer.h"
|
||||
#include "qapi/qmp/json-parser.h"
|
||||
#include "qom/object_interfaces.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "trace/control.h"
|
||||
#include "monitor/hmp-target.h"
|
||||
#ifdef CONFIG_TRACE_SIMPLE
|
||||
|
@ -374,6 +374,7 @@ void visit_type_enum(Visitor *v, const char *name, int *obj,
|
||||
const char *const strings[], Error **errp)
|
||||
{
|
||||
assert(obj && strings);
|
||||
trace_visit_type_enum(v, name, obj);
|
||||
switch (v->type) {
|
||||
case VISITOR_INPUT:
|
||||
input_type_enum(v, name, obj, strings, errp);
|
||||
|
@ -1,4 +1,4 @@
|
||||
# qapi-visit-core.c
|
||||
# qapi/qapi-visit-core.c
|
||||
visit_free(void *v) "v=%p"
|
||||
visit_complete(void *v, void *opaque) "v=%p opaque=%p"
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
|
||||
bool cpu_exists(int64_t id)
|
||||
{
|
||||
|
30
rules.mak
30
rules.mak
@ -26,8 +26,13 @@ QEMU_CXXFLAGS = -D__STDC_LIMIT_MACROS $(filter-out -Wstrict-prototypes -Wmissing
|
||||
# Flags for dependency generation
|
||||
QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d
|
||||
|
||||
# Same as -I$(SRC_PATH) -I., but for the nested source/object directories
|
||||
QEMU_INCLUDES += -I$(<D) -I$(@D)
|
||||
# Compiler searches the source file dir first, but in vpath builds
|
||||
# we need to make it search the build dir too, before any other
|
||||
# explicit search paths. There are two search locations in the build
|
||||
# dir, one absolute and the other relative to the compiler working
|
||||
# directory. These are the same for target-independent files, but
|
||||
# different for target-dependent ones.
|
||||
QEMU_LOCAL_INCLUDES = -I$(BUILD_DIR)/$(@D) -I$(@D)
|
||||
|
||||
WL_U := -Wl,-u,
|
||||
find-symbols = $(if $1, $(sort $(shell $(NM) -P -g $1 | $2)))
|
||||
@ -61,7 +66,9 @@ expand-objs = $(strip $(sort $(filter %.o,$1)) \
|
||||
$(filter-out %.o %.mo,$1))
|
||||
|
||||
%.o: %.c
|
||||
$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
|
||||
$(call quiet-command,$(CC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
|
||||
$(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) \
|
||||
-c -o $@ $<,"CC","$(TARGET_DIR)$@")
|
||||
%.o: %.rc
|
||||
$(call quiet-command,$(WINDRES) -I. -o $@ $<,"RC","$(TARGET_DIR)$@")
|
||||
|
||||
@ -74,16 +81,24 @@ LINK = $(call quiet-command, $(LINKPROG) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o
|
||||
$(version-obj-y) $(call extract-libs,$1) $(LIBS),"LINK","$(TARGET_DIR)$@")
|
||||
|
||||
%.o: %.S
|
||||
$(call quiet-command,$(CCAS) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"CCAS","$(TARGET_DIR)$@")
|
||||
$(call quiet-command,$(CCAS) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
|
||||
$(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
|
||||
-c -o $@ $<,"CCAS","$(TARGET_DIR)$@")
|
||||
|
||||
%.o: %.cc
|
||||
$(call quiet-command,$(CXX) $(QEMU_INCLUDES) $(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"CXX","$(TARGET_DIR)$@")
|
||||
$(call quiet-command,$(CXX) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
|
||||
$(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) \
|
||||
-c -o $@ $<,"CXX","$(TARGET_DIR)$@")
|
||||
|
||||
%.o: %.cpp
|
||||
$(call quiet-command,$(CXX) $(QEMU_INCLUDES) $(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"CXX","$(TARGET_DIR)$@")
|
||||
$(call quiet-command,$(CXX) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
|
||||
$(QEMU_CXXFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) \
|
||||
-c -o $@ $<,"CXX","$(TARGET_DIR)$@")
|
||||
|
||||
%.o: %.m
|
||||
$(call quiet-command,$(OBJCC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) -c -o $@ $<,"OBJC","$(TARGET_DIR)$@")
|
||||
$(call quiet-command,$(OBJCC) $(QEMU_LOCAL_INCLUDES) $(QEMU_INCLUDES) \
|
||||
$(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) $($@-cflags) \
|
||||
-c -o $@ $<,"OBJC","$(TARGET_DIR)$@")
|
||||
|
||||
%.o: %.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -G -s $<,"GEN","$(TARGET_DIR)$@")
|
||||
@ -359,6 +374,7 @@ define unnest-vars
|
||||
$(eval $(o:%.mo=%$(DSOSUF)): module-common.o $($o-objs)),
|
||||
$(error $o added in $v but $o-objs is not set)))
|
||||
$(shell mkdir -p ./ $(sort $(dir $($v))))
|
||||
$(shell cd $(BUILD_DIR) && mkdir -p ./ $(sort $(dir $($v))))
|
||||
# Include all the .d files
|
||||
$(eval -include $(patsubst %.o,%.d,$(patsubst %.mo,%.d,$($v))))
|
||||
$(eval $v := $(filter-out %/,$($v))))
|
||||
|
@ -73,10 +73,14 @@ def read_record(edict, idtoname, fobj):
|
||||
def read_trace_header(fobj):
|
||||
"""Read and verify trace file header"""
|
||||
header = read_header(fobj, log_header_fmt)
|
||||
if header is None or \
|
||||
header[0] != header_event_id or \
|
||||
header[1] != header_magic:
|
||||
if header is None:
|
||||
raise ValueError('Not a valid trace file!')
|
||||
if header[0] != header_event_id:
|
||||
raise ValueError('Not a valid trace file, header id %d != %d' %
|
||||
(header[0], header_event_id))
|
||||
if header[1] != header_magic:
|
||||
raise ValueError('Not a valid trace file, header magic %d != %d' %
|
||||
(header[1], header_magic))
|
||||
|
||||
log_version = header[2]
|
||||
if log_version not in [0, 2, 3, 4]:
|
||||
|
@ -49,6 +49,7 @@ Options:
|
||||
--binary <path> Full path to QEMU binary.
|
||||
--target-type <type> QEMU emulator target type ('system' or 'user').
|
||||
--target-name <name> QEMU emulator target name.
|
||||
--group <name> Name of the event group
|
||||
--probe-prefix <prefix> Prefix for dtrace probe names
|
||||
(default: qemu-<target-type>-<target-name>).\
|
||||
""" % {
|
||||
@ -62,22 +63,12 @@ Options:
|
||||
else:
|
||||
sys.exit(1)
|
||||
|
||||
def make_group_name(filename):
|
||||
dirname = os.path.realpath(os.path.dirname(filename))
|
||||
basedir = os.path.join(os.path.dirname(__file__), os.pardir)
|
||||
basedir = os.path.realpath(os.path.abspath(basedir))
|
||||
dirname = dirname[len(basedir) + 1:]
|
||||
|
||||
if dirname == "":
|
||||
return "common"
|
||||
return "_" + re.sub(r"[^A-Za-z0-9]", "_", dirname)
|
||||
|
||||
def main(args):
|
||||
global _SCRIPT
|
||||
_SCRIPT = args[0]
|
||||
|
||||
long_opts = ["backends=", "format=", "help", "list-backends",
|
||||
"check-backends"]
|
||||
"check-backends", "group="]
|
||||
long_opts += ["binary=", "target-type=", "target-name=", "probe-prefix="]
|
||||
|
||||
try:
|
||||
@ -88,6 +79,7 @@ def main(args):
|
||||
check_backends = False
|
||||
arg_backends = []
|
||||
arg_format = ""
|
||||
arg_group = None
|
||||
binary = None
|
||||
target_type = None
|
||||
target_name = None
|
||||
@ -98,6 +90,8 @@ def main(args):
|
||||
|
||||
elif opt == "--backends":
|
||||
arg_backends = arg.split(",")
|
||||
elif opt == "--group":
|
||||
arg_group = arg
|
||||
elif opt == "--format":
|
||||
arg_format = arg
|
||||
|
||||
@ -129,6 +123,9 @@ def main(args):
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
if arg_group is None:
|
||||
error_opt("group name is required")
|
||||
|
||||
if arg_format == "stap":
|
||||
if binary is None:
|
||||
error_opt("--binary is required for SystemTAP tapset generator")
|
||||
@ -140,15 +137,15 @@ def main(args):
|
||||
if probe_prefix is None:
|
||||
probe_prefix = ".".join(["qemu", target_type, target_name])
|
||||
|
||||
if len(args) != 1:
|
||||
if len(args) < 1:
|
||||
error_opt("missing trace-events filepath")
|
||||
with open(args[0], "r") as fh:
|
||||
events = tracetool.read_events(fh)
|
||||
|
||||
group = make_group_name(args[0])
|
||||
events = []
|
||||
for arg in args:
|
||||
with open(arg, "r") as fh:
|
||||
events.extend(tracetool.read_events(fh))
|
||||
|
||||
try:
|
||||
tracetool.generate(events, group, arg_format, arg_backends,
|
||||
tracetool.generate(events, arg_group, arg_format, arg_backends,
|
||||
binary=binary, probe_prefix=probe_prefix)
|
||||
except tracetool.TracetoolError as e:
|
||||
error_opt(str(e))
|
||||
|
@ -36,7 +36,12 @@ def binary():
|
||||
|
||||
|
||||
def generate_h_begin(events, group):
|
||||
out('#include "trace/generated-tracers-dtrace.h"',
|
||||
if group == "root":
|
||||
header = "trace-dtrace-root.h"
|
||||
else:
|
||||
header = "trace-dtrace.h"
|
||||
|
||||
out('#include "%s"' % header,
|
||||
'')
|
||||
|
||||
|
||||
|
@ -44,7 +44,6 @@ def generate_h(event, group):
|
||||
|
||||
def generate_c_begin(events, group):
|
||||
out('#include "qemu/osdep.h"',
|
||||
'#include "trace.h"',
|
||||
'#include "trace/control.h"',
|
||||
'#include "trace/simple.h"',
|
||||
'')
|
||||
|
@ -20,8 +20,13 @@ PUBLIC = True
|
||||
|
||||
|
||||
def generate_h_begin(events, group):
|
||||
if group == "root":
|
||||
header = "trace-ust-root.h"
|
||||
else:
|
||||
header = "trace-ust.h"
|
||||
|
||||
out('#include <lttng/tracepoint.h>',
|
||||
'#include "trace/generated-ust-provider.h"',
|
||||
'#include "%s"' % header,
|
||||
'')
|
||||
|
||||
|
||||
|
@ -20,10 +20,15 @@ def generate(events, backend, group):
|
||||
active_events = [e for e in events
|
||||
if "disable" not in e.properties]
|
||||
|
||||
if group == "root":
|
||||
header = "trace-root.h"
|
||||
else:
|
||||
header = "trace.h"
|
||||
|
||||
out('/* This file is autogenerated by tracetool, do not edit. */',
|
||||
'',
|
||||
'#include "qemu/osdep.h"',
|
||||
'#include "trace.h"',
|
||||
'#include "%s"' % header,
|
||||
'')
|
||||
|
||||
for e in events:
|
||||
|
@ -28,13 +28,17 @@ def vcpu_transform_args(args):
|
||||
|
||||
|
||||
def generate(events, backend, group):
|
||||
if group == "root":
|
||||
header = "trace-root.h"
|
||||
else:
|
||||
header = "trace.h"
|
||||
|
||||
out('/* This file is autogenerated by tracetool, do not edit. */',
|
||||
'/* You must include this file after the inclusion of helper.h */',
|
||||
'',
|
||||
'#ifndef TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
|
||||
'#define TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
|
||||
'',
|
||||
'#include "trace.h"',
|
||||
'#include "exec/helper-proto.h"',
|
||||
'',
|
||||
)
|
||||
|
@ -41,6 +41,11 @@ def vcpu_transform_args(args, mode):
|
||||
|
||||
|
||||
def generate(events, backend, group):
|
||||
if group == "root":
|
||||
header = "trace-root.h"
|
||||
else:
|
||||
header = "trace.h"
|
||||
|
||||
events = [e for e in events
|
||||
if "disable" not in e.properties]
|
||||
|
||||
@ -49,7 +54,6 @@ def generate(events, backend, group):
|
||||
'#include "qemu/osdep.h"',
|
||||
'#include "qemu-common.h"',
|
||||
'#include "cpu.h"',
|
||||
'#include "trace.h"',
|
||||
'#include "exec/helper-proto.h"',
|
||||
'',
|
||||
)
|
||||
|
@ -32,4 +32,4 @@ def generate(events, backend, group):
|
||||
' */',
|
||||
'#pragma GCC diagnostic ignored "-Wredundant-decls"',
|
||||
'',
|
||||
'#include "generated-ust-provider.h"')
|
||||
'#include "trace-ust-all.h"')
|
||||
|
@ -20,13 +20,18 @@ def generate(events, backend, group):
|
||||
events = [e for e in events
|
||||
if "disabled" not in e.properties]
|
||||
|
||||
if group == "all":
|
||||
include = "trace-ust-all.h"
|
||||
else:
|
||||
include = "trace-ust.h"
|
||||
|
||||
out('/* This file is autogenerated by tracetool, do not edit. */',
|
||||
'',
|
||||
'#undef TRACEPOINT_PROVIDER',
|
||||
'#define TRACEPOINT_PROVIDER qemu',
|
||||
'',
|
||||
'#undef TRACEPOINT_INCLUDE_FILE',
|
||||
'#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
|
||||
'#define TRACEPOINT_INCLUDE_FILE ./%s' % include,
|
||||
'',
|
||||
'#if !defined (TRACE_%s_GENERATED_UST_H) || \\' % group.upper(),
|
||||
' defined(TRACEPOINT_HEADER_MULTI_READ)',
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "ui/qemu-spice.h"
|
||||
#include "sysemu/char.h"
|
||||
#include "qemu/error-report.h"
|
||||
|
@ -491,7 +491,7 @@ QEMU_CFLAGS += -I$(SRC_PATH)/tests
|
||||
|
||||
|
||||
# Deps that are common to various different sets of tests below
|
||||
test-util-obj-y = libqemuutil.a libqemustub.a
|
||||
test-util-obj-y = $(trace-obj-y) libqemuutil.a libqemustub.a
|
||||
test-qom-obj-y = $(qom-obj-y) $(test-util-obj-y)
|
||||
test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o \
|
||||
tests/test-qapi-event.o tests/test-qmp-introspect.o \
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/thread.h"
|
||||
#include "qemu/coroutine.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "block/thread-pool.h"
|
||||
#include "qemu/main-loop.h"
|
||||
|
||||
|
11
trace-events
11
trace-events
@ -62,16 +62,6 @@ spice_vmc_event(int event) "spice vmc event %d"
|
||||
# xen-hvm.c
|
||||
xen_ram_alloc(unsigned long ram_addr, unsigned long size) "requested: %#lx, size %#lx"
|
||||
xen_client_set_memory(uint64_t start_addr, unsigned long size, bool log_dirty) "%#"PRIx64" size %#lx, log_dirty %i"
|
||||
xen_default_ioreq_server(void) ""
|
||||
xen_ioreq_server_create(uint32_t id) "id: %u"
|
||||
xen_ioreq_server_destroy(uint32_t id) "id: %u"
|
||||
xen_ioreq_server_state(uint32_t id, bool enable) "id: %u: enable: %i"
|
||||
xen_map_mmio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_unmap_mmio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_map_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_unmap_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_map_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
||||
xen_unmap_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
||||
handle_ioreq(void *req, uint32_t type, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p type=%d dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
handle_ioreq_read(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p read type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
handle_ioreq_write(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p write type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
@ -90,7 +80,6 @@ handle_qmp_command(void *mon, const char *cmd_name) "mon %p cmd_name \"%s\""
|
||||
monitor_protocol_event_handler(uint32_t event, void *qdict) "event=%d data=%p"
|
||||
monitor_protocol_event_emit(uint32_t event, void *data) "event=%d data=%p"
|
||||
monitor_protocol_event_queue(uint32_t event, void *qdict, uint64_t rate) "event=%d data=%p rate=%" PRId64
|
||||
monitor_protocol_event_throttle(uint32_t event, uint64_t rate) "event=%d rate=%" PRId64
|
||||
|
||||
# dma-helpers.c
|
||||
dma_blk_io(void *dbs, void *bs, int64_t offset, bool to_dev) "dbs=%p bs=%p offset=%" PRId64 " to_dev=%d"
|
||||
|
@ -8,110 +8,36 @@
|
||||
tracetool-y = $(SRC_PATH)/scripts/tracetool.py
|
||||
tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
||||
|
||||
$(BUILD_DIR)/trace-events-all: $(trace-events-y:%=$(SRC_PATH)/%)
|
||||
$(BUILD_DIR)/trace-events-all: $(trace-events-files)
|
||||
$(call quiet-command,cat $^ > $@)
|
||||
|
||||
######################################################################
|
||||
# Auto-generated event descriptions for LTTng ust code
|
||||
|
||||
ifeq ($(findstring ust,$(TRACE_BACKENDS)),ust)
|
||||
|
||||
$(obj)/generated-ust-provider.h: $(obj)/generated-ust-provider.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-ust-provider.h-timestamp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=ust-events-h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-ust.c: $(obj)/generated-ust.c-timestamp $(BUILD_DIR)/config-host.mak
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-ust.c-timestamp: $(BUILD_DIR)/trace-events-all $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=ust-events-c \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-tracers.h: $(obj)/generated-ust-provider.h
|
||||
$(obj)/generated-tracers.c: $(obj)/generated-ust.c
|
||||
|
||||
endif
|
||||
|
||||
|
||||
######################################################################
|
||||
# Auto-generated tracing routines
|
||||
|
||||
##################################################
|
||||
# Execution level
|
||||
|
||||
$(obj)/generated-tracers.h: $(obj)/generated-tracers.h-timestamp
|
||||
@cmp -s $< $@ || cp $< $@
|
||||
$(obj)/generated-tracers.h-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=h \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
##############################
|
||||
# non-DTrace
|
||||
|
||||
$(obj)/generated-tracers.c: $(obj)/generated-tracers.c-timestamp
|
||||
@cmp -s $< $@ || cp $< $@
|
||||
$(obj)/generated-tracers.c-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=c \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-tracers.o: $(obj)/generated-tracers.c $(obj)/generated-tracers.h
|
||||
|
||||
##############################
|
||||
# DTrace
|
||||
|
||||
# Normal practice is to name DTrace probe file with a '.d' extension
|
||||
# but that gets picked up by QEMU's Makefile as an external dependency
|
||||
# rule file. So we use '.dtrace' instead
|
||||
ifeq ($(findstring dtrace,$(TRACE_BACKENDS)),dtrace)
|
||||
|
||||
$(obj)/generated-tracers-dtrace.dtrace: $(obj)/generated-tracers-dtrace.dtrace-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-tracers-dtrace.dtrace-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--format=d \
|
||||
--backends=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-tracers-dtrace.h: $(obj)/generated-tracers-dtrace.dtrace
|
||||
$(call quiet-command,dtrace -o $@ -h -s $<,"GEN","$@")
|
||||
|
||||
$(obj)/generated-tracers-dtrace.o: $(obj)/generated-tracers-dtrace.dtrace
|
||||
|
||||
util-obj-y += generated-tracers-dtrace.o
|
||||
endif
|
||||
|
||||
##################################################
|
||||
# Translation level
|
||||
|
||||
$(obj)/generated-helpers-wrappers.h: $(obj)/generated-helpers-wrappers.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-helpers-wrappers.h-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(obj)/generated-helpers-wrappers.h-timestamp: $(trace-events-files) $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=tcg-helper-wrapper-h \
|
||||
--backend=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-helpers.h: $(obj)/generated-helpers.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-helpers.h-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(obj)/generated-helpers.h-timestamp: $(trace-events-files) $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=tcg-helper-h \
|
||||
--backend=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
|
||||
$(obj)/generated-helpers.c: $(obj)/generated-helpers.c-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-helpers.c-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(obj)/generated-helpers.c-timestamp: $(trace-events-files) $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=tcg-helper-c \
|
||||
--backend=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
@ -123,8 +49,9 @@ target-obj-y += generated-helpers.o
|
||||
|
||||
$(obj)/generated-tcg-tracers.h: $(obj)/generated-tcg-tracers.h-timestamp
|
||||
@cmp $< $@ >/dev/null 2>&1 || cp $< $@
|
||||
$(obj)/generated-tcg-tracers.h-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(obj)/generated-tcg-tracers.h-timestamp: $(trace-events-files) $(BUILD_DIR)/config-host.mak $(tracetool-y)
|
||||
$(call quiet-command,$(TRACETOOL) \
|
||||
--group=all \
|
||||
--format=tcg-h \
|
||||
--backend=$(TRACE_BACKENDS) \
|
||||
$< > $@,"GEN","$(patsubst %-timestamp,%,$@)")
|
||||
@ -133,10 +60,8 @@ $(obj)/generated-tcg-tracers.h-timestamp: $(BUILD_DIR)/trace-events-all $(BUILD_
|
||||
######################################################################
|
||||
# Backend code
|
||||
|
||||
util-obj-y += generated-tracers.o
|
||||
util-obj-$(CONFIG_TRACE_SIMPLE) += simple.o
|
||||
util-obj-$(CONFIG_TRACE_FTRACE) += ftrace.o
|
||||
util-obj-$(CONFIG_TRACE_UST) += generated-ust.o
|
||||
util-obj-y += control.o
|
||||
target-obj-y += control-target.o
|
||||
util-obj-y += qmp.o
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "cpu.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "trace/control.h"
|
||||
#include "translate-all.h"
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/config-file.h"
|
||||
#include "monitor/monitor.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
|
||||
int trace_events_enabled_count;
|
||||
|
||||
|
@ -10,8 +10,8 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "trace.h"
|
||||
#include "trace/control.h"
|
||||
#include "trace/ftrace.h"
|
||||
|
||||
int trace_marker_fd;
|
||||
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#include "qemu/timer.h"
|
||||
#include "trace.h"
|
||||
#include "trace/control.h"
|
||||
#include "trace/simple.h"
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "qemu-common.h"
|
||||
#define NO_CPU_IO_DEFS
|
||||
#include "cpu.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "disas/disas.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "tcg.h"
|
||||
|
2
vl.c
2
vl.c
@ -110,7 +110,7 @@ int main(int argc, char **argv)
|
||||
|
||||
#include "slirp/libslirp.h"
|
||||
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "trace/control.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "sysemu/arch_init.h"
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/range.h"
|
||||
#include "sysemu/xen-mapcache.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
#include "exec/address-spaces.h"
|
||||
|
||||
#include <xen/hvm/ioreq.h>
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <xen/hvm/params.h>
|
||||
|
||||
#include "sysemu/xen-mapcache.h"
|
||||
#include "trace.h"
|
||||
#include "trace-root.h"
|
||||
|
||||
|
||||
//#define MAPCACHE_DEBUG
|
||||
|
Loading…
Reference in New Issue
Block a user