* [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel
@ 2017-07-30 11:20 Lluís Vilanova
2017-07-30 11:24 ` [Qemu-devel] [PATCH v7 1/5] hypertrace: Add documentation Lluís Vilanova
` (6 more replies)
0 siblings, 7 replies; 11+ messages in thread
From: Lluís Vilanova @ 2017-07-30 11:20 UTC (permalink / raw)
To: qemu-devel
Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi
The hypertrace channel allows guest code to emit events in QEMU (the host) using
its tracing infrastructure (see "docs/trace.txt"). This works in both 'system'
and 'user' modes, is architecture-agnostic and introduces minimal noise on the
guest.
See first commit for a full description, use-cases and an example.
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
---
Changes in v7
=============
* Use 'expr' instead of assuming 'bash' when generating the "emit.c" file.
* Restore generation of trace-events-all.
Changes in v6
=============
* Fix compilation errors.
Changes in v5
=============
* Rebase on 5a477a7806.
* Fix typo in "bsd-user/main.c" [Stephan Hajnoczi].
* Replace abort() with exit() in command-line errors [Stephan Hajnoczi].
* Fix alignment of data and control channels [Stephan Hajnoczi].
* Fix signal reflection in user-mode (SIGINT, SIGABRT, SIGSEGV) [Stephan Hajnoczi].
* Clarify semantics of hypertrace_guest_mmap_check() [Stephan Hajnoczi].
* Use uintptr_t instead of unsigned long in SEGV handler [Stephan Hajnoczi].
* Emit hypertrace's event with host-endian arguments [Stephan Hajnoczi].
* Enable true concurrency between user-mode guest threads by using a spearate control channel page per client [Stephan Hajnoczi].
* Remove unused PAGE_SIZE define [Stephan Hajnoczi].
* Submit linux kernel API module separately to Linux upstream [Stephan Hajnoczi].
* Assume guest code events are always enabled.
Changes in v4
=============
* Fix typo in stap script example.
* Fix compilation instructions in doc/hypertrace.txt.
* Rebase on 0737f32daf.
Changes in v3
=============
* Rebase on 4a58f35.
* Remove debugging printf's.
* Fix style issues identified by checkpatch.
* Fix control channel mapping in guest linux module.
* Add a short event description in "trace-events".
* Polish documentation in 1st patch.
Changes in v2
=============
* Remove unnecessary casts for g2h() [Eric Blake].
* Use perror() [Eric Blake].
* Avoid expansions in application example [Eric Blake].
* Add copyright in document "hypertrace.txt" [Eric Blake].
* Make the user-mode hypertrace invocations thread-safe [Stefan Hajnoczi].
* Split dynamic hypertrace configuration into a separate "config" channel.
Lluís Vilanova (5):
hypertrace: Add documentation
hypertrace: Add tracing event "guest_hypertrace"
hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event
hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event
hypertrace: Add guest-side user-level library
Makefile | 11 +
Makefile.objs | 6 +
bsd-user/main.c | 17 +
bsd-user/mmap.c | 15 +
bsd-user/syscall.c | 34 ++-
configure | 36 +++
docs/devel/tracing.txt | 3
docs/hypertrace.txt | 225 ++++++++++++++++++++
hypertrace/Makefile.objs | 23 ++
hypertrace/common.c | 55 +++++
hypertrace/common.h | 25 ++
hypertrace/guest/Makefile | 30 +++
hypertrace/guest/common.c | 301 ++++++++++++++++++++++++++
hypertrace/guest/qemu-hypertrace.h | 80 +++++++
hypertrace/softmmu.c | 237 +++++++++++++++++++++
hypertrace/user.c | 415 ++++++++++++++++++++++++++++++++++++
hypertrace/user.h | 71 ++++++
include/hw/pci/pci.h | 2
include/qom/cpu.h | 4
linux-user/main.c | 19 ++
linux-user/mmap.c | 16 +
linux-user/qemu.h | 3
linux-user/signal.c | 12 +
linux-user/syscall.c | 31 ++-
rules.mak | 2
trace-events | 11 +
26 files changed, 1655 insertions(+), 29 deletions(-)
create mode 100644 docs/hypertrace.txt
create mode 100644 hypertrace/Makefile.objs
create mode 100644 hypertrace/common.c
create mode 100644 hypertrace/common.h
create mode 100644 hypertrace/guest/Makefile
create mode 100644 hypertrace/guest/common.c
create mode 100644 hypertrace/guest/qemu-hypertrace.h
create mode 100644 hypertrace/softmmu.c
create mode 100644 hypertrace/user.c
create mode 100644 hypertrace/user.h
To: qemu-devel@nongnu.org
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Eric Blake <eblake@redhat.com>
Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Daniel P Berrange <berrange@redhat.com>
^ permalink raw reply [flat|nested] 11+ messages in thread* [Qemu-devel] [PATCH v7 1/5] hypertrace: Add documentation 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova @ 2017-07-30 11:24 ` Lluís Vilanova 2017-07-30 11:28 ` [Qemu-devel] [PATCH v7 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova ` (5 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 11:24 UTC (permalink / raw) To: qemu-devel Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- docs/devel/tracing.txt | 3 + docs/hypertrace.txt | 225 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 228 insertions(+) create mode 100644 docs/hypertrace.txt diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt index 5768a0b7a2..9178a308da 100644 --- a/docs/devel/tracing.txt +++ b/docs/devel/tracing.txt @@ -5,6 +5,9 @@ This document describes the tracing infrastructure in QEMU and how to use it for debugging, profiling, and observing execution. +See "docs/hypertrace.txt" to correlate guest tracing events with those in the +QEMU host. + == Quickstart == 1. Build with the 'simple' trace backend: diff --git a/docs/hypertrace.txt b/docs/hypertrace.txt new file mode 100644 index 0000000000..c3715db25b --- /dev/null +++ b/docs/hypertrace.txt @@ -0,0 +1,225 @@ += Hypertrace channel = + +Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + +This work is licensed under the terms of the GNU GPL, version 2 or later. +See the COPYING file in the top-level directory. + + +The hypertrace channel allows guest code to emit events in QEMU (the host) using +its tracing infrastructure (see "docs/trace.txt"). This works in both 'system' +and 'user' modes. Therefore, hypertrace is to tracing what hypercalls are to +system calls. + +The hypertrace channel can be used for various purposes: + +* Using guest code semantics to guide which QEMU events to trace at each point + in time. The example "Quick guide" below shows how to use this to identify + "regions of interest" in your guest code. It then uses these regions to trace + QEMU's behaviour during their execution, without paying the price of tracing + events outside the interest regions. + +* Mark "progress points" in guest code (e.g., processed client requests, + scheduled processes, etc), so that they can be easily traced and correlated + between QEMU's various tracing events and the guest's own tracing + infrastructure (e.g., Linux's tracepoints). + +* You can also use regions of interest and progress points on the guest code to + time the performance of new TCG optimizations. Each hypertrace event comes + with a host timestamp, making it easy to compare the host execution times of + interesting guest code. + +Hypertrace features: + +* Works with 'system' and 'user' mode. + +* Minimal setup for the guest; QEMU provides support guest code libraries that + work out of the box. + +* Independent of guest architecture; the guest code uses accesses to special + memory regions, as opposed to redefining instruction semantics. + +* Negligible guest overhead; emitting a hypertrace event requires a single guest + memory access, making it as unobtrusive as possible. + +Warning: The hypertrace channel in 'system' mode only works in systems with +support for PCI. You can get the list of guests with PCI support with 'grep +pci.mak default-configs/*'. + + +== Quick guide == + +This shows an example of using the hypertrace channel to trace the guest memory +accesses only in a specific guest code region, which is identified by calls to +the hypertrace channel. + +We are going to trace memory accesses to disk using QEMU's "log" backend, and +will use QEMU's "dtrace" backend (SystemTap) to ensure memory accesses are only +traced in the guest code region of interest. The first time the guest code +invokes the hypertrace channel, we will start tracing the +"guest_mem_before_exec" event using dtrace, and then will disable it the second +time around. + +Tracing is done with "log" because it is more efficient than using "dtrace" in +high-volume events like memory accesses. + +1. Set the tracing backends and number of arguments for the hypertrace events: + + mkdir /tmp/qemu-build + cd /tmp/qemu-build + /path/to/qemu-source/configure \ + --enable-trace-backends=dtrace,log \ + --with-hypertrace-args=4 \ + --prefix=/tmp/qemu-install + make -j install + +2. Compile QEMU: + + make -C /tmp/qemu-build install -j + +3. Compile the guest support code: + + make -C /tmp/qemu-build/x86_64-linux-user/hypertrace/guest + make -C /tmp/qemu-build/x86_64-softmmu/hypertrace/guest + + If you need to cross-compile the guest library, set the 'CC' variable: + + make -C /tmp/qemu-build/mipsel-linux-user/hypertrace/guest CC=mipsel-gnu-linux-gcc + +4. Create a guest application that interacts with the hypertrace channel: + + cat > /tmp/my-hypertrace.c <<\EOF + #include <stdio.h> + #include <errno.h> + #include <stdlib.h> + #include <string.h> + #include <qemu-hypertrace.h> + + + int main(int argc, char **argv) + { + char *base = NULL; + if (argc > 1) { + base = argv[1]; + } + + /* In 'user' mode this path must be the same we will use to start QEMU. */ + if (qemu_hypertrace_init(base) != 0) { + perror("error: qemu_hypertrace_init"); + abort(); + } + + /* Set additional event arguments (unused in this example) */ + uint64_t client = 0; + uint64_t *data = qemu_hypertrace_data(client); + data[0] = 0xcafe; + data[1] = 0xdead; + data[2] = 0xbeef; + + /* Emit event to start tracing */ + qemu_hypertrace(client, 1); + + /* Computation in between that we want to trace */ + printf("Some computation...\n"); + + /* Emit event to stop tracing */ + qemu_hypertrace(client, 0); + } + EOF + + gcc -o /tmp/my-hypertrace-user /tmp/my-hypertrace.c \ + /tmp/qemu-build/x86_64-linux-user/hypertrace/guest/libqemu-hypertrace-guest.a \ + -I/tmp/qemu-install/include -lpthread + + gcc -o /tmp/my-hypertrace-softmmu /tmp/my-hypertrace.c \ + /tmp/qemu-build/x86_64-softmmu/hypertrace/guest/libqemu-hypertrace-guest.a \ + -I/tmp/qemu-install/include -lpthread + +5. Create a SystemTap script to control event tracing: + + cat > /tmp/my-hypertrace-script.stp <<\EOF + #!/usr/bin/env stap + + %{ + #include <linux/delay.h> + %} + + function enable_mem:long() + %{ + /* Tell QEMU's monitor to enable tracing */ + char *argv[4] = {"/bin/sh", "-c", "echo 'trace-event guest_mem_before_exec on' | telnet localhost 1234", NULL}; + printk(KERN_ERR "enable\n"); + call_usermodehelper(argv[0], argv, NULL, UMH_WAIT_EXEC); + /* Wait for changes to apply */ + msleep(1000); + printk(KERN_ERR "enabled\n"); + STAP_RETURN(0); + %} + + function disable_mem:long() + %{ + char *argv[4] = {"/bin/sh", "-c", "echo 'trace-event guest_mem_before_exec off' | telnet localhost 1234", NULL}; + printk(KERN_ERR "disable\n"); + call_usermodehelper(argv[0], argv, NULL, UMH_WAIT_EXEC); + msleep(1000); + printk(KERN_ERR "disabled\n"); + STAP_RETURN(0); + %} + + probe process("/tmp/qemu-install/bin/qemu-*").mark("guest_hypertrace") + { + if ($arg1 == 1) { + enable_mem() + } else if ($arg1 == 0) { + disable_mem() + } + } + EOF + +6. Run a guest system with access to QEMU's hypertrace: + + stap -g /tmp/my-hypertrace-script.stp -c \ + '/tmp/qemu-install/bin/qemu-system-x86_64 \ + -device hypertrace \ + -monitor tcp:localhost:1234,server,nowait \ + -trace enable=guest_hypertrace -D /dev/stdout \ + ...' + + And inside the VM: + + sudo /tmp/my-hypertrace-softmmu + + The result will be something like this: + + VNC server running on ::1:5900 + 23071@1473096085.744211:guest_hypertrace cpu=0x5602e1f49c10 arg1=1 arg2=0x000000000000cafe arg3=0x000000000000dead arg4=0x000000000000beef + 23071@1473096085.745763:guest_mem_before_trans cpu=0x5602e1f49c10 info=19 + 23071@1473096085.745907:guest_mem_before_trans cpu=0x5602e1f49c10 info=3 + 23071@1473096085.752368:guest_mem_before_trans cpu=0x5602e1f49c10 info=3 + 23071@1473096085.752384:guest_mem_before_trans cpu=0x5602e1f49c10 info=19 + 23071@1473096086.756117:guest_hypertrace cpu=0x5602e1f49c10 arg1=0 arg2=0x000000000000cafe arg3=0x000000000000dead arg4=0x000000000000beef + + To instead run a guest in 'user' mode with hypertrace (standalone guest + applications): + + /tmp/qemu-install/bin/qemu-x86_64 \ + -hypertrace /tmp/hypertrace \ + -trace enable=guest* -D /dev/stdout \ + /tmp/my-hypertrace-user /tmp/hypertrace + + +== Details == + +To make it more efficient in terms of guest and host time, hypertrace provides +two different memory areas (channels). + +The control channel is used by the guest to tell QEMU that new data is ready to +be processed in the data channel. Writes to the control channel are intercepted +by QEMU, which emits the "hypertrace" tracing event. + +The data channel is a regular memory buffer used by the guest to write +additional event arguments before raising the event through the control channel. + +Both channels accept different "per-client offsets" to enable multiple guest +threads or CPUs to use the hypertrace channel without having to synchronize +(i.e., similar to what virtual devices achieve in SR-IOV). ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v7 2/5] hypertrace: Add tracing event "guest_hypertrace" 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-30 11:24 ` [Qemu-devel] [PATCH v7 1/5] hypertrace: Add documentation Lluís Vilanova @ 2017-07-30 11:28 ` Lluís Vilanova 2017-07-30 11:32 ` [Qemu-devel] [PATCH v7 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova ` (4 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 11:28 UTC (permalink / raw) To: qemu-devel Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi Generates the "guest_hypertrace" event with a user-configurable number of arguments. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- Makefile | 6 ++++-- Makefile.objs | 2 ++ configure | 34 ++++++++++++++++++++++++++++++++++ rules.mak | 2 +- trace-events | 11 +++++++++++ 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 38814f9a61..f08f498f79 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,7 @@ endif GENERATED_FILES += $(TRACE_HEADERS) GENERATED_FILES += $(TRACE_SOURCES) GENERATED_FILES += $(BUILD_DIR)/trace-events-all +GENERATED_FILES += $(BUILD_DIR)/hypertrace/trace.h trace-group-name = $(shell dirname $1 | sed -e 's/[^a-zA-Z0-9]/_/g') @@ -92,7 +93,7 @@ tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py") %/trace.h: %/trace.h-timestamp @cmp $< $@ >/dev/null 2>&1 || cp $< $@ -%/trace.h-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y) +%/trace.h-timestamp: %/trace-events $(tracetool-y) $(call quiet-command,$(TRACETOOL) \ --group=$(call trace-group-name,$@) \ --format=h \ @@ -101,7 +102,7 @@ tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py") %/trace.c: %/trace.c-timestamp @cmp $< $@ >/dev/null 2>&1 || cp $< $@ -%/trace.c-timestamp: $(SRC_PATH)/%/trace-events $(tracetool-y) +%/trace.c-timestamp: %/trace-events $(tracetool-y) $(call quiet-command,$(TRACETOOL) \ --group=$(call trace-group-name,$@) \ --format=c \ @@ -534,6 +535,7 @@ distclean: clean rm -Rf .sdk if test -f pixman/config.log; then $(MAKE) -C pixman distclean; fi if test -f dtc/version_gen.h; then $(MAKE) $(DTC_MAKE_ARGS) clean; fi + rm -f hypertrace/trace-events KEYMAPS=da en-gb et fr fr-ch is lt modifiers no pt-br sv \ ar de en-us fi fr-be hr it lv nl pl ru th \ diff --git a/Makefile.objs b/Makefile.objs index bfd5a6ceb1..ce9a60137b 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -170,9 +170,11 @@ trace-events-subdirs += accel/kvm trace-events-subdirs += nbd trace-events-files = $(SRC_PATH)/trace-events $(trace-events-subdirs:%=$(SRC_PATH)/%/trace-events) +trace-events-files += $(BUILD_DIR)/hypertrace/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) +trace-obj-y += $(BUILD_DIR)/hypertrace/trace.o diff --git a/configure b/configure index a3f0522e8f..e6f752c242 100755 --- a/configure +++ b/configure @@ -351,6 +351,7 @@ pie="" qom_cast_debug="yes" trace_backends="log" trace_file="trace" +hypertrace="1" spice="" rbd="" smartcard="" @@ -895,6 +896,8 @@ for opt do ;; --with-trace-file=*) trace_file="$optarg" ;; + --with-hypertrace-args=*) hypertrace="$optarg" + ;; --enable-gprof) gprof="yes" ;; --enable-gcov) gcov="yes" @@ -1425,6 +1428,8 @@ Advanced options (experts only): Available backends: $trace_backend_list --with-trace-file=NAME Full PATH,NAME of file to store traces Default:trace-<pid> + --with-hypertrace-args=NUMBER + number of hypertrace arguments (default: $hypertrace) --disable-slirp disable SLIRP userspace network connectivity --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) --oss-lib path to OSS library @@ -4434,6 +4439,16 @@ if test "$?" -ne 0 ; then fi ########################################## +# check hypertrace arguments +case "$hypertrace" in + ''|*[!0-9]*) error_exit "invalid number of hypertrace arguments" ;; + *) ;; +esac +if test $hypertrace = 0; then + error_exit "hypertrace arguments must be greater than zero" +fi + +########################################## # For 'ust' backend, test if ust headers are present if have_backend "ust"; then cat > $TMPC << EOF @@ -5282,6 +5297,7 @@ echo "Trace backends $trace_backends" if have_backend "simple"; then echo "Trace output file $trace_file-<pid>" fi +echo "Hypertrace arguments $hypertrace" echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" echo "rbd support $rbd" echo "xfsctl support $xfs" @@ -5989,6 +6005,24 @@ else fi QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" +# hypertrace +echo "CONFIG_HYPERTRACE_ARGS=$hypertrace" >> $config_host_mak +hypertrace_events=hypertrace/trace-events +mkdir -p $(dirname $hypertrace_events) +echo "# See docs/trace-events.txt for syntax documentation." >$hypertrace_events +echo -n 'vcpu guest_hypertrace(' >>$hypertrace_events +for i in `seq $hypertrace`; do + if test $i != 1; then + echo -n ", " >>$hypertrace_events + fi + echo -n "uint64_t arg$i" >>$hypertrace_events +done +echo -n ') ' >>$hypertrace_events +for i in `seq $hypertrace`; do + echo -n "\" arg$i=0x%016\"PRIx64" >>$hypertrace_events +done +echo >>$hypertrace_events + echo "TOOLS=$tools" >> $config_host_mak echo "ROMS=$roms" >> $config_host_mak echo "MAKE=$make" >> $config_host_mak diff --git a/rules.mak b/rules.mak index 6e943335f3..8d3915070b 100644 --- a/rules.mak +++ b/rules.mak @@ -139,7 +139,7 @@ cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \ cc-c-option = $(if $(shell $(CC) $1 $2 -c -o /dev/null -xc /dev/null \ >/dev/null 2>&1 && echo OK), $2, $3) -VPATH_SUFFIXES = %.c %.h %.S %.cc %.cpp %.m %.mak %.texi %.sh %.rc +VPATH_SUFFIXES = %.c %.h %.S %.cc %.cpp %.m %.mak %.texi %.sh %.rc %trace-events set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1))) # install-prog list, dir diff --git a/trace-events b/trace-events index f9dbd7f509..aeb7b6807d 100644 --- a/trace-events +++ b/trace-events @@ -88,6 +88,17 @@ vcpu guest_cpu_exit(void) # Targets: all vcpu guest_cpu_reset(void) +# @argX: Hypertrace arguments. +# +# Event explicitly triggered by guest code. The event definition is +# auto-generated from the "--with-hypertrace-args" configuration argument (see +# "docs/hypertrace.txt"): +# +# vcpu guest_hypertrace(uint64_t arg0, ..., uint64_t argN-1) +# +# Mode: all +# Targets: all + # @vaddr: Access' virtual address. # @info : Access' information (see below). # ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v7 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-30 11:24 ` [Qemu-devel] [PATCH v7 1/5] hypertrace: Add documentation Lluís Vilanova 2017-07-30 11:28 ` [Qemu-devel] [PATCH v7 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova @ 2017-07-30 11:32 ` Lluís Vilanova 2017-07-30 11:36 ` [Qemu-devel] [PATCH v7 4/5] hypertrace: [softmmu] " Lluís Vilanova ` (3 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 11:32 UTC (permalink / raw) To: qemu-devel Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi, Riku Voipio, Laurent Vivier QEMU detects when the guest uses 'mmap' on hypertrace's control channel file, and then uses 'mprotect' to detect accesses to it, which are used to trigger tracing event "guest_hypertrace". Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- Makefile.objs | 4 bsd-user/main.c | 17 ++ bsd-user/mmap.c | 15 ++ bsd-user/syscall.c | 34 ++-- hypertrace/Makefile.objs | 19 ++ hypertrace/common.c | 55 ++++++ hypertrace/common.h | 25 +++ hypertrace/user.c | 415 ++++++++++++++++++++++++++++++++++++++++++++++ hypertrace/user.h | 71 ++++++++ include/qom/cpu.h | 4 linux-user/main.c | 19 ++ linux-user/mmap.c | 16 ++ linux-user/qemu.h | 3 linux-user/signal.c | 12 + linux-user/syscall.c | 31 ++- 15 files changed, 714 insertions(+), 26 deletions(-) create mode 100644 hypertrace/Makefile.objs create mode 100644 hypertrace/common.c create mode 100644 hypertrace/common.h create mode 100644 hypertrace/user.c create mode 100644 hypertrace/user.h diff --git a/Makefile.objs b/Makefile.objs index ce9a60137b..57479fa738 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -98,6 +98,10 @@ util-obj-y += trace/ target-obj-y += trace/ ###################################################################### +# hypertrace +target-obj-y += hypertrace/ + +###################################################################### # guest agent # FIXME: a few definitions from qapi-types.o/qapi-visit.o are needed diff --git a/bsd-user/main.c b/bsd-user/main.c index fa9c012c9f..e6bdce073f 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -30,9 +30,12 @@ #include "tcg.h" #include "qemu/timer.h" #include "qemu/envlist.h" +#include "qemu/error-report.h" #include "exec/log.h" #include "trace/control.h" #include "glib-compat.h" +#include "hypertrace/user.h" + int singlestep; unsigned long mmap_min_addr; @@ -675,6 +678,8 @@ static void usage(void) "-strace log system calls\n" "-trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n" " specify tracing options\n" + "-hypertrace [[base=]<path>][,max-clients=<uint>]\n" + " specify hypertrace options\n" "\n" "Environment variables:\n" "QEMU_STRACE Print system calls and arguments similar to the\n" @@ -735,6 +740,8 @@ int main(int argc, char **argv) envlist_t *envlist = NULL; char *trace_file = NULL; bsd_type = target_openbsd; + char *hypertrace_base = NULL; + unsigned int hypertrace_max_clients = 0; if (argc <= 1) usage(); @@ -753,6 +760,7 @@ int main(int argc, char **argv) cpu_model = NULL; qemu_add_opts(&qemu_trace_opts); + qemu_add_opts(&qemu_hypertrace_opts); optind = 1; for (;;) { @@ -840,6 +848,10 @@ int main(int argc, char **argv) } else if (!strcmp(r, "trace")) { g_free(trace_file); trace_file = trace_opt_parse(optarg); + } else if (!strcmp(r, "hypertrace")) { + g_free(hypertrace_base); + hypertrace_opt_parse(optarg, &hypertrace_base, + &hypertrace_max_clients); } else { usage(); } @@ -974,6 +986,11 @@ int main(int argc, char **argv) target_set_brk(info->brk); syscall_init(); signal_init(); + if (atexit(hypertrace_fini) != 0) { + error_report("error: atexit: %s", strerror(errno)); + abort(); + } + hypertrace_init(hypertrace_base, hypertrace_size); /* Now that we've loaded the binary, GUEST_BASE is fixed. Delay generating the prologue until now so that the prologue can take diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index 7f2018ede0..6a549a3553 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -21,6 +21,7 @@ #include "qemu.h" #include "qemu-common.h" #include "bsd-mman.h" +#include "hypertrace/user.h" //#define DEBUG_MMAP @@ -240,10 +241,17 @@ static abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) return addr; } -/* NOTE: all the constants are the HOST ones */ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, int flags, int fd, abi_ulong offset) { + return target_mmap_cpu(start, len, prot, flags, fd, offset, NULL); +} + +/* NOTE: all the constants are the HOST ones */ +abi_long target_mmap_cpu(abi_ulong start, abi_ulong len, int prot, + int flags, int fd, abi_ulong offset, + CPUState *cpu) +{ abi_ulong ret, end, real_start, real_end, retaddr, host_offset, host_len; unsigned long host_start; @@ -285,6 +293,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, goto the_end; real_start = start & qemu_host_page_mask; + if (!hypertrace_guest_mmap_check(fd, len, offset)) { + goto fail; + } + if (!(flags & MAP_FIXED)) { abi_ulong mmap_start; void *p; @@ -396,6 +408,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, } } the_end1: + hypertrace_guest_mmap_apply(fd, g2h(start), cpu); page_set_flags(start, start + len, prot | PAGE_VALID); the_end: #ifdef DEBUG_MMAP diff --git a/bsd-user/syscall.c b/bsd-user/syscall.c index 66492aaf5d..f88f21876c 100644 --- a/bsd-user/syscall.c +++ b/bsd-user/syscall.c @@ -26,6 +26,7 @@ #include "qemu.h" #include "qemu-common.h" +#include "hypertrace/user.h" //#define DEBUG @@ -332,6 +333,7 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1, _mcleanup(); #endif gdb_exit(cpu_env, arg1); + hypertrace_fini(); /* XXX: should free thread stack and CPU env */ _exit(arg1); ret = 0; /* avoid warning */ @@ -369,10 +371,12 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1, unlock_user(p, arg1, 0); break; case TARGET_FREEBSD_NR_mmap: - ret = get_errno(target_mmap(arg1, arg2, arg3, - target_to_host_bitmask(arg4, mmap_flags_tbl), - arg5, - arg6)); + ret = get_errno(target_mmap_cpu( + arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, + arg6, + cpu)); break; case TARGET_FREEBSD_NR_mprotect: ret = get_errno(target_mprotect(arg1, arg2, arg3)); @@ -430,6 +434,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1, _mcleanup(); #endif gdb_exit(cpu_env, arg1); + hypertrace_fini(); /* XXX: should free thread stack and CPU env */ _exit(arg1); ret = 0; /* avoid warning */ @@ -455,10 +460,12 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1, unlock_user(p, arg1, 0); break; case TARGET_NETBSD_NR_mmap: - ret = get_errno(target_mmap(arg1, arg2, arg3, - target_to_host_bitmask(arg4, mmap_flags_tbl), - arg5, - arg6)); + ret = get_errno(target_mmap_cpu( + arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, + arg6, + cpu)); break; case TARGET_NETBSD_NR_mprotect: ret = get_errno(target_mprotect(arg1, arg2, arg3)); @@ -505,6 +512,7 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1, _mcleanup(); #endif gdb_exit(cpu_env, arg1); + hypertrace_fini(); /* XXX: should free thread stack and CPU env */ _exit(arg1); ret = 0; /* avoid warning */ @@ -530,10 +538,12 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1, unlock_user(p, arg1, 0); break; case TARGET_OPENBSD_NR_mmap: - ret = get_errno(target_mmap(arg1, arg2, arg3, - target_to_host_bitmask(arg4, mmap_flags_tbl), - arg5, - arg6)); + ret = get_errno(target_mmap_cpu( + arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, + arg6, + cpu)); break; case TARGET_OPENBSD_NR_mprotect: ret = get_errno(target_mprotect(arg1, arg2, arg3)); diff --git a/hypertrace/Makefile.objs b/hypertrace/Makefile.objs new file mode 100644 index 0000000000..2c27ad819a --- /dev/null +++ b/hypertrace/Makefile.objs @@ -0,0 +1,19 @@ +# -*- mode: makefile -*- + +target-obj-$(CONFIG_USER_ONLY) += user.o +target-obj-y += common.o + +$(obj)/user.o: $(obj)/emit.c +$(obj)/common.o: $(obj)/emit.c + +$(obj)/emit.c: $(obj)/emit.c-timestamp $(BUILD_DIR)/config-host.mak + @cmp $< $@ >/dev/null 2>&1 || cp $< $@ +$(obj)/emit.c-timestamp: $(BUILD_DIR)/config-host.mak + @echo "static void do_hypertrace_emit(CPUState *cpu, uint64_t arg1, uint64_t *data)" >$@ + @echo "{" >>$@ + @echo -n " trace_guest_hypertrace(cpu, arg1" >>$@ + @for i in `seq $(shell expr $(CONFIG_HYPERTRACE_ARGS) - 1)`; do \ + echo -n ", data[$$i-1]" >>$@; \ + done + @echo ");" >>$@ + @echo "}" >>$@ diff --git a/hypertrace/common.c b/hypertrace/common.c new file mode 100644 index 0000000000..dfa8e4e4c9 --- /dev/null +++ b/hypertrace/common.c @@ -0,0 +1,55 @@ +/* + * QEMU-side management of hypertrace in user-level emulation. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "exec/cpu-all.h" +#include "hypertrace/common.h" +#include "hypertrace/trace.h" + + +void hypertrace_init_config(struct hypertrace_config *config, + unsigned int max_clients) +{ + config->max_clients = max_clients; + config->client_args = CONFIG_HYPERTRACE_ARGS; + config->client_data_size = config->client_args * sizeof(uint64_t); + + /* Align for both, since they can be used on softmmu and user mode */ + int page_size = 1; + page_size = QEMU_ALIGN_UP(page_size, getpagesize()); + page_size = QEMU_ALIGN_UP(page_size, TARGET_PAGE_SIZE); + +#if defined(CONFIG_USER_ONLY) + /* Twice the number of clients (*in pages*) for the double-fault protocol */ + config->control_size = QEMU_ALIGN_UP( + config->max_clients * TARGET_PAGE_SIZE * 2, page_size); +#else + config->control_size = QEMU_ALIGN_UP( + config->max_clients * sizeof(uint64_t), page_size); +#endif + config->data_size = QEMU_ALIGN_UP( + config->max_clients * config->client_data_size, page_size); +} + + +#include "hypertrace/emit.c" + +void hypertrace_emit(CPUState *cpu, uint64_t arg1, uint64_t *data) +{ + int i; + /* swap event arguments to host endianness */ + arg1 = tswap64(arg1); + for (i = 0; i < CONFIG_HYPERTRACE_ARGS - 1; i++) { + data[i] = tswap64(data[i]); + } + + /* emit event */ + do_hypertrace_emit(cpu, arg1, data); +} diff --git a/hypertrace/common.h b/hypertrace/common.h new file mode 100644 index 0000000000..cd295bdf76 --- /dev/null +++ b/hypertrace/common.h @@ -0,0 +1,25 @@ +/* + * QEMU-side management of hypertrace in user-level emulation. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include <stdint.h> +#include "qemu/typedefs.h" + +/* NOTE: Linux's kernel headers must be synced with this */ +struct hypertrace_config { + uint64_t max_clients; + uint64_t client_args; + uint64_t client_data_size; + uint64_t control_size; + uint64_t data_size; +}; + +void hypertrace_init_config(struct hypertrace_config *config, + unsigned int max_clients); + +void hypertrace_emit(struct CPUState *cpu, uint64_t arg1, uint64_t *data); diff --git a/hypertrace/user.c b/hypertrace/user.c new file mode 100644 index 0000000000..7ff6749f7d --- /dev/null +++ b/hypertrace/user.c @@ -0,0 +1,415 @@ +/* + * QEMU-side management of hypertrace in user-level emulation. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +/* + * Implementation details + * ====================== + * + * There are 3 channels, each a regular file in the host system, and mmap'ed by + * the guest application. + * + * - Configuration channel: Exposes configuration parameters. Mapped once and + * directly readable. + * + * - Data channel: Lets guests write argument values. Each guest thread should + * use a different offset to avoid concurrency problems. Mapped once and + * directly accessible. + * + * - Control channel: Triggers the hypertrace event on a write, providing the + * first argument. Offset in the control channel sets the offset in the data + * channel. Mapped once per thread, using two pages to reliably detect + * accesses and their written value through a SEGV handler. + */ + +#include <assert.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <sys/mman.h> + +#include "qemu/osdep.h" +#include "cpu.h" + +#include "hypertrace/common.h" +#include "hypertrace/user.h" +#include "qemu/config-file.h" +#include "qemu/error-report.h" +#include "trace.h" + + +static struct hypertrace_config config; +static char *config_path; +static int config_fd = -1; +static uint64_t *qemu_config; + +static char *data_path; +static int data_fd = -1; +static uint64_t *qemu_data; + +static char *control_path; +static int control_fd = -1; +static uint64_t *qemu_control; +static struct stat control_fd_stat; + + +QemuOptsList qemu_hypertrace_opts = { + .name = "hypertrace", + .implied_opt_name = "path", + .head = QTAILQ_HEAD_INITIALIZER(qemu_hypertrace_opts.head), + .desc = { + { + .name = "path", + .type = QEMU_OPT_STRING, + }, + { + .name = "max-clients", + .type = QEMU_OPT_NUMBER, + .def_value_str = "1", + }, + { /* end of list */ } + }, +}; + +void hypertrace_opt_parse(const char *optarg, char **base, + unsigned int *max_clients_) +{ + int max_clients; + QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("hypertrace"), + optarg, true); + if (!opts) { + exit(1); + } + if (qemu_opt_get(opts, "path")) { + *base = g_strdup(qemu_opt_get(opts, "path")); + } else { + error_report("error: -hypertrace path is mandatory"); + exit(EXIT_FAILURE); + } + max_clients = qemu_opt_get_number(opts, "max-clients", 1); + if (max_clients <= 0) { + error_report("error:" + " -hypertrace max-clients expects a positive number"); + exit(EXIT_FAILURE); + } + *max_clients_ = max_clients; +} + +static void init_channel(const char *base, const char *suffix, size_t size, + char **path, int *fd, uint64_t **addr) +{ + *path = g_malloc(strlen(base) + strlen(suffix) + 1); + sprintf(*path, "%s%s", base, suffix); + + *fd = open(*path, O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR); + if (*fd == -1) { + error_report("error: open(%s): %s", *path, strerror(errno)); + exit(1); + } + + off_t lres = lseek(*fd, size - 1, SEEK_SET); + if (lres == (off_t)-1) { + error_report("error: lseek(%s): %s", *path, strerror(errno)); + abort(); + } + + char tmp; + ssize_t wres = write(*fd, &tmp, 1); + if (wres == -1) { + error_report("error: write(%s): %s", *path, strerror(errno)); + abort(); + } + + if (addr) { + *addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, *fd, 0); + if (*addr == MAP_FAILED) { + error_report("error: mmap(%s): %s", *path, strerror(errno)); + abort(); + } + } +} + +/* Host SIGSEGV cannot be set bu user-mode guests */ +static struct sigaction sigsegv_ours; +static struct sigaction sigsegv_next; +static void sigsegv_handler(int signum, siginfo_t *siginfo, void *sigctxt); + +static struct sigaction sigint_ours; +static struct sigaction sigint_next; +bool sigint_user_set; +struct sigaction sigint_user; + +static struct sigaction sigabrt_ours; +static struct sigaction sigabrt_next; +bool sigabrt_user_set; +struct sigaction sigabrt_user; + +typedef void (*sigaction_t)(int, siginfo_t *, void *); + +static void reflect_handler(struct sigaction *ours, struct sigaction *next, + int signum, siginfo_t *siginfo, void *sigctxt) +{ + if (next->sa_flags & SA_SIGINFO) { + if (next->sa_sigaction != NULL) { + next->sa_sigaction(signum, siginfo, sigctxt); + } else if (next->sa_sigaction == (sigaction_t)SIG_IGN) { + /* ignore */ + } else if (next->sa_sigaction == (sigaction_t)SIG_DFL) { + if (signal(signum, SIG_DFL) == SIG_ERR) { + error_report("error: signal: %s", strerror(errno)); + abort(); + } + if (raise(signum) != 0) { + error_report("error: raise: %s", strerror(errno)); + abort(); + } + struct sigaction tmp; + memcpy(&tmp, ours, sizeof(tmp)); + if (sigaction(signum, &tmp, NULL) != 0) { + error_report("error: sigaction: %s", strerror(errno)); + abort(); + } + } + } else { + if (next->sa_handler != NULL) { + next->sa_handler(signum); + } else if (next->sa_handler == SIG_IGN) { + /* ignore */ + } else if (next->sa_handler == SIG_DFL) { + if (signal(signum, SIG_DFL) == SIG_ERR) { + error_report("error: signal: %s", strerror(errno)); + abort(); + } + if (raise(signum) != 0) { + error_report("error: raise: %s", strerror(errno)); + abort(); + } + struct sigaction tmp; + memcpy(&tmp, ours, sizeof(tmp)); + if (sigaction(signum, &tmp, NULL) != 0) { + error_report("error: sigaction: %s", strerror(errno)); + abort(); + } + } + } +} + +static void sigint_handler(int signum, siginfo_t *siginfo, void *sigctxt) +{ + hypertrace_fini(); + /* QEMU lets users override any signal handler */ + if (sigint_user_set) { + reflect_handler(&sigint_ours, &sigint_user, signum, siginfo, sigctxt); + } else { + reflect_handler(&sigint_ours, &sigint_next, signum, siginfo, sigctxt); + } +} + +static void sigabrt_handler(int signum, siginfo_t *siginfo, void *sigctxt) +{ + hypertrace_fini(); + /* QEMU lets users override any signal handler */ + if (sigabrt_user_set) { + reflect_handler(&sigabrt_ours, &sigabrt_user, signum, siginfo, sigctxt); + } else { + reflect_handler(&sigabrt_ours, &sigabrt_next, signum, siginfo, sigctxt); + } +} + +void hypertrace_init(const char *base, unsigned int max_clients) +{ + struct hypertrace_config *pconfig; + + if (base == NULL) { + return; + } + + sigint_user_set = false; + memset(&sigint_ours, 0, sizeof(sigint_ours)); + sigint_ours.sa_sigaction = sigint_handler; + sigint_ours.sa_flags = SA_SIGINFO | SA_RESTART; + sigemptyset(&sigint_ours.sa_mask); + if (sigaction(SIGINT, &sigint_ours, &sigint_next) != 0) { + error_report("error: sigaction(SIGINT): %s", strerror(errno)); + abort(); + } + + sigabrt_user_set = false; + memset(&sigabrt_ours, 0, sizeof(sigabrt_ours)); + sigabrt_ours.sa_sigaction = sigabrt_handler; + sigabrt_ours.sa_flags = SA_SIGINFO | SA_RESTART; + sigemptyset(&sigabrt_ours.sa_mask); + if (sigaction(SIGABRT, &sigabrt_ours, &sigabrt_next) != 0) { + error_report("error: sigaction(SIGABRT): %s", strerror(errno)); + abort(); + } + + hypertrace_init_config(&config, max_clients); + + init_channel(base, "-config", getpagesize(), + &config_path, &config_fd, &qemu_config); + pconfig = (struct hypertrace_config *)qemu_config; + pconfig->max_clients = tswap64(config.max_clients); + pconfig->client_args = tswap64(config.client_args); + pconfig->client_data_size = tswap64(config.client_data_size); + pconfig->control_size = tswap64(config.control_size); + pconfig->data_size = tswap64(config.data_size); + + init_channel(base, "-data", config.data_size, + &data_path, &data_fd, &qemu_data); + if (fstat(data_fd, &control_fd_stat) == -1) { + error_report("error: fstat(hypertrace_control): %s", strerror(errno)); + abort(); + } + + init_channel(base, "-control", config.control_size, + &control_path, &control_fd, &qemu_control); + + if (fstat(control_fd, &control_fd_stat) == -1) { + error_report("error: fstat(hypertrace_control): %s", strerror(errno)); + abort(); + } + + memset(&sigsegv_ours, 0, sizeof(sigsegv_ours)); + sigsegv_ours.sa_sigaction = sigsegv_handler; + sigsegv_ours.sa_flags = SA_SIGINFO | SA_RESTART; + sigemptyset(&sigsegv_ours.sa_mask); + if (sigaction(SIGSEGV, &sigsegv_ours, &sigsegv_next) != 0) { + error_report("error: sigaction(SIGSEGV): %s", strerror(errno)); + abort(); + } +} + + +static void fini_channel(int *fd, char **path) +{ + if (*fd != -1) { + if (close(*fd) == -1) { + error_report("error: close: %s", strerror(errno)); + abort(); + } + if (unlink(*path) == -1) { + error_report("error: unlink(%s): %s", *path, strerror(errno)); + abort(); + } + *fd = -1; + } + if (*path != NULL) { + g_free(*path); + *path = NULL; + } +} + +void hypertrace_fini(void) +{ + static bool atexit_in; + if (atexit_in) { + return; + } + atexit_in = true; + + if (sigaction(SIGSEGV, &sigsegv_next, NULL) != 0) { + error_report("error: sigaction(SIGSEGV): %s", strerror(errno)); + abort(); + } + fini_channel(&config_fd, &config_path); + fini_channel(&data_fd, &data_path); + fini_channel(&control_fd, &control_path); +} + + +bool hypertrace_guest_mmap_check(int fd, unsigned long len, + unsigned long offset) +{ + struct stat s; + if (fstat(fd, &s) < 0) { + /* the control channel should never fail fstat() */ + return true; + } + + if (s.st_dev != control_fd_stat.st_dev || + s.st_ino != control_fd_stat.st_ino) { + /* this is not the control channel */ + return true; + } + + /* check control channel is mapped correctly */ + return len == (config.control_size) && offset == 0; +} + +void hypertrace_guest_mmap_apply(int fd, void *qemu_addr, CPUState *vcpu) +{ + struct stat s; + + if (vcpu == NULL) { + return; + } + + if (fstat(fd, &s) != 0) { + return; + } + + if (s.st_dev != control_fd_stat.st_dev || + s.st_ino != control_fd_stat.st_ino) { + return; + } + + /* it's an mmap of the control channel; split it in two and mprotect it to + * detect writes (cmd is written once on each part) + */ + vcpu->hypertrace_control = qemu_addr; + if (mprotect(qemu_addr, config.control_size / 2, PROT_READ) == -1) { + error_report("error: mprotect(hypertrace_control): %s", + strerror(errno)); + abort(); + } +} + +static void swap_control(void *from, void *to) +{ + if (mprotect(from, config.control_size / 2, PROT_READ | PROT_WRITE) == -1) { + error_report("error: mprotect(from): %s", strerror(errno)); + abort(); + } + if (mprotect(to, config.control_size / 2, PROT_READ) == -1) { + error_report("error: mprotect(to): %s", strerror(errno)); + abort(); + } +} + +static void sigsegv_handler(int signum, siginfo_t *siginfo, void *sigctxt) +{ + CPUState *vcpu = current_cpu; + void *control_0 = vcpu->hypertrace_control; + void *control_1 = vcpu->hypertrace_control + config.control_size / 2; + void *control_2 = control_1 + config.control_size / 2; + + if (control_0 <= siginfo->si_addr && siginfo->si_addr < control_1) { + + /* 1st fault (guest will write cmd) */ + assert(((uintptr_t)siginfo->si_addr % sizeof(TARGET_PAGE_SIZE)) == 0); + swap_control(control_0, control_1); + + } else if (control_1 <= siginfo->si_addr && siginfo->si_addr < control_2) { + + /* 2nd fault (invoke) */ + size_t client = (siginfo->si_addr - control_1) / sizeof(uint64_t); + uint64_t vcontrol = ((uint64_t *)control_0)[client]; + uint64_t *data_ptr = &qemu_data[client * config.client_data_size]; + assert(((uintptr_t)siginfo->si_addr % sizeof(uint64_t)) == 0); + hypertrace_emit(current_cpu, vcontrol, data_ptr); + swap_control(control_1, control_0); + + } else { + + /* proxy to next handler */ + reflect_handler(&sigsegv_ours, &sigsegv_next, signum, siginfo, sigctxt); + + } +} diff --git a/hypertrace/user.h b/hypertrace/user.h new file mode 100644 index 0000000000..e3f131c675 --- /dev/null +++ b/hypertrace/user.h @@ -0,0 +1,71 @@ +/* + * QEMU-side management of hypertrace in user-level emulation. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include <stdint.h> +#include <sys/types.h> + + +/** + * Definition of QEMU options describing hypertrace subsystem configuration + */ +extern QemuOptsList qemu_hypertrace_opts; + +/** + * hypertrace_opt_parse: + * @optarg: Input arguments. + * @base: Output base path for the hypertrace channel files. + * @max_clients: Output maximum number of concurrent clients. + * + * Parse the commandline arguments for hypertrace. + */ +void hypertrace_opt_parse(const char *optarg, char **base, + unsigned int *max_clients); + +/** + * hypertrace_init: + * @base: Base path for the hypertrace channel files. + * @max_clients: Maximum number of concurrent clients. + * + * Initialize the backing files for the hypertrace channel. + */ +void hypertrace_init(const char *base, unsigned int max_clients); + +/** + * hypertrace_guest_mmap_check: + * + * Check whether the mapped file is *not* hypertrace's control channel; if it + * is, check it is mapped correctly. + * + * Precondition: defined(CONFIG_USER_ONLY) + */ +bool hypertrace_guest_mmap_check(int fd, unsigned long len, + unsigned long offset); + +/** + * hypertrace_guest_mmap_apply: + * + * Configure initial mprotect if mapping the control channel. + * + * Precondition: defined(CONFIG_USER_ONLY) + */ +void hypertrace_guest_mmap_apply(int fd, void *qemu_addr, CPUState *vcpu); + +/** + * hypertrace_fini: + * + * Remove the backing files for the hypertrace channel. + */ +void hypertrace_fini(void); + + +/* Internal signal management */ +extern bool sigint_user_set; +extern struct sigaction sigint_user; +extern bool sigabrt_user_set; +extern struct sigaction sigabrt_user; diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 25eefea7ab..bb382a0e6a 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -305,6 +305,7 @@ struct qemu_work_item; * @trace_dstate_delayed: Delayed changes to trace_dstate (includes all changes * to @trace_dstate). * @trace_dstate: Dynamic tracing state of events for this vCPU (bitmask). + * @hypertrace_control: Per-vCPU address of the hypertrace control channel. * * State of one CPU core or thread. */ @@ -377,6 +378,9 @@ struct CPUState { DECLARE_BITMAP(trace_dstate_delayed, CPU_TRACE_DSTATE_MAX_EVENTS); DECLARE_BITMAP(trace_dstate, CPU_TRACE_DSTATE_MAX_EVENTS); + /* Only used when defined(CONFIG_USER_ONLY) */ + void *hypertrace_control; + /* TODO Move common fields from CPUArchState here. */ int cpu_index; /* used by alpha TCG */ uint32_t halted; /* used by alpha, cris, ppc TCG */ diff --git a/linux-user/main.c b/linux-user/main.c index ad03c9e8b2..b9e31e925b 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -32,10 +32,12 @@ #include "tcg.h" #include "qemu/timer.h" #include "qemu/envlist.h" +#include "qemu/error-report.h" #include "elf.h" #include "exec/log.h" #include "trace/control.h" #include "glib-compat.h" +#include "hypertrace/user.h" char *exec_path; @@ -4014,6 +4016,14 @@ static void handle_arg_trace(const char *arg) trace_file = trace_opt_parse(arg); } +static char *hypertrace_base; +static unsigned int hypertrace_max_clients; +static void handle_arg_hypertrace(const char *arg) +{ + g_free(hypertrace_base); + hypertrace_opt_parse(arg, &hypertrace_base, &hypertrace_max_clients); +} + struct qemu_argument { const char *argv; const char *env; @@ -4063,6 +4073,8 @@ static const struct qemu_argument arg_table[] = { "", "Seed for pseudo-random number generator"}, {"trace", "QEMU_TRACE", true, handle_arg_trace, "", "[[enable=]<pattern>][,events=<file>][,file=<file>]"}, + {"hypertrace", "QEMU_HYPERTRACE", true, handle_arg_hypertrace, + "", "[[base=]<path>][,max-clients=<uint>]"}, {"version", "QEMU_VERSION", false, handle_arg_version, "", "display version information and exit"}, {NULL, NULL, false, NULL, NULL, NULL} @@ -4252,6 +4264,7 @@ int main(int argc, char **argv, char **envp) srand(time(NULL)); qemu_add_opts(&qemu_trace_opts); + qemu_add_opts(&qemu_hypertrace_opts); optind = parse_args(argc, argv); @@ -4453,6 +4466,12 @@ int main(int argc, char **argv, char **envp) syscall_init(); signal_init(); + if (atexit(hypertrace_fini)) { + error_report("error: atexit: %s", strerror(errno)); + abort(); + } + hypertrace_init(hypertrace_base, hypertrace_max_clients); + /* Now that we've loaded the binary, GUEST_BASE is fixed. Delay generating the prologue until now so that the prologue can take the real value of GUEST_BASE into account. */ diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 4888f53139..ade8759af9 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -21,6 +21,7 @@ #include "qemu.h" #include "qemu-common.h" #include "translate-all.h" +#include "hypertrace/user.h" //#define DEBUG_MMAP @@ -357,10 +358,18 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) } } -/* NOTE: all the constants are the HOST ones */ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, int flags, int fd, abi_ulong offset) { + return target_mmap_cpu(start, len, prot, flags, fd, offset, NULL); +} + + +/* NOTE: all the constants are the HOST ones */ +abi_long target_mmap_cpu(abi_ulong start, abi_ulong len, int prot, + int flags, int fd, abi_ulong offset, + CPUState *cpu) +{ abi_ulong ret, end, real_start, real_end, retaddr, host_offset, host_len; mmap_lock(); @@ -442,6 +451,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, } } + if (!hypertrace_guest_mmap_check(fd, len, offset)) { + goto fail; + } + if (!(flags & MAP_FIXED)) { unsigned long host_start; void *p; @@ -553,6 +566,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, } } the_end1: + hypertrace_guest_mmap_apply(fd, g2h(start), cpu); page_set_flags(start, start + len, prot | PAGE_VALID); the_end: #ifdef DEBUG_MMAP diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 4edd7d0c08..67cf051d27 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -425,6 +425,9 @@ void sparc64_get_context(CPUSPARCState *env); int target_mprotect(abi_ulong start, abi_ulong len, int prot); abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, int flags, int fd, abi_ulong offset); +abi_long target_mmap_cpu(abi_ulong start, abi_ulong len, int prot, + int flags, int fd, abi_ulong offset, + CPUState *cpu); int target_munmap(abi_ulong start, abi_ulong len); abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size, abi_ulong new_size, unsigned long flags, diff --git a/linux-user/signal.c b/linux-user/signal.c index 3d18d1b3ee..9a21302331 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -23,6 +23,7 @@ #include "qemu.h" #include "qemu-common.h" +#include "hypertrace/user.h" #include "target_signal.h" #include "trace.h" @@ -813,7 +814,16 @@ int do_sigaction(int sig, const struct target_sigaction *act, } else { act1.sa_sigaction = host_signal_handler; } - ret = sigaction(host_sig, &act1, NULL); + + if (host_sig == SIGINT) { + memcpy(&sigint_user, &act1, sizeof(act1)); + sigint_user_set = true; + } else if (host_sig == SIGABRT) { + memcpy(&sigabrt_user, &act1, sizeof(act1)); + sigabrt_user_set = true; + } else { + ret = sigaction(host_sig, &act1, NULL); + } } } return ret; diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 003943b736..17d76f5d39 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -115,6 +115,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base, #include "uname.h" #include "qemu.h" +#include "hypertrace/user.h" #ifndef CLONE_IO #define CLONE_IO 0x80000000 /* Clone io context */ @@ -7765,6 +7766,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, _mcleanup(); #endif gdb_exit(cpu_env, arg1); + hypertrace_fini(); _exit(arg1); ret = 0; /* avoid warning */ break; @@ -9231,15 +9233,19 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, v5 = tswapal(v[4]); v6 = tswapal(v[5]); unlock_user(v, arg1, 0); - ret = get_errno(target_mmap(v1, v2, v3, - target_to_host_bitmask(v4, mmap_flags_tbl), - v5, v6)); + ret = get_errno(target_mmap_cpu( + v1, v2, v3, + target_to_host_bitmask(v4, mmap_flags_tbl), + v5, v6, + cpu)); } #else - ret = get_errno(target_mmap(arg1, arg2, arg3, - target_to_host_bitmask(arg4, mmap_flags_tbl), - arg5, - arg6)); + ret = get_errno(target_mmap_cpu( + arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, + arg6, + cpu)); #endif break; #endif @@ -9248,10 +9254,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, #ifndef MMAP_SHIFT #define MMAP_SHIFT 12 #endif - ret = get_errno(target_mmap(arg1, arg2, arg3, - target_to_host_bitmask(arg4, mmap_flags_tbl), - arg5, - arg6 << MMAP_SHIFT)); + ret = get_errno(target_mmap_cpu( + arg1, arg2, arg3, + target_to_host_bitmask(arg4, mmap_flags_tbl), + arg5, + arg6 << MMAP_SHIFT, + cpu)); break; #endif case TARGET_NR_munmap: @@ -9821,6 +9829,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, _mcleanup(); #endif gdb_exit(cpu_env, arg1); + hypertrace_fini(); ret = get_errno(exit_group(arg1)); break; #endif ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v7 4/5] hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (2 preceding siblings ...) 2017-07-30 11:32 ` [Qemu-devel] [PATCH v7 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova @ 2017-07-30 11:36 ` Lluís Vilanova 2017-07-30 11:40 ` [Qemu-devel] [PATCH v7 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova ` (2 subsequent siblings) 6 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 11:36 UTC (permalink / raw) To: qemu-devel Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi, Michael S. Tsirkin, Marcel Apfelbaum Uses a virtual device to trigger the hypertrace channel event. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- hypertrace/Makefile.objs | 4 + hypertrace/softmmu.c | 237 ++++++++++++++++++++++++++++++++++++++++++++++ include/hw/pci/pci.h | 2 3 files changed, 243 insertions(+) create mode 100644 hypertrace/softmmu.c diff --git a/hypertrace/Makefile.objs b/hypertrace/Makefile.objs index 2c27ad819a..1e5b8d0be2 100644 --- a/hypertrace/Makefile.objs +++ b/hypertrace/Makefile.objs @@ -1,10 +1,14 @@ # -*- mode: makefile -*- target-obj-$(CONFIG_USER_ONLY) += user.o +ifdef CONFIG_PCI +target-obj-$(CONFIG_SOFTMMU) += softmmu.o +endif target-obj-y += common.o $(obj)/user.o: $(obj)/emit.c $(obj)/common.o: $(obj)/emit.c +$(obj)/softmmu.o: $(obj)/emit.c $(obj)/emit.c: $(obj)/emit.c-timestamp $(BUILD_DIR)/config-host.mak @cmp $< $@ >/dev/null 2>&1 || cp $< $@ diff --git a/hypertrace/softmmu.c b/hypertrace/softmmu.c new file mode 100644 index 0000000000..4048c7e0ef --- /dev/null +++ b/hypertrace/softmmu.c @@ -0,0 +1,237 @@ +/* + * QEMU-side management of hypertrace in softmmu emulation. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +/* + * Implementation details + * ====================== + * + * There are 3 channels, each a BAR of a virtual device that can be used through + * MMIO. + * + * + * - Configuration channel: Exposes configuration parameters. + * + * - Data channel: Lets guests write argument values. Each guest client should + * use a different offset to avoid concurrency problems. + * + * - Control channel: Triggers the hypertrace event on a write, providing the + * first argument. Offset in the control channel sets the offset in the data + * channel. + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "hypertrace/common.h" +#include "hypertrace/trace.h" +#include "hw/pci/pci.h" +#include "migration/blocker.h" +#include "qapi/error.h" +#include "qemu/error-report.h" + + +typedef struct HypertraceState { + PCIDevice dev; + + uint64_t max_clients; + struct hypertrace_config hconfig; + + MemoryRegion config; + void *config_ptr; + MemoryRegion data; + void *data_ptr; + MemoryRegion control; + void *control_ptr; + + Error *migration_blocker; +} HypertraceState; + + +static uint64_t hypertrace_control_io_read(void *opaque, hwaddr addr, + unsigned size) +{ + uint64_t res; + HypertraceState *s = opaque; + char *mem = &((char *)s->control_ptr)[addr]; + + switch (size) { + case 1: + { + res = ((uint8_t *)mem)[0]; + break; + } + case 2: + { + res = ((uint16_t *)mem)[0]; + break; + } + case 4: + { + res = ((uint32_t *)mem)[0]; + break; + } + case 8: + { + res = ((uint64_t *)mem)[0]; + break; + } + default: + error_report("error: hypertrace: Unexpected read of size %d", size); + abort(); + } + + return res; +} + +static void hypertrace_control_io_write(void *opaque, hwaddr addr, + uint64_t data, unsigned size) +{ + HypertraceState *s = opaque; + char *mem = &((char *)s->control_ptr)[addr]; + + switch (size) { + case 1: + { + uint8_t *res = (uint8_t *)mem; + *res = (uint8_t)data; + break; + } + case 2: + { + uint16_t *res = (uint16_t *)mem; + *res = (uint16_t)data; + break; + } + case 4: + { + uint32_t *res = (uint32_t *)mem; + *res = (uint32_t)data; + break; + } + case 8: + { + uint64_t *res = (uint64_t *)mem; + *res = (uint64_t)data; + break; + } + default: + error_report("error: hypertrace: Unexpected write of size %d", size); + abort(); + } + + if ((addr + size) % sizeof(uint64_t) == 0) { + uint64_t client = addr / sizeof(uint64_t); + uint64_t vcontrol = ((uint64_t *)s->control_ptr)[client]; + uint64_t *data_ptr = (uint64_t *)s->data_ptr; + data_ptr = &data_ptr[client * s->hconfig.client_data_size]; + hypertrace_emit(current_cpu, vcontrol, data_ptr); + } +} + +static const MemoryRegionOps hypertrace_control_ops = { + .read = &hypertrace_control_io_read, + .write = &hypertrace_control_io_write, + .endianness = DEVICE_NATIVE_ENDIAN, + .impl = { + .min_access_size = 1, + .max_access_size = 8, + }, +}; + + +static void hypertrace_realize(PCIDevice *dev, Error **errp) +{ + Error *local_err = NULL; + struct hypertrace_config *config; + HypertraceState *s = DO_UPCAST(HypertraceState, dev, dev); + Error *err = NULL; + + if (s->max_clients < 1) { + error_setg(errp, "hypertrace: must have at least one client"); + return; + } + + hypertrace_init_config(&s->hconfig, s->max_clients); + + error_setg(&s->migration_blocker, + "The 'hypertrace' device cannot be migrated"); + migrate_add_blocker(s->migration_blocker, &local_err); + if (local_err) { + error_propagate(errp, local_err); + error_free(s->migration_blocker); + return; + } + + pci_set_word(s->dev.config + PCI_COMMAND, + PCI_COMMAND_IO | PCI_COMMAND_MEMORY); + + /* config channel */ + memory_region_init_ram(&s->config, OBJECT(s), "hypertrace.config", + TARGET_PAGE_SIZE, &err); + if (err) { + error_propagate(errp, err); + return; + } + pci_register_bar(&s->dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->config); + s->config_ptr = qemu_map_ram_ptr(s->config.ram_block, 0); + config = s->config_ptr; + config->max_clients = tswap64(s->hconfig.max_clients); + config->client_args = tswap64(s->hconfig.client_args); + config->client_data_size = tswap64(s->hconfig.client_data_size); + config->control_size = tswap64(s->hconfig.control_size); + config->data_size = tswap64(s->hconfig.data_size); + + /* data channel */ + memory_region_init_ram(&s->data, OBJECT(s), "hypertrace.data", + s->hconfig.data_size, &err); + if (err) { + error_propagate(errp, err); + return; + } + pci_register_bar(&s->dev, 1, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->data); + s->data_ptr = qemu_map_ram_ptr(s->data.ram_block, 0); + + /* control channel */ + memory_region_init_io(&s->control, OBJECT(s), &hypertrace_control_ops, s, + "hypertrace.control", s->hconfig.control_size); + pci_register_bar(&s->dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->control); + s->control_ptr = qemu_map_ram_ptr(s->control.ram_block, 0); +} + + +static Property hypertrace_properties[] = { + DEFINE_PROP_UINT64("max-clients", HypertraceState, max_clients, 1), + DEFINE_PROP_END_OF_LIST(), +}; + +static void hypertrace_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(klass); + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); + + k->realize = hypertrace_realize; + k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET; + k->device_id = PCI_DEVICE_ID_HYPERTRACE; + k->class_id = PCI_CLASS_MEMORY_RAM; + dc->desc = "Hypertrace communication channel", + dc->props = hypertrace_properties; +} + +static TypeInfo hypertrace_info = { + .name = "hypertrace", + .parent = TYPE_PCI_DEVICE, + .instance_size = sizeof(HypertraceState), + .class_init = hypertrace_class_init, +}; + +static void hypertrace_register_types(void) +{ + type_register_static(&hypertrace_info); +} + +type_init(hypertrace_register_types) diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index e598b095eb..3910a9b89f 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -84,6 +84,8 @@ #define PCI_DEVICE_ID_VIRTIO_9P 0x1009 #define PCI_DEVICE_ID_VIRTIO_VSOCK 0x1012 +#define PCI_DEVICE_ID_HYPERTRACE 0x10f0 + #define PCI_VENDOR_ID_REDHAT 0x1b36 #define PCI_DEVICE_ID_REDHAT_BRIDGE 0x0001 #define PCI_DEVICE_ID_REDHAT_SERIAL 0x0002 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Qemu-devel] [PATCH v7 5/5] hypertrace: Add guest-side user-level library 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (3 preceding siblings ...) 2017-07-30 11:36 ` [Qemu-devel] [PATCH v7 4/5] hypertrace: [softmmu] " Lluís Vilanova @ 2017-07-30 11:40 ` Lluís Vilanova 2017-07-30 11:49 ` [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply 2017-07-30 12:03 ` no-reply 6 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 11:40 UTC (permalink / raw) To: qemu-devel Cc: Daniel P Berrange, Luiz Capitulino, Eric Blake, Stefan Hajnoczi Provides guest library "libqemu-hypertrace-guest.a" to abstract access to the hypertrace channel. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- Makefile | 5 + configure | 2 hypertrace/guest/Makefile | 30 ++++ hypertrace/guest/common.c | 301 ++++++++++++++++++++++++++++++++++++ hypertrace/guest/qemu-hypertrace.h | 80 ++++++++++ 5 files changed, 418 insertions(+) create mode 100644 hypertrace/guest/Makefile create mode 100644 hypertrace/guest/common.c create mode 100644 hypertrace/guest/qemu-hypertrace.h diff --git a/Makefile b/Makefile index f08f498f79..523885a0a5 100644 --- a/Makefile +++ b/Makefile @@ -602,8 +602,13 @@ ifneq (,$(findstring qemu-ga,$(TOOLS))) endif endif +install-hypertrace: + $(INSTALL_DIR) "$(DESTDIR)$(includedir)" + $(INSTALL_DATA) "$(SRC_PATH)/hypertrace/guest/qemu-hypertrace.h" "$(DESTDIR)$(includedir)/" + install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir +install: install-hypertrace ifneq ($(TOOLS),) $(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir)) endif diff --git a/configure b/configure index e6f752c242..9c7358d0b4 100755 --- a/configure +++ b/configure @@ -6286,6 +6286,8 @@ if [ "$TARGET_BASE_ARCH" = "" ]; then fi symlink "$source_path/Makefile.target" "$target_dir/Makefile" +mkdir -p $target_dir/hypertrace/guest +symlink $source_path/hypertrace/guest/Makefile $target_dir/hypertrace/guest/Makefile upper() { echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' diff --git a/hypertrace/guest/Makefile b/hypertrace/guest/Makefile new file mode 100644 index 0000000000..cbc956bde1 --- /dev/null +++ b/hypertrace/guest/Makefile @@ -0,0 +1,30 @@ +include ../../../config-host.mak +include ../../config-target.mak +include $(SRC_PATH)/rules.mak + +vpath % $(SRC_PATH)/hypertrace/guest + +# do not use QEMU's per-host cflags when building guest code +QEMU_CFLAGS = -Werror -Wall + +QEMU_CFLAGS += $(GLIB_CFLAGS) +QEMU_CFLAGS += -I$(SRC_PATH)/include +QEMU_CFLAGS += -I../../../linux-headers +QEMU_CFLAGS += -I../../../ +QEMU_CFLAGS += -I../../ + +ifdef CONFIG_SOFTMMU +QEMU_CFLAGS += -DNEED_CPU_H +QEMU_CFLAGS += -I$(SRC_PATH)/target-$(TARGET_BASE_ARCH) +endif + +QEMU_CFLAGS += -g -O2 + +obj-y = common.o + +libqemu-hypertrace-guest.a: $(obj-y) + +all: libqemu-hypertrace-guest.a + +clean: + rm -f $(obj-y) libqemu-hypertrace-guest.a diff --git a/hypertrace/guest/common.c b/hypertrace/guest/common.c new file mode 100644 index 0000000000..96ae4464bc --- /dev/null +++ b/hypertrace/guest/common.c @@ -0,0 +1,301 @@ +/* + * Guest-side management of hypertrace. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include "qemu-hypertrace.h" + +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <unistd.h> +#include <pthread.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> +#include <stdbool.h> +#include <sys/stat.h> +#include <sys/mman.h> +#include <glob.h> + +#include "config-host.h" +#include "config-target.h" +#if defined(CONFIG_SOFTMMU) +#include "qemu/osdep.h" +#include "hw/pci/pci.h" +#endif +#include "hypertrace/common.h" + +static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; + +static char *config_path; +static int config_fd = -1; +static uint64_t *config_addr; +static struct hypertrace_config *config; + +static char *data_path; +static int data_fd = -1; +static uint64_t *data_addr; + +static char *control_path; +static int control_fd = -1; +#if defined(CONFIG_USER_ONLY) +static __thread uint64_t *control_addr; +static __thread uint64_t *control_addr_1; +#else +static uint64_t *control_addr; +#endif + +static int page_size; + + +static int init_channel_file(const char *base, const char *suffix, size_t size, + char **path, int *fd, uint64_t **addr, bool write) +{ + int prot; + + *path = malloc(strlen(base) + strlen(suffix) + 1); + sprintf(*path, "%s%s", base, suffix); + + prot = O_RDONLY; + if (write) { + prot = O_RDWR; + } + *fd = open(*path, prot); + if (*fd == -1) { + return -1; + } + + prot = PROT_READ; + if (write) { + prot |= PROT_WRITE; + } + *addr = mmap(NULL, size, prot, MAP_SHARED, *fd, 0); + if (*addr == MAP_FAILED) { + return -1; + } + return 0; +} + +#if !defined(CONFIG_USER_ONLY) && defined(__linux__) +static int check_device_id(const char *base, const char *name, uint64_t value) +{ + char tmp[1024]; + sprintf(tmp, "%s/%s", base, name); + + int fd = open(tmp, O_RDONLY); + if (fd < 0) { + return -1; + } + + char v[1024]; + ssize_t s = read(fd, v, sizeof(v)); + if (s < 0) { + close(fd); + return -1; + } + v[s] = '\0'; + + char *res; + uint64_t vv = strtoull(v, &res, 16); + if (*res == '\n' && vv == value) { + return 0; + } else { + return -1; + } +} + +static char *find_device(void) +{ + static char tmp[1024]; + char *res = NULL; + + glob_t g; + if (glob("/sys/devices/pci*/*", GLOB_NOSORT, NULL, &g) != 0) { + return NULL; + } + + + int i; + for (i = 0; i < g.gl_pathc; i++) { + char *path = g.gl_pathv[i]; + + if (check_device_id(path, "vendor", + PCI_VENDOR_ID_REDHAT_QUMRANET) < 0) { + continue; + } + if (check_device_id(path, "device", + PCI_DEVICE_ID_HYPERTRACE) < 0) { + continue; + } + + sprintf(tmp, "%s", path); + res = tmp; + break; + } + + globfree(&g); + + return res; +} +#endif + +int qemu_hypertrace_init(const char *base) +{ +#if defined(CONFIG_USER_ONLY) + const char *config_suff = "-config"; + const char *data_suff = "-data"; + const char *control_suff = "-control"; +#elif defined(__linux__) + const char *config_suff = "/resource0"; + const char *data_suff = "/resource1"; + const char *control_suff = "/resource2"; +#else +#error Unsupported OS +#endif + +#if defined(CONFIG_USER_ONLY) + if (base == NULL) { + errno = ENOENT; + return -1; + } +#elif defined(__linux__) + if (base == NULL) { + /* try to guess the base path */ + base = find_device(); + if (base == NULL) { + errno = ENOENT; + return -1; + } + } +#endif + + if (config_addr == NULL) { + int res; + + if (pthread_mutex_lock(&init_mutex)) { + return -1; + } + + page_size = getpagesize(); + + res = init_channel_file(base, config_suff, page_size, + &config_path, &config_fd, &config_addr, + false); + if (res != 0) { + return res; + } + + config = (struct hypertrace_config *)config_addr; + + if (pthread_mutex_unlock(&init_mutex)) { + return -1; + } + } + + if (data_addr == NULL) { + int res; + + if (pthread_mutex_lock(&init_mutex)) { + return -1; + } + + res = init_channel_file(base, data_suff, config->data_size, + &data_path, &data_fd, &data_addr, + true); + if (res != 0) { + return res; + } + + if (pthread_mutex_unlock(&init_mutex)) { + return -1; + } + } + + if (control_addr == NULL) { + int res; + uint64_t control_size = config->control_size; + + if (pthread_mutex_lock(&init_mutex)) { + return -1; + } + + res = init_channel_file(base, control_suff, control_size, + &control_path, &control_fd, &control_addr, + true); + if (res != 0) { + return res; + } + +#if defined(CONFIG_USER_ONLY) + control_addr_1 = (uint64_t *)((char *)control_addr + + config->control_size / 2); +#endif + + if (pthread_mutex_unlock(&init_mutex)) { + return -1; + } + } + + return 0; +} + + +static int fini_channel(int *fd, char **path) +{ + if (*fd != -1) { + if (close(*fd) == -1) { + return -1; + } + *fd = -1; + } + if (*path != NULL) { + free(*path); + *path = NULL; + } + return 0; +} + +int qemu_hypertrace_fini(void) +{ + if (fini_channel(&data_fd, &data_path) != 0) { + return -1; + } + if (fini_channel(&control_fd, &control_path) != 0) { + return -1; + } + return 0; +} + + +uint64_t qemu_hypertrace_max_clients(void) +{ + return config->max_clients; +} + +uint64_t qemu_hypertrace_num_args(void) +{ + return config->client_args; +} + +uint64_t *qemu_hypertrace_data(uint64_t client) +{ + return &data_addr[client * CONFIG_HYPERTRACE_ARGS * sizeof(uint64_t)]; +} + +void qemu_hypertrace(uint64_t client, uint64_t arg1) +{ + uint64_t offset; +#if defined(CONFIG_USER_ONLY) + offset = client * page_size; +#endif + *(uint64_t *)((char *)control_addr + offset) = arg1; +#if defined(CONFIG_USER_ONLY) + /* QEMU in 'user' mode uses two faulting pages to detect invocations */ + *(uint64_t *)((char *)control_addr_1 + offset) = arg1; +#endif +} diff --git a/hypertrace/guest/qemu-hypertrace.h b/hypertrace/guest/qemu-hypertrace.h new file mode 100644 index 0000000000..7c7a17c64d --- /dev/null +++ b/hypertrace/guest/qemu-hypertrace.h @@ -0,0 +1,80 @@ +/* + * Guest-side management of hypertrace. + * + * Copyright (C) 2016-2017 Lluís Vilanova <vilanova@ac.upc.edu> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#include <stdint.h> +#include <sys/types.h> + + +/** + * qemu_hypertrace_init: + * @base: Base path to the hypertrace channel. + * + * Initialize the hypertrace channel. The operation is idempotent, and must be + * called once per thread if running in QEMU's "user" mode. + * + * The base path to the hypertrace channel depends on the type of QEMU target: + * + * - User (single-application) + * The base path provided when starting QEMU ("-hypertrace" commandline + * option). + * + * - System (OS-dependant) + * + Linux + * The base path to the hypertrace channel virtual device; on a default QEMU + * device setup for x86 this is "/sys/devices/pci0000:00/0000:00:04.0". If + * NULL is provided, the hypertrace device will be automatically detected. + * + * Returns: Zero on success. + */ +int qemu_hypertrace_init(const char *base); + +/** + * qemu_hypertrace_fini: + * + * Deinitialize the hypertrace channel. + * + * Returns: Zero on success. + */ +int qemu_hypertrace_fini(void); + +/** + * qemu_hypertrace_max_clients: + * + * Maximum number of concurrent clients accepted by other calls. + */ +uint64_t qemu_hypertrace_max_clients(void); + +/** + * qemu_hypertrace_num_args: + * + * Number of uint64_t values read by each call to qemu_hypertrace(). + */ +uint64_t qemu_hypertrace_num_args(void); + +/** + * qemu_hypertrace_data: + * @client: Client identifier. + * + * Pointer to the start of the data channel for the given client. Clients must + * write their arguments there (all but the first one). + */ +uint64_t *qemu_hypertrace_data(uint64_t client); + +/** + * qemu_hypertrace: + * @client: Client identifier. + * @arg1: First argument of the hypertrace event. + * + * Emit a hypertrace event. + * + * Each of the clients (e.g., thread) must use a different client identifier to + * ensure they can work concurrently without using locks (i.e., each uses a + * different portion of the data channel). + */ +void qemu_hypertrace(uint64_t client, uint64_t arg1); ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (4 preceding siblings ...) 2017-07-30 11:40 ` [Qemu-devel] [PATCH v7 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova @ 2017-07-30 11:49 ` no-reply 2017-07-30 12:44 ` Lluís Vilanova 2017-07-30 12:03 ` no-reply 6 siblings, 1 reply; 11+ messages in thread From: no-reply @ 2017-07-30 11:49 UTC (permalink / raw) To: vilanova; +Cc: famz, qemu-devel, stefanha, lcapitulino Hi, This series failed build test on FreeBSD host. Please find the details below. Subject: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Type: series Message-id: 150141363372.9857.9055094189388759132.stgit@frigg.lan === TEST SCRIPT BEGIN === #!/bin/sh # Testing script will be invoked under the git checkout with # HEAD pointing to a commit that has the patches applied on top of "base" # branch set -e echo "=== ENV ===" env echo "=== PACKAGES ===" pkg info echo "=== TEST BEGIN ===" CC=/usr/local/libexec/ccache/cc INSTALL=$PWD/install BUILD=$PWD/build echo -n "Using CC: " realpath $CC mkdir -p $BUILD $INSTALL SRC=$PWD cd $BUILD $SRC/configure --cc=$CC --prefix=$INSTALL --target-list=x86_64-softmmu gmake -j4 # XXX: we need reliable clean up # make check -j4 V=1 gmake install === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu * [new tag] patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan -> patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan Switched to a new branch 'test' 5dad7c93de hypertrace: Add guest-side user-level library dcf9d9c7c7 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 4c041f724d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 73796a3885 hypertrace: Add tracing event "guest_hypertrace" 43fe7e2e2e hypertrace: Add documentation === OUTPUT BEGIN === === ENV === LOGNAME=patchew-tester PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin PWD=/var/tmp/patchew-tester-tmp-eswc2rbf/src HOME=/home/patchew-tester USER=patchew-tester SHELL=/bin/sh PATCHEW=/home/patchew-tester/patchew/patchew-cli -s http://patchew.org --nodebug === PACKAGES === bash-4.4.12_2 GNU Project's Bourne Again SHell binutils-2.28,1 GNU binary tools bison-3.0.4,1 Parser generator from FSF, (mostly) compatible with Yacc ca_root_nss-3.30.2 Root certificate bundle from the Mozilla Project ccache-3.3.4_3 Tool to minimize the compile time of C/C++ programs curl-7.54.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers cvsps-2.1_2 Create patchset information from CVS dtc-1.4.2_1 Device Tree Compiler expat-2.2.0_1 XML 1.0 parser written in C gcc-5.4.0 GNU Compiler Collection 5 gcc-ecj-4.5 Eclipse Java Compiler used to build GCC Java gettext-runtime-0.19.8.1_1 GNU gettext runtime libraries and programs git-2.13.0 Distributed source code management tool glib-2.46.2_5 Some useful routines of C programming (current stable version) gmake-4.2.1_1 GNU version of 'make' utility gmp-6.1.2 Free library for arbitrary precision arithmetic indexinfo-0.2.6 Utility to regenerate the GNU info page index libffi-3.2.1 Foreign Function Interface libiconv-1.14_10 Character set conversion library libnghttp2-1.21.0 HTTP/2.0 C Library m4-1.4.18,1 GNU M4 mpc-1.0.3 Library of complex numbers with arbitrarily high precision mpfr-3.1.5_1 Library for multiple-precision floating-point computations p5-Authen-SASL-2.16_1 Perl5 module for SASL authentication p5-Digest-HMAC-1.03_1 Perl5 interface to HMAC Message-Digest Algorithms p5-Error-0.17024 Error/exception handling in object-oriented programming style p5-GSSAPI-0.28_1 Perl extension providing access to the GSSAPIv2 library pcre-8.40 Perl Compatible Regular Expressions library perl5-5.24.1 Practical Extraction and Report Language pixman-0.34.0 Low-level pixel manipulation library pkg-1.10.1 Package manager pkgconf-1.3.0,1 Utility to help to configure compiler and linker flags python-2.7_3,2 "meta-port" for the default version of Python interpreter python2-2_3 The "meta-port" for version 2 of the Python interpreter python27-2.7.13_3 Interpreted object-oriented programming language python3-3_3 The "meta-port" for version 3 of the Python interpreter python35-3.5.3_1 Interpreted object-oriented programming language readline-6.3.8 Library for editing command lines as they are typed sudo-1.8.20p1 Allow others to run commands as root === TEST BEGIN === Using CC: /usr/local/bin/ccache Install prefix /var/tmp/patchew-tester-tmp-eswc2rbf/src/install BIOS directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/qemu binary directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/bin library directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib module directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib/qemu libexec directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/libexec include directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/include config directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/etc local state directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/var Manual directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /var/tmp/patchew-tester-tmp-eswc2rbf/src C compiler /usr/local/libexec/ccache/cc Host C compiler cc C++ compiler c++ Objective-C compiler clang ARFLAGS rv CFLAGS -O2 -g QEMU_CFLAGS -I/usr/local/include/pixman-1 -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -DNCURSES_WIDECHAR -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wno-string-plus-int -Wno-initializer-overrides -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-definition -Wtype-limits -fstack-protector-strong LDFLAGS -Wl,--warn-common -m64 -g make gmake install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support no GTK support no GTK GL support no VTE support no TLS priority NORMAL GNUTLS support no GNUTLS rnd no libgcrypt no libgcrypt kdf no nettle no nettle kdf no libtasn1 no curses support yes virgl support no curl support yes mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support no VNC PNG support no xen support no brlapi support no bluez support no Documentation no PIE no vde support no netmap support yes Linux AIO support no ATTR/XATTR support no Install blobs yes KVM support no HAX support no TCG support yes TCG debug enabled no TCG interpreter no RDMA support no fdt support no preadv support yes fdatasync no madvise yes posix_madvise yes libcap-ng support no vhost-net support no vhost-scsi support no vhost-vsock support no Trace backends log Hypertrace arguments 1 spice support no rbd support no xfsctl support no smartcard support no libusb yes usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no build guest agent yes QGA VSS support no QGA w32 disk info no QGA MSI support no seccomp support no coroutine backend ucontext coroutine pool yes debug stack usage no crypto afalg no GlusterFS support no gcov gcov gcov enabled no TPM support yes libssh2 support no TPM passthrough no QOM debugging yes Live block migration yes lzo support no snappy support no bzip2 support yes NUMA host support no tcmalloc support no jemalloc support no avx2 optimization no replication support yes VxHS block device no GEN x86_64-softmmu/config-devices.mak.tmp GEN config-host.h GEN qemu-options.def GEN qmp-commands.h GEN x86_64-softmmu/config-devices.mak GEN qapi-types.h GEN qapi-visit.h GEN qapi-event.h GEN qmp-marshal.c GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN chardev/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/input/trace.h GEN hw/timer/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN accel/tcg/trace.h GEN accel/kvm/trace.h GEN nbd/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN chardev/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN accel/tcg/trace.c GEN accel/kvm/trace.c GEN nbd/trace.c GEN config-all-devices.mak rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h-timestamp GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qapi-visit.c GEN qga/qapi-generated/qga-qmp-marshal.c CC qmp-introspect.o CC qapi-types.o CC qapi-visit.o CC qapi-event.o CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/opts-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qmp-event.o CC qapi/qapi-util.o CC qobject/qnull.o CC qobject/qnum.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qbool.o CC qobject/qjson.o CC qobject/qobject.o CC qobject/json-lexer.o CC qobject/json-streamer.o CC qobject/json-parser.o CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/lockcnt.o CC util/aiocb.o CC util/async.o CC util/thread-pool.o CC util/qemu-timer.o CC util/main-loop.o CC util/iohandler.o CC util/aio-posix.o CC util/compatfd.o CC util/event_notifier-posix.o CC util/mmap-alloc.o CC util/oslib-posix.o CC util/qemu-openpty.o CC util/qemu-thread-posix.o CC util/memfd.o CC util/envlist.o CC util/path.o CC util/module.o CC util/host-utils.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/cacheinfo.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/keyval.o CC util/hexdump.o CC util/crc32c.o CC util/uuid.o CC util/throttle.o CC util/getauxval.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-ucontext.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC util/stats64.o CC util/systemd.o CC trace-root.o CC util/trace.o CC crypto/trace.o CC io/trace.o CC migration/trace.o CC block/trace.o CC chardev/trace.o CC hw/block/trace.o CC hw/block/dataplane/trace.o CC hw/char/trace.o CC hw/intc/trace.o CC hw/net/trace.o CC hw/virtio/trace.o CC hw/audio/trace.o CC hw/misc/trace.o CC hw/usb/trace.o CC hw/scsi/trace.o CC hw/nvram/trace.o CC hw/display/trace.o CC hw/input/trace.o CC hw/timer/trace.o CC hw/dma/trace.o CC hw/sparc/trace.o CC hw/sd/trace.o CC hw/isa/trace.o CC hw/mem/trace.o CC hw/i386/trace.o CC hw/i386/xen/trace.o CC hw/9pfs/trace.o CC hw/ppc/trace.o CC hw/pci/trace.o CC hw/s390x/trace.o CC hw/vfio/trace.o CC hw/acpi/trace.o CC hw/arm/trace.o CC hw/alpha/trace.o CC hw/xen/trace.o CC ui/trace.o CC audio/trace.o CC net/trace.o CC target/arm/trace.o CC target/i386/trace.o CC target/mips/trace.o CC target/sparc/trace.o CC target/s390x/trace.o CC target/ppc/trace.o CC qom/trace.o CC linux-user/trace.o CC qapi/trace.o CC accel/tcg/trace.o CC accel/kvm/trace.o CC nbd/trace.o GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset.o CC stubs/gdbstub.o CC stubs/get-vm-name.o CC stubs/iothread.o CC stubs/iothread-lock.o CC stubs/is-daemonized.o CC stubs/machine-init-done.o CC stubs/migr-blocker.o CC stubs/monitor.o CC stubs/notify-event.o CC stubs/qtest.o CC stubs/replay.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/uuid.o CC stubs/vm-stop.o CC stubs/vmstate.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-monitor-defs.o CC stubs/target-get-monitor-def.o CC stubs/pc_madt_cpu_entry.o CC stubs/vmgenid.o CC stubs/xen-common.o CC stubs/xen-hvm.o CC qemu-nbd.o CC block.o CC blockjob.o CC qemu-io-cmds.o CC replication.o CC block/raw-format.o CC block/qcow.o CC block/vdi.o CC block/vmdk.o CC block/cloop.o CC block/bochs.o CC block/vpc.o CC block/vvfat.o CC block/dmg.o CC block/qcow2.o CC block/qcow2-refcount.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-cache.o CC block/qcow2-bitmap.o CC block/qed.o CC block/qed-l2-cache.o CC block/qed-table.o CC block/qed-cluster.o CC block/qed-check.o CC block/vhdx.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/block-backend.o CC block/snapshot.o CC block/qapi.o CC block/file-posix.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/throttle-groups.o CC block/nbd.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/write-threshold.o CC block/backup.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC block/curl.o CC block/dmg-bz2.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-glib.o CC crypto/hmac-glib.o CC crypto/hmac.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/tlssession.o CC crypto/secret.o CC crypto/random-platform.o CC crypto/pbkdf.o CC crypto/ivgen.o CC crypto/ivgen-essiv.o CC crypto/ivgen-plain.o CC crypto/afsplit.o CC crypto/ivgen-plain64.o CC crypto/xts.o CC crypto/block.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel.o CC io/channel-buffer.o CC io/channel-command.o CC io/channel-file.o CC io/channel-socket.o CC io/channel-tls.o CC io/channel-watch.o CC io/channel-websock.o CC io/channel-util.o CC io/dns-resolver.o CC io/task.o CC qom/object.o CC qom/container.o CC qom/qom-qobject.o CC qom/object_interfaces.o GEN qemu-img-cmds.h CC qemu-io.o CC blockdev.o CC blockdev-nbd.o CC bootdevice.o CC iothread.o CC qdev-monitor.o CC device-hotplug.o CC os-posix.o CC bt-host.o CC bt-vhci.o CC dma-helpers.o CC vl.o CC tpm.o CC qmp-marshal.o CC qmp.o CC hmp.o CC cpus-common.o CC audio/audio.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/mixeng.o CC audio/ossaudio.o CC audio/wavcapture.o CC backends/rng.o CC backends/rng-egd.o CC backends/rng-random.o CC backends/tpm.o CC backends/hostmem.o CC backends/hostmem-ram.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC chardev/msmouse.o CC chardev/wctablet.o CC chardev/testdev.o CC disas/i386.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/pcihp.o CC hw/acpi/ich9.o CC hw/acpi/tco.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/memory_hotplug.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/vmgenid.o CC hw/acpi/acpi_interface.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/aml-build.o CC hw/acpi/ipmi.o CC hw/acpi/acpi-stub.o CC hw/acpi/ipmi-stub.o CC hw/audio/sb16.o CC hw/audio/es1370.o CC hw/audio/ac97.o CC hw/audio/fmopl.o CC hw/audio/adlib.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/hda-codec.o CC hw/audio/pcspk.o CC hw/audio/soundhw.o CC hw/block/block.o CC hw/block/cdrom.o CC hw/block/hd-geometry.o CC hw/block/fdc.o CC hw/block/pflash_cfi01.o CC hw/block/nvme.o CC hw/bt/core.o CC hw/bt/l2cap.o CC hw/bt/sdp.o CC hw/bt/hid.o CC hw/bt/hci.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/debugcon.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/bus.o CC hw/core/reset.o CC hw/core/fw-path-provider.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/nmi.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/cpu/core.o CC hw/display/cirrus_vga.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/dma/i8257.o CC hw/i2c/core.o CC hw/i2c/smbus.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/smbus_ich9.o CC hw/i2c/pm_smbus.o CC hw/ide/core.o CC hw/ide/atapi.o CC hw/ide/qdev.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/ahci.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/pckbd.o CC hw/input/ps2.o CC hw/input/vmmouse.o CC hw/input/virtio-input.o CC hw/input/virtio-input-hid.o CC hw/intc/i8259_common.o CC hw/intc/i8259.o CC hw/intc/ioapic_common.o CC hw/intc/intc.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/ipmi/isa_ipmi_bt.o CC hw/isa/isa-bus.o CC hw/isa/apm.o CC hw/mem/pc-dimm.o CC hw/mem/nvdimm.o CC hw/misc/applesmc.o CC hw/misc/debugexit.o CC hw/misc/sga.o CC hw/misc/pc-testdev.o CC hw/misc/pci-testdev.o CC hw/misc/edu.o CC hw/misc/unimp.o CC hw/net/ne2000.o CC hw/net/eepro100.o CC hw/net/pcnet-pci.o CC hw/net/pcnet.o CC hw/net/e1000.o CC hw/net/e1000x_common.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/vmxnet3.o CC hw/net/ne2000-isa.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/pci-bridge/pcie_root_port.o CC hw/pci-bridge/gen_pcie_root_port.o CC hw/pci-bridge/pci_expander_bridge.o CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/piix.o CC hw/pci-host/pam.o CC hw/pci-host/q35.o CC hw/pci/pci.o CC hw/pci/pci_bridge.o CC hw/pci/msix.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie.o CC hw/pci/pcie_aer.o CC hw/pci/pcie_port.o CC hw/pci/pci-stub.o CC hw/pcmcia/pcmcia.o CC hw/scsi/scsi-disk.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/megasas.o CC hw/scsi/vmw_pvscsi.o CC hw/scsi/esp.o CC hw/scsi/esp-pci.o CC hw/sd/sd.o CC hw/sd/core.o CC hw/sd/sdhci.o CC hw/smbios/smbios.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios-stub.o CC hw/smbios/smbios_type_38-stub.o CC hw/timer/hpet.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/tpm/tpm_tis.o CC hw/usb/core.o CC hw/usb/combined-packet.o CC hw/usb/bus.o CC hw/usb/libhw.o CC hw/usb/desc.o CC hw/usb/desc-msos.o CC hw/usb/hcd-uhci.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-xhci-nec.o CC hw/usb/dev-hub.o CC hw/usb/dev-hid.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-serial.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/dev-mtp.o CC hw/usb/host-libusb.o CC hw/usb/host-legacy.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-pci.o CC hw/virtio/virtio-bus.o CC hw/virtio/virtio-mmio.o CC hw/virtio/vhost-stub.o CC hw/watchdog/watchdog.o CC hw/watchdog/wdt_i6300esb.o CC hw/watchdog/wdt_ib700.o CC migration/migration.o CC migration/socket.o CC migration/fd.o CC migration/exec.o CC migration/tls.o CC migration/channel.o CC migration/savevm.o CC migration/colo-comm.o CC migration/colo.o CC migration/colo-failover.o CC migration/vmstate.o CC migration/vmstate-types.o CC migration/page_cache.o CC migration/qemu-file.o CC migration/global_state.o CC migration/qemu-file-channel.o CC migration/xbzrle.o CC migration/postcopy-ram.o CC migration/qjson.o CC migration/block.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/eth.o CC net/vhost-user.o CC net/slirp.o CC net/netmap.o CC net/filter.o CC net/filter-buffer.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-rewriter.o CC net/filter-replay.o CC net/tap.o CC net/tap-bsd.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-time.o CC replay/replay-input.o CC replay/replay-char.o CC replay/replay-snapshot.o CC replay/replay-net.o CC replay/replay-audio.o CC slirp/cksum.o CC slirp/if.o CC slirp/ip_icmp.o CC slirp/ip6_icmp.o CC slirp/ip6_input.o CC slirp/ip6_output.o CC slirp/ip_input.o CC slirp/ip_output.o CC slirp/dnssearch.o CC slirp/dhcpv6.o CC slirp/slirp.o CC slirp/mbuf.o CC slirp/misc.o CC slirp/sbuf.o CC slirp/socket.o CC slirp/tcp_input.o CC slirp/tcp_output.o CC slirp/tcp_subr.o CC slirp/tcp_timer.o CC slirp/udp.o CC slirp/udp6.o CC slirp/bootp.o CC slirp/tftp.o CC slirp/arp_table.o CC slirp/ndp_table.o CC slirp/ncsi.o CC ui/keymaps.o CC ui/console.o CC ui/cursor.o CC ui/qemu-pixman.o CC ui/input.o CC ui/input-keymap.o CC ui/input-legacy.o CC ui/curses.o CC ui/vnc.o CC ui/vnc-enc-zlib.o CC ui/vnc-enc-hextile.o CC ui/vnc-enc-tight.o CC ui/vnc-palette.o CC ui/vnc-enc-zrle.o CC ui/vnc-auth-vencrypt.o CC ui/vnc-ws.o CC ui/vnc-jobs.o CC chardev/char.o CC chardev/char-fd.o CC chardev/char-fe.o CC chardev/char-file.o CC chardev/char-io.o CC chardev/char-mux.o CC chardev/char-null.o CC chardev/char-parallel.o CC chardev/char-pipe.o CC chardev/char-pty.o CC chardev/char-ringbuf.o CC chardev/char-serial.o CC chardev/char-socket.o CC chardev/char-stdio.o CC chardev/char-udp.o AS optionrom/multiboot.o AS optionrom/linuxboot.o CC optionrom/linuxboot_dma.o AS optionrom/kvmvapic.o CC qga/commands.o CC qga/guest-agent-command-state.o BUILD optionrom/multiboot.img BUILD optionrom/linuxboot.img BUILD optionrom/kvmvapic.img BUILD optionrom/multiboot.raw BUILD optionrom/linuxboot.raw BUILD optionrom/linuxboot_dma.img CC qga/main.o CC qga/commands-posix.o BUILD optionrom/kvmvapic.raw SIGN optionrom/multiboot.bin SIGN optionrom/linuxboot.bin BUILD optionrom/linuxboot_dma.raw SIGN optionrom/kvmvapic.bin CC qga/channel-posix.o SIGN optionrom/linuxboot_dma.bin CC qga/qapi-generated/qga-qapi-types.o CC qga/qapi-generated/qga-qapi-visit.o CC qga/qapi-generated/qga-qmp-marshal.o AR libqemustub.a CC qemu-img.o CC /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.o AR libqemuutil.a LINK qemu-ga LINK qemu-nbd LINK qemu-io LINK qemu-img GEN x86_64-softmmu/hmp-commands.h GEN x86_64-softmmu/hmp-commands-info.h GEN x86_64-softmmu/config-target.h CC x86_64-softmmu/tcg/tcg-op.o CC x86_64-softmmu/exec.o CC x86_64-softmmu/tcg/tcg.o CC x86_64-softmmu/tcg/optimize.o CC x86_64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/tcg/tcg-runtime.o CC x86_64-softmmu/fpu/softfloat.o CC x86_64-softmmu/disas.o GEN x86_64-softmmu/gdbstub-xml.c CC x86_64-softmmu/hax-stub.o CC x86_64-softmmu/arch_init.o CC x86_64-softmmu/cpus.o CC x86_64-softmmu/monitor.o CC x86_64-softmmu/gdbstub.o CC x86_64-softmmu/balloon.o CC x86_64-softmmu/ioport.o CC x86_64-softmmu/numa.o CC x86_64-softmmu/qtest.o CC x86_64-softmmu/memory.o CC x86_64-softmmu/memory_mapping.o CC x86_64-softmmu/dump.o CC x86_64-softmmu/migration/ram.o CC x86_64-softmmu/accel/accel.o CC x86_64-softmmu/accel/stubs/kvm-stub.o CC x86_64-softmmu/accel/tcg/tcg-all.o CC x86_64-softmmu/accel/tcg/cputlb.o CC x86_64-softmmu/accel/tcg/cpu-exec.o CC x86_64-softmmu/accel/tcg/cpu-exec-common.o CC x86_64-softmmu/accel/tcg/translate-all.o CC x86_64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o CC x86_64-softmmu/hw/char/virtio-serial-bus.o CC x86_64-softmmu/hw/core/generic-loader.o CC x86_64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/hw/display/vga.o CC x86_64-softmmu/hw/display/virtio-gpu.o CC x86_64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/display/virtio-gpu-pci.o CC x86_64-softmmu/hw/display/virtio-vga.o CC x86_64-softmmu/hw/intc/apic.o CC x86_64-softmmu/hw/intc/apic_common.o CC x86_64-softmmu/hw/intc/ioapic.o CC x86_64-softmmu/hw/isa/lpc_ich9.o CC x86_64-softmmu/hw/misc/vmport.o CC x86_64-softmmu/hw/misc/pvpanic.o CC x86_64-softmmu/hw/misc/mmio_interface.o CC x86_64-softmmu/hw/net/virtio-net.o CC x86_64-softmmu/hw/net/vhost_net.o CC x86_64-softmmu/hw/scsi/virtio-scsi.o CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC x86_64-softmmu/hw/timer/mc146818rtc.o CC x86_64-softmmu/hw/virtio/virtio.o CC x86_64-softmmu/hw/virtio/virtio-balloon.o CC x86_64-softmmu/hw/virtio/virtio-crypto.o CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o CC x86_64-softmmu/hw/i386/multiboot.o CC x86_64-softmmu/hw/i386/pc.o CC x86_64-softmmu/hw/i386/pc_piix.o CC x86_64-softmmu/hw/i386/pc_q35.o CC x86_64-softmmu/hw/i386/pc_sysfw.o CC x86_64-softmmu/hw/i386/x86-iommu.o CC x86_64-softmmu/hw/i386/intel_iommu.o CC x86_64-softmmu/hw/i386/amd_iommu.o CC x86_64-softmmu/hw/i386/kvmvapic.o CC x86_64-softmmu/hw/i386/acpi-build.o CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o CC x86_64-softmmu/target/i386/helper.o CC x86_64-softmmu/target/i386/cpu.o CC x86_64-softmmu/target/i386/gdbstub.o CC x86_64-softmmu/target/i386/xsave_helper.o CC x86_64-softmmu/target/i386/translate.o CC x86_64-softmmu/target/i386/bpt_helper.o CC x86_64-softmmu/target/i386/cc_helper.o CC x86_64-softmmu/target/i386/excp_helper.o CC x86_64-softmmu/target/i386/fpu_helper.o CC x86_64-softmmu/target/i386/int_helper.o CC x86_64-softmmu/target/i386/mem_helper.o CC x86_64-softmmu/target/i386/misc_helper.o CC x86_64-softmmu/target/i386/mpx_helper.o CC x86_64-softmmu/target/i386/seg_helper.o CC x86_64-softmmu/target/i386/smm_helper.o CC x86_64-softmmu/target/i386/svm_helper.o CC x86_64-softmmu/target/i386/machine.o CC x86_64-softmmu/target/i386/arch_memory_mapping.o CC x86_64-softmmu/target/i386/arch_dump.o CC x86_64-softmmu/target/i386/monitor.o CC x86_64-softmmu/target/i386/kvm-stub.o GEN trace/generated-helpers.c CC x86_64-softmmu/trace/control-target.o CC x86_64-softmmu/gdbstub-xml.o CC x86_64-softmmu/hypertrace/softmmu.o CC x86_64-softmmu/hypertrace/common.o CC x86_64-softmmu/trace/generated-helpers.o In file included from /var/tmp/patchew-tester-tmp-eswc2rbf/src/hypertrace/common.c:42: ./hypertrace/emit.c:3:39: error: too many arguments to function call, expected 2, have 4 trace_guest_hypertrace(cpu, arg1, data[1-1], data[0-1]); ~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~ ../hypertrace/trace.h:28:1: note: 'trace_guest_hypertrace' declared here static inline void trace_guest_hypertrace(CPUState * __cpu, uint64_t arg1) ^ 1 error generated. gmake[1]: *** [/var/tmp/patchew-tester-tmp-eswc2rbf/src/rules.mak:66: hypertrace/common.o] Error 1 gmake[1]: *** Waiting for unfinished jobs.... gmake: *** [Makefile:329: subdir-x86_64-softmmu] Error 2 rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c-timestamp /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c === OUTPUT END === Test command exited with code: 2 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-30 11:49 ` [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply @ 2017-07-30 12:44 ` Lluís Vilanova 2017-07-30 12:48 ` Lluís Vilanova 0 siblings, 1 reply; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 12:44 UTC (permalink / raw) To: no-reply; +Cc: qemu-devel, famz, stefanha, lcapitulino no-reply writes: > Hi, > This series failed build test on FreeBSD host. Please find the details below. > Subject: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel > Type: series > Message-id: 150141363372.9857.9055094189388759132.stgit@frigg.lan > === TEST SCRIPT BEGIN === > #!/bin/sh > # Testing script will be invoked under the git checkout with > # HEAD pointing to a commit that has the patches applied on top of "base" > # branch > set -e > echo "=== ENV ===" > env > echo "=== PACKAGES ===" > pkg info > echo "=== TEST BEGIN ===" > CC=/usr/local/libexec/ccache/cc > INSTALL=$PWD/install > BUILD=$PWD/build > echo -n "Using CC: " > realpath $CC > mkdir -p $BUILD $INSTALL > SRC=$PWD > cd $BUILD > $SRC/configure --cc=$CC --prefix=$INSTALL --target-list=x86_64-softmmu > gmake -j4 > # XXX: we need reliable clean up > # make check -j4 V=1 > gmake install > === TEST SCRIPT END === > Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 > From https://github.com/patchew-project/qemu > * [new tag] patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan -> patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan > Switched to a new branch 'test' > 5dad7c93de hypertrace: Add guest-side user-level library > dcf9d9c7c7 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event > 4c041f724d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event > 73796a3885 hypertrace: Add tracing event "guest_hypertrace" > 43fe7e2e2e hypertrace: Add documentation > === OUTPUT BEGIN === > === ENV === > LOGNAME=patchew-tester > PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin > PWD=/var/tmp/patchew-tester-tmp-eswc2rbf/src > HOME=/home/patchew-tester > USER=patchew-tester > SHELL=/bin/sh > PATCHEW=/home/patchew-tester/patchew/patchew-cli -s http://patchew.org --nodebug > === PACKAGES === > bash-4.4.12_2 GNU Project's Bourne Again SHell > binutils-2.28,1 GNU binary tools > bison-3.0.4,1 Parser generator from FSF, (mostly) compatible with Yacc > ca_root_nss-3.30.2 Root certificate bundle from the Mozilla Project > ccache-3.3.4_3 Tool to minimize the compile time of C/C++ programs > curl-7.54.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers > cvsps-2.1_2 Create patchset information from CVS > dtc-1.4.2_1 Device Tree Compiler > expat-2.2.0_1 XML 1.0 parser written in C > gcc-5.4.0 GNU Compiler Collection 5 > gcc-ecj-4.5 Eclipse Java Compiler used to build GCC Java > gettext-runtime-0.19.8.1_1 GNU gettext runtime libraries and programs > git-2.13.0 Distributed source code management tool > glib-2.46.2_5 Some useful routines of C programming (current stable version) > gmake-4.2.1_1 GNU version of 'make' utility > gmp-6.1.2 Free library for arbitrary precision arithmetic > indexinfo-0.2.6 Utility to regenerate the GNU info page index > libffi-3.2.1 Foreign Function Interface > libiconv-1.14_10 Character set conversion library > libnghttp2-1.21.0 HTTP/2.0 C Library > m4-1.4.18,1 GNU M4 > mpc-1.0.3 Library of complex numbers with arbitrarily high precision > mpfr-3.1.5_1 Library for multiple-precision floating-point computations > p5-Authen-SASL-2.16_1 Perl5 module for SASL authentication > p5-Digest-HMAC-1.03_1 Perl5 interface to HMAC Message-Digest Algorithms > p5-Error-0.17024 Error/exception handling in object-oriented programming style > p5-GSSAPI-0.28_1 Perl extension providing access to the GSSAPIv2 library > pcre-8.40 Perl Compatible Regular Expressions library > perl5-5.24.1 Practical Extraction and Report Language > pixman-0.34.0 Low-level pixel manipulation library > pkg-1.10.1 Package manager > pkgconf-1.3.0,1 Utility to help to configure compiler and linker flags > python-2.7_3,2 "meta-port" for the default version of Python interpreter > python2-2_3 The "meta-port" for version 2 of the Python interpreter > python27-2.7.13_3 Interpreted object-oriented programming language > python3-3_3 The "meta-port" for version 3 of the Python interpreter > python35-3.5.3_1 Interpreted object-oriented programming language > readline-6.3.8 Library for editing command lines as they are typed > sudo-1.8.20p1 Allow others to run commands as root > === TEST BEGIN === > Using CC: /usr/local/bin/ccache > Install prefix /var/tmp/patchew-tester-tmp-eswc2rbf/src/install > BIOS directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/qemu > binary directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/bin > library directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib > module directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib/qemu > libexec directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/libexec > include directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/include > config directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/etc > local state directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/var > Manual directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/man > ELF interp prefix /usr/gnemul/qemu-%M > Source path /var/tmp/patchew-tester-tmp-eswc2rbf/src > C compiler /usr/local/libexec/ccache/cc > Host C compiler cc > C++ compiler c++ > Objective-C compiler clang > ARFLAGS rv > CFLAGS -O2 -g > QEMU_CFLAGS -I/usr/local/include/pixman-1 -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -DNCURSES_WIDECHAR -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wno-string-plus-int -Wno-initializer-overrides -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-definition -Wtype-limits -fstack-protector-strong > LDFLAGS -Wl,--warn-common -m64 -g > make gmake > install install > python python -B > smbd /usr/sbin/smbd > module support no > host CPU x86_64 > host big endian no > target list x86_64-softmmu > gprof enabled no > sparse enabled no > strip binaries yes > profiler no > static build no > pixman system > SDL support no > GTK support no > GTK GL support no > VTE support no > TLS priority NORMAL > GNUTLS support no > GNUTLS rnd no > libgcrypt no > libgcrypt kdf no > nettle no > nettle kdf no > libtasn1 no > curses support yes > virgl support no > curl support yes > mingw32 support no > Audio drivers oss > Block whitelist (rw) > Block whitelist (ro) > VirtFS support no > VNC support yes > VNC SASL support no > VNC JPEG support no > VNC PNG support no > xen support no > brlapi support no > bluez support no > Documentation no > PIE no > vde support no > netmap support yes > Linux AIO support no > ATTR/XATTR support no > Install blobs yes > KVM support no > HAX support no > TCG support yes > TCG debug enabled no > TCG interpreter no > RDMA support no > fdt support no > preadv support yes > fdatasync no > madvise yes > posix_madvise yes > libcap-ng support no > vhost-net support no > vhost-scsi support no > vhost-vsock support no > Trace backends log > Hypertrace arguments 1 > spice support no > rbd support no > xfsctl support no > smartcard support no > libusb yes > usb net redir no > OpenGL support no > OpenGL dmabufs no > libiscsi support no > libnfs support no > build guest agent yes > QGA VSS support no > QGA w32 disk info no > QGA MSI support no > seccomp support no > coroutine backend ucontext > coroutine pool yes > debug stack usage no > crypto afalg no > GlusterFS support no > gcov gcov > gcov enabled no > TPM support yes > libssh2 support no > TPM passthrough no > QOM debugging yes > Live block migration yes > lzo support no > snappy support no > bzip2 support yes > NUMA host support no > tcmalloc support no > jemalloc support no > avx2 optimization no > replication support yes > VxHS block device no > GEN x86_64-softmmu/config-devices.mak.tmp > GEN config-host.h > GEN qemu-options.def > GEN qmp-commands.h > GEN x86_64-softmmu/config-devices.mak > GEN qapi-types.h > GEN qapi-visit.h > GEN qapi-event.h > GEN qmp-marshal.c > GEN qapi-types.c > GEN qapi-visit.c > GEN qapi-event.c > GEN qmp-introspect.h > GEN qmp-introspect.c > GEN trace/generated-tcg-tracers.h > GEN trace/generated-helpers-wrappers.h > GEN trace/generated-helpers.h > GEN trace/generated-helpers.c > GEN module_block.h > GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h > GEN tests/test-qapi-types.h > GEN tests/test-qapi-visit.h > GEN tests/test-qmp-commands.h > GEN tests/test-qapi-event.h > GEN tests/test-qmp-introspect.h > GEN trace-root.h > GEN util/trace.h > GEN crypto/trace.h > GEN io/trace.h > GEN migration/trace.h > GEN block/trace.h > GEN chardev/trace.h > GEN hw/block/trace.h > GEN hw/block/dataplane/trace.h > GEN hw/char/trace.h > GEN hw/intc/trace.h > GEN hw/net/trace.h > GEN hw/virtio/trace.h > GEN hw/audio/trace.h > GEN hw/misc/trace.h > GEN hw/usb/trace.h > GEN hw/scsi/trace.h > GEN hw/nvram/trace.h > GEN hw/display/trace.h > GEN hw/input/trace.h > GEN hw/timer/trace.h > GEN hw/dma/trace.h > GEN hw/sparc/trace.h > GEN hw/sd/trace.h > GEN hw/isa/trace.h > GEN hw/mem/trace.h > GEN hw/i386/trace.h > GEN hw/i386/xen/trace.h > GEN hw/9pfs/trace.h > GEN hw/ppc/trace.h > GEN hw/pci/trace.h > GEN hw/s390x/trace.h > GEN hw/vfio/trace.h > GEN hw/acpi/trace.h > GEN hw/arm/trace.h > GEN hw/alpha/trace.h > GEN hw/xen/trace.h > GEN ui/trace.h > GEN audio/trace.h > GEN net/trace.h > GEN target/arm/trace.h > GEN target/i386/trace.h > GEN target/mips/trace.h > GEN target/sparc/trace.h > GEN target/s390x/trace.h > GEN target/ppc/trace.h > GEN qom/trace.h > GEN linux-user/trace.h > GEN qapi/trace.h > GEN accel/tcg/trace.h > GEN accel/kvm/trace.h > GEN nbd/trace.h > GEN trace-root.c > GEN util/trace.c > GEN crypto/trace.c > GEN io/trace.c > GEN migration/trace.c > GEN block/trace.c > GEN chardev/trace.c > GEN hw/block/trace.c > GEN hw/block/dataplane/trace.c > GEN hw/char/trace.c > GEN hw/intc/trace.c > GEN hw/net/trace.c > GEN hw/virtio/trace.c > GEN hw/audio/trace.c > GEN hw/misc/trace.c > GEN hw/usb/trace.c > GEN hw/scsi/trace.c > GEN hw/nvram/trace.c > GEN hw/display/trace.c > GEN hw/input/trace.c > GEN hw/timer/trace.c > GEN hw/dma/trace.c > GEN hw/sparc/trace.c > GEN hw/sd/trace.c > GEN hw/isa/trace.c > GEN hw/mem/trace.c > GEN hw/i386/trace.c > GEN hw/i386/xen/trace.c > GEN hw/9pfs/trace.c > GEN hw/ppc/trace.c > GEN hw/pci/trace.c > GEN hw/s390x/trace.c > GEN hw/vfio/trace.c > GEN hw/acpi/trace.c > GEN hw/arm/trace.c > GEN hw/alpha/trace.c > GEN hw/xen/trace.c > GEN ui/trace.c > GEN audio/trace.c > GEN net/trace.c > GEN target/arm/trace.c > GEN target/i386/trace.c > GEN target/mips/trace.c > GEN target/sparc/trace.c > GEN target/s390x/trace.c > GEN target/ppc/trace.c > GEN qom/trace.c > GEN linux-user/trace.c > GEN qapi/trace.c > GEN accel/tcg/trace.c > GEN accel/kvm/trace.c > GEN nbd/trace.c > GEN config-all-devices.mak > rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h-timestamp > GEN qga/qapi-generated/qga-qapi-types.h > GEN qga/qapi-generated/qga-qapi-visit.h > GEN qga/qapi-generated/qga-qmp-commands.h > GEN qga/qapi-generated/qga-qapi-types.c > GEN qga/qapi-generated/qga-qapi-visit.c > GEN qga/qapi-generated/qga-qmp-marshal.c > CC qmp-introspect.o > CC qapi-types.o > CC qapi-visit.o > CC qapi-event.o > CC qapi/qapi-visit-core.o > CC qapi/qapi-dealloc-visitor.o > CC qapi/qobject-input-visitor.o > CC qapi/qobject-output-visitor.o > CC qapi/qmp-registry.o > CC qapi/qmp-dispatch.o > CC qapi/string-input-visitor.o > CC qapi/string-output-visitor.o > CC qapi/opts-visitor.o > CC qapi/qapi-clone-visitor.o > CC qapi/qmp-event.o > CC qapi/qapi-util.o > CC qobject/qnull.o > CC qobject/qnum.o > CC qobject/qstring.o > CC qobject/qdict.o > CC qobject/qlist.o > CC qobject/qbool.o > CC qobject/qjson.o > CC qobject/qobject.o > CC qobject/json-lexer.o > CC qobject/json-streamer.o > CC qobject/json-parser.o > CC trace/control.o > CC trace/qmp.o > CC util/osdep.o > CC util/cutils.o > CC util/unicode.o > CC util/qemu-timer-common.o > CC util/bufferiszero.o > CC util/lockcnt.o > CC util/aiocb.o > CC util/async.o > CC util/thread-pool.o > CC util/qemu-timer.o > CC util/main-loop.o > CC util/iohandler.o > CC util/aio-posix.o > CC util/compatfd.o > CC util/event_notifier-posix.o > CC util/mmap-alloc.o > CC util/oslib-posix.o > CC util/qemu-openpty.o > CC util/qemu-thread-posix.o > CC util/memfd.o > CC util/envlist.o > CC util/path.o > CC util/module.o > CC util/host-utils.o > CC util/bitmap.o > CC util/bitops.o > CC util/hbitmap.o > CC util/fifo8.o > CC util/acl.o > CC util/cacheinfo.o > CC util/error.o > CC util/qemu-error.o > CC util/id.o > CC util/iov.o > CC util/qemu-config.o > CC util/qemu-sockets.o > CC util/uri.o > CC util/notify.o > CC util/qemu-option.o > CC util/qemu-progress.o > CC util/keyval.o > CC util/hexdump.o > CC util/crc32c.o > CC util/uuid.o > CC util/throttle.o > CC util/getauxval.o > CC util/readline.o > CC util/rcu.o > CC util/qemu-coroutine.o > CC util/qemu-coroutine-lock.o > CC util/qemu-coroutine-io.o > CC util/qemu-coroutine-sleep.o > CC util/coroutine-ucontext.o > CC util/buffer.o > CC util/timed-average.o > CC util/base64.o > CC util/log.o > CC util/qdist.o > CC util/qht.o > CC util/range.o > CC util/stats64.o > CC util/systemd.o > CC trace-root.o > CC util/trace.o > CC crypto/trace.o > CC io/trace.o > CC migration/trace.o > CC block/trace.o > CC chardev/trace.o > CC hw/block/trace.o > CC hw/block/dataplane/trace.o > CC hw/char/trace.o > CC hw/intc/trace.o > CC hw/net/trace.o > CC hw/virtio/trace.o > CC hw/audio/trace.o > CC hw/misc/trace.o > CC hw/usb/trace.o > CC hw/scsi/trace.o > CC hw/nvram/trace.o > CC hw/display/trace.o > CC hw/input/trace.o > CC hw/timer/trace.o > CC hw/dma/trace.o > CC hw/sparc/trace.o > CC hw/sd/trace.o > CC hw/isa/trace.o > CC hw/mem/trace.o > CC hw/i386/trace.o > CC hw/i386/xen/trace.o > CC hw/9pfs/trace.o > CC hw/ppc/trace.o > CC hw/pci/trace.o > CC hw/s390x/trace.o > CC hw/vfio/trace.o > CC hw/acpi/trace.o > CC hw/arm/trace.o > CC hw/alpha/trace.o > CC hw/xen/trace.o > CC ui/trace.o > CC audio/trace.o > CC net/trace.o > CC target/arm/trace.o > CC target/i386/trace.o > CC target/mips/trace.o > CC target/sparc/trace.o > CC target/s390x/trace.o > CC target/ppc/trace.o > CC qom/trace.o > CC linux-user/trace.o > CC qapi/trace.o > CC accel/tcg/trace.o > CC accel/kvm/trace.o > CC nbd/trace.o > GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c > CC crypto/pbkdf-stub.o > CC stubs/arch-query-cpu-def.o > CC stubs/arch-query-cpu-model-expansion.o > CC stubs/arch-query-cpu-model-comparison.o > CC stubs/arch-query-cpu-model-baseline.o > CC stubs/bdrv-next-monitor-owned.o > CC stubs/blk-commit-all.o > CC stubs/blockdev-close-all-bdrv-states.o > CC stubs/clock-warp.o > CC stubs/cpu-get-clock.o > CC stubs/cpu-get-icount.o > CC stubs/dump.o > CC stubs/error-printf.o > CC stubs/fdset.o > CC stubs/gdbstub.o > CC stubs/get-vm-name.o > CC stubs/iothread.o > CC stubs/iothread-lock.o > CC stubs/is-daemonized.o > CC stubs/machine-init-done.o > CC stubs/migr-blocker.o > CC stubs/monitor.o > CC stubs/notify-event.o > CC stubs/qtest.o > CC stubs/replay.o > CC stubs/runstate-check.o > CC stubs/set-fd-handler.o > CC stubs/slirp.o > CC stubs/sysbus.o > CC stubs/trace-control.o > CC stubs/uuid.o > CC stubs/vm-stop.o > CC stubs/vmstate.o > CC stubs/qmp_pc_dimm_device_list.o > CC stubs/target-monitor-defs.o > CC stubs/target-get-monitor-def.o > CC stubs/pc_madt_cpu_entry.o > CC stubs/vmgenid.o > CC stubs/xen-common.o > CC stubs/xen-hvm.o > CC qemu-nbd.o > CC block.o > CC blockjob.o > CC qemu-io-cmds.o > CC replication.o > CC block/raw-format.o > CC block/qcow.o > CC block/vdi.o > CC block/vmdk.o > CC block/cloop.o > CC block/bochs.o > CC block/vpc.o > CC block/vvfat.o > CC block/dmg.o > CC block/qcow2.o > CC block/qcow2-refcount.o > CC block/qcow2-cluster.o > CC block/qcow2-snapshot.o > CC block/qcow2-cache.o > CC block/qcow2-bitmap.o > CC block/qed.o > CC block/qed-l2-cache.o > CC block/qed-table.o > CC block/qed-cluster.o > CC block/qed-check.o > CC block/vhdx.o > CC block/vhdx-endian.o > CC block/vhdx-log.o > CC block/quorum.o > CC block/parallels.o > CC block/blkdebug.o > CC block/blkverify.o > CC block/blkreplay.o > CC block/block-backend.o > CC block/snapshot.o > CC block/qapi.o > CC block/file-posix.o > CC block/null.o > CC block/mirror.o > CC block/commit.o > CC block/io.o > CC block/throttle-groups.o > CC block/nbd.o > CC block/nbd-client.o > CC block/sheepdog.o > CC block/accounting.o > CC block/dirty-bitmap.o > CC block/write-threshold.o > CC block/backup.o > CC block/replication.o > CC block/crypto.o > CC nbd/server.o > CC nbd/client.o > CC nbd/common.o > CC block/curl.o > CC block/dmg-bz2.o > CC crypto/init.o > CC crypto/hash.o > CC crypto/hash-glib.o > CC crypto/hmac-glib.o > CC crypto/hmac.o > CC crypto/aes.o > CC crypto/desrfb.o > CC crypto/cipher.o > CC crypto/tlscreds.o > CC crypto/tlscredsanon.o > CC crypto/tlscredsx509.o > CC crypto/tlssession.o > CC crypto/secret.o > CC crypto/random-platform.o > CC crypto/pbkdf.o > CC crypto/ivgen.o > CC crypto/ivgen-essiv.o > CC crypto/ivgen-plain.o > CC crypto/afsplit.o > CC crypto/ivgen-plain64.o > CC crypto/xts.o > CC crypto/block.o > CC crypto/block-qcow.o > CC crypto/block-luks.o > CC io/channel.o > CC io/channel-buffer.o > CC io/channel-command.o > CC io/channel-file.o > CC io/channel-socket.o > CC io/channel-tls.o > CC io/channel-watch.o > CC io/channel-websock.o > CC io/channel-util.o > CC io/dns-resolver.o > CC io/task.o > CC qom/object.o > CC qom/container.o > CC qom/qom-qobject.o > CC qom/object_interfaces.o > GEN qemu-img-cmds.h > CC qemu-io.o > CC blockdev.o > CC blockdev-nbd.o > CC bootdevice.o > CC iothread.o > CC qdev-monitor.o > CC device-hotplug.o > CC os-posix.o > CC bt-host.o > CC bt-vhci.o > CC dma-helpers.o > CC vl.o > CC tpm.o > CC qmp-marshal.o > CC qmp.o > CC hmp.o > CC cpus-common.o > CC audio/audio.o > CC audio/noaudio.o > CC audio/wavaudio.o > CC audio/mixeng.o > CC audio/ossaudio.o > CC audio/wavcapture.o > CC backends/rng.o > CC backends/rng-egd.o > CC backends/rng-random.o > CC backends/tpm.o > CC backends/hostmem.o > CC backends/hostmem-ram.o > CC backends/cryptodev.o > CC backends/cryptodev-builtin.o > CC block/stream.o > CC chardev/msmouse.o > CC chardev/wctablet.o > CC chardev/testdev.o > CC disas/i386.o > CC hw/acpi/core.o > CC hw/acpi/piix4.o > CC hw/acpi/pcihp.o > CC hw/acpi/ich9.o > CC hw/acpi/tco.o > CC hw/acpi/cpu_hotplug.o > CC hw/acpi/memory_hotplug.o > CC hw/acpi/cpu.o > CC hw/acpi/nvdimm.o > CC hw/acpi/vmgenid.o > CC hw/acpi/acpi_interface.o > CC hw/acpi/bios-linker-loader.o > CC hw/acpi/aml-build.o > CC hw/acpi/ipmi.o > CC hw/acpi/acpi-stub.o > CC hw/acpi/ipmi-stub.o > CC hw/audio/sb16.o > CC hw/audio/es1370.o > CC hw/audio/ac97.o > CC hw/audio/fmopl.o > CC hw/audio/adlib.o > CC hw/audio/gus.o > CC hw/audio/gusemu_hal.o > CC hw/audio/gusemu_mixer.o > CC hw/audio/cs4231a.o > CC hw/audio/intel-hda.o > CC hw/audio/hda-codec.o > CC hw/audio/pcspk.o > CC hw/audio/soundhw.o > CC hw/block/block.o > CC hw/block/cdrom.o > CC hw/block/hd-geometry.o > CC hw/block/fdc.o > CC hw/block/pflash_cfi01.o > CC hw/block/nvme.o > CC hw/bt/core.o > CC hw/bt/l2cap.o > CC hw/bt/sdp.o > CC hw/bt/hid.o > CC hw/bt/hci.o > CC hw/bt/hci-csr.o > CC hw/char/ipoctal232.o > CC hw/char/parallel.o > CC hw/char/serial.o > CC hw/char/serial-isa.o > CC hw/char/serial-pci.o > CC hw/char/virtio-console.o > CC hw/char/debugcon.o > CC hw/core/qdev.o > CC hw/core/qdev-properties.o > CC hw/core/bus.o > CC hw/core/reset.o > CC hw/core/fw-path-provider.o > CC hw/core/irq.o > CC hw/core/hotplug.o > CC hw/core/nmi.o > CC hw/core/sysbus.o > CC hw/core/machine.o > CC hw/core/loader.o > CC hw/core/qdev-properties-system.o > CC hw/core/register.o > CC hw/core/or-irq.o > CC hw/cpu/core.o > CC hw/display/cirrus_vga.o > CC hw/display/vga-pci.o > CC hw/display/vga-isa.o > CC hw/display/vmware_vga.o > CC hw/dma/i8257.o > CC hw/i2c/core.o > CC hw/i2c/smbus.o > CC hw/i2c/smbus_eeprom.o > CC hw/i2c/smbus_ich9.o > CC hw/i2c/pm_smbus.o > CC hw/ide/core.o > CC hw/ide/atapi.o > CC hw/ide/qdev.o > CC hw/ide/pci.o > CC hw/ide/isa.o > CC hw/ide/piix.o > CC hw/ide/ahci.o > CC hw/ide/ich.o > CC hw/input/hid.o > CC hw/input/pckbd.o > CC hw/input/ps2.o > CC hw/input/vmmouse.o > CC hw/input/virtio-input.o > CC hw/input/virtio-input-hid.o > CC hw/intc/i8259_common.o > CC hw/intc/i8259.o > CC hw/intc/ioapic_common.o > CC hw/intc/intc.o > CC hw/ipack/ipack.o > CC hw/ipack/tpci200.o > CC hw/ipmi/ipmi.o > CC hw/ipmi/ipmi_bmc_sim.o > CC hw/ipmi/ipmi_bmc_extern.o > CC hw/ipmi/isa_ipmi_kcs.o > CC hw/ipmi/isa_ipmi_bt.o > CC hw/isa/isa-bus.o > CC hw/isa/apm.o > CC hw/mem/pc-dimm.o > CC hw/mem/nvdimm.o > CC hw/misc/applesmc.o > CC hw/misc/debugexit.o > CC hw/misc/sga.o > CC hw/misc/pc-testdev.o > CC hw/misc/pci-testdev.o > CC hw/misc/edu.o > CC hw/misc/unimp.o > CC hw/net/ne2000.o > CC hw/net/eepro100.o > CC hw/net/pcnet-pci.o > CC hw/net/pcnet.o > CC hw/net/e1000.o > CC hw/net/e1000x_common.o > CC hw/net/net_tx_pkt.o > CC hw/net/net_rx_pkt.o > CC hw/net/e1000e.o > CC hw/net/e1000e_core.o > CC hw/net/rtl8139.o > CC hw/net/vmxnet3.o > CC hw/net/ne2000-isa.o > CC hw/net/rocker/rocker.o > CC hw/net/rocker/rocker_fp.o > CC hw/net/rocker/rocker_desc.o > CC hw/net/rocker/rocker_world.o > CC hw/net/rocker/rocker_of_dpa.o > CC hw/nvram/eeprom93xx.o > CC hw/nvram/fw_cfg.o > CC hw/nvram/chrp_nvram.o > CC hw/pci-bridge/pci_bridge_dev.o > CC hw/pci-bridge/pcie_root_port.o > CC hw/pci-bridge/gen_pcie_root_port.o > CC hw/pci-bridge/pci_expander_bridge.o > CC hw/pci-bridge/xio3130_upstream.o > CC hw/pci-bridge/xio3130_downstream.o > CC hw/pci-bridge/ioh3420.o > CC hw/pci-bridge/i82801b11.o > CC hw/pci-host/piix.o > CC hw/pci-host/pam.o > CC hw/pci-host/q35.o > CC hw/pci/pci.o > CC hw/pci/pci_bridge.o > CC hw/pci/msix.o > CC hw/pci/msi.o > CC hw/pci/shpc.o > CC hw/pci/slotid_cap.o > CC hw/pci/pci_host.o > CC hw/pci/pcie_host.o > CC hw/pci/pcie.o > CC hw/pci/pcie_aer.o > CC hw/pci/pcie_port.o > CC hw/pci/pci-stub.o > CC hw/pcmcia/pcmcia.o > CC hw/scsi/scsi-disk.o > CC hw/scsi/scsi-generic.o > CC hw/scsi/scsi-bus.o > CC hw/scsi/lsi53c895a.o > CC hw/scsi/mptsas.o > CC hw/scsi/mptconfig.o > CC hw/scsi/mptendian.o > CC hw/scsi/megasas.o > CC hw/scsi/vmw_pvscsi.o > CC hw/scsi/esp.o > CC hw/scsi/esp-pci.o > CC hw/sd/sd.o > CC hw/sd/core.o > CC hw/sd/sdhci.o > CC hw/smbios/smbios.o > CC hw/smbios/smbios_type_38.o > CC hw/smbios/smbios-stub.o > CC hw/smbios/smbios_type_38-stub.o > CC hw/timer/hpet.o > CC hw/timer/i8254_common.o > CC hw/timer/i8254.o > CC hw/tpm/tpm_tis.o > CC hw/usb/core.o > CC hw/usb/combined-packet.o > CC hw/usb/bus.o > CC hw/usb/libhw.o > CC hw/usb/desc.o > CC hw/usb/desc-msos.o > CC hw/usb/hcd-uhci.o > CC hw/usb/hcd-ohci.o > CC hw/usb/hcd-ehci.o > CC hw/usb/hcd-ehci-pci.o > CC hw/usb/hcd-xhci.o > CC hw/usb/hcd-xhci-nec.o > CC hw/usb/dev-hub.o > CC hw/usb/dev-hid.o > CC hw/usb/dev-wacom.o > CC hw/usb/dev-storage.o > CC hw/usb/dev-uas.o > CC hw/usb/dev-audio.o > CC hw/usb/dev-serial.o > CC hw/usb/dev-network.o > CC hw/usb/dev-bluetooth.o > CC hw/usb/dev-smartcard-reader.o > CC hw/usb/dev-mtp.o > CC hw/usb/host-libusb.o > CC hw/usb/host-legacy.o > CC hw/virtio/virtio-rng.o > CC hw/virtio/virtio-pci.o > CC hw/virtio/virtio-bus.o > CC hw/virtio/virtio-mmio.o > CC hw/virtio/vhost-stub.o > CC hw/watchdog/watchdog.o > CC hw/watchdog/wdt_i6300esb.o > CC hw/watchdog/wdt_ib700.o > CC migration/migration.o > CC migration/socket.o > CC migration/fd.o > CC migration/exec.o > CC migration/tls.o > CC migration/channel.o > CC migration/savevm.o > CC migration/colo-comm.o > CC migration/colo.o > CC migration/colo-failover.o > CC migration/vmstate.o > CC migration/vmstate-types.o > CC migration/page_cache.o > CC migration/qemu-file.o > CC migration/global_state.o > CC migration/qemu-file-channel.o > CC migration/xbzrle.o > CC migration/postcopy-ram.o > CC migration/qjson.o > CC migration/block.o > CC net/net.o > CC net/queue.o > CC net/checksum.o > CC net/util.o > CC net/hub.o > CC net/socket.o > CC net/dump.o > CC net/eth.o > CC net/vhost-user.o > CC net/slirp.o > CC net/netmap.o > CC net/filter.o > CC net/filter-buffer.o > CC net/filter-mirror.o > CC net/colo-compare.o > CC net/colo.o > CC net/filter-rewriter.o > CC net/filter-replay.o > CC net/tap.o > CC net/tap-bsd.o > CC qom/cpu.o > CC replay/replay.o > CC replay/replay-internal.o > CC replay/replay-events.o > CC replay/replay-time.o > CC replay/replay-input.o > CC replay/replay-char.o > CC replay/replay-snapshot.o > CC replay/replay-net.o > CC replay/replay-audio.o > CC slirp/cksum.o > CC slirp/if.o > CC slirp/ip_icmp.o > CC slirp/ip6_icmp.o > CC slirp/ip6_input.o > CC slirp/ip6_output.o > CC slirp/ip_input.o > CC slirp/ip_output.o > CC slirp/dnssearch.o > CC slirp/dhcpv6.o > CC slirp/slirp.o > CC slirp/mbuf.o > CC slirp/misc.o > CC slirp/sbuf.o > CC slirp/socket.o > CC slirp/tcp_input.o > CC slirp/tcp_output.o > CC slirp/tcp_subr.o > CC slirp/tcp_timer.o > CC slirp/udp.o > CC slirp/udp6.o > CC slirp/bootp.o > CC slirp/tftp.o > CC slirp/arp_table.o > CC slirp/ndp_table.o > CC slirp/ncsi.o > CC ui/keymaps.o > CC ui/console.o > CC ui/cursor.o > CC ui/qemu-pixman.o > CC ui/input.o > CC ui/input-keymap.o > CC ui/input-legacy.o > CC ui/curses.o > CC ui/vnc.o > CC ui/vnc-enc-zlib.o > CC ui/vnc-enc-hextile.o > CC ui/vnc-enc-tight.o > CC ui/vnc-palette.o > CC ui/vnc-enc-zrle.o > CC ui/vnc-auth-vencrypt.o > CC ui/vnc-ws.o > CC ui/vnc-jobs.o > CC chardev/char.o > CC chardev/char-fd.o > CC chardev/char-fe.o > CC chardev/char-file.o > CC chardev/char-io.o > CC chardev/char-mux.o > CC chardev/char-null.o > CC chardev/char-parallel.o > CC chardev/char-pipe.o > CC chardev/char-pty.o > CC chardev/char-ringbuf.o > CC chardev/char-serial.o > CC chardev/char-socket.o > CC chardev/char-stdio.o > CC chardev/char-udp.o > AS optionrom/multiboot.o > AS optionrom/linuxboot.o > CC optionrom/linuxboot_dma.o > AS optionrom/kvmvapic.o > CC qga/commands.o > CC qga/guest-agent-command-state.o > BUILD optionrom/multiboot.img > BUILD optionrom/linuxboot.img > BUILD optionrom/kvmvapic.img > BUILD optionrom/multiboot.raw > BUILD optionrom/linuxboot.raw > BUILD optionrom/linuxboot_dma.img > CC qga/main.o > CC qga/commands-posix.o > BUILD optionrom/kvmvapic.raw > SIGN optionrom/multiboot.bin > SIGN optionrom/linuxboot.bin > BUILD optionrom/linuxboot_dma.raw > SIGN optionrom/kvmvapic.bin > CC qga/channel-posix.o > SIGN optionrom/linuxboot_dma.bin > CC qga/qapi-generated/qga-qapi-types.o > CC qga/qapi-generated/qga-qapi-visit.o > CC qga/qapi-generated/qga-qmp-marshal.o > AR libqemustub.a > CC qemu-img.o > CC /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.o > AR libqemuutil.a > LINK qemu-ga > LINK qemu-nbd > LINK qemu-io > LINK qemu-img > GEN x86_64-softmmu/hmp-commands.h > GEN x86_64-softmmu/hmp-commands-info.h > GEN x86_64-softmmu/config-target.h > CC x86_64-softmmu/tcg/tcg-op.o > CC x86_64-softmmu/exec.o > CC x86_64-softmmu/tcg/tcg.o > CC x86_64-softmmu/tcg/optimize.o > CC x86_64-softmmu/tcg/tcg-common.o > CC x86_64-softmmu/tcg/tcg-runtime.o > CC x86_64-softmmu/fpu/softfloat.o > CC x86_64-softmmu/disas.o > GEN x86_64-softmmu/gdbstub-xml.c > CC x86_64-softmmu/hax-stub.o > CC x86_64-softmmu/arch_init.o > CC x86_64-softmmu/cpus.o > CC x86_64-softmmu/monitor.o > CC x86_64-softmmu/gdbstub.o > CC x86_64-softmmu/balloon.o > CC x86_64-softmmu/ioport.o > CC x86_64-softmmu/numa.o > CC x86_64-softmmu/qtest.o > CC x86_64-softmmu/memory.o > CC x86_64-softmmu/memory_mapping.o > CC x86_64-softmmu/dump.o > CC x86_64-softmmu/migration/ram.o > CC x86_64-softmmu/accel/accel.o > CC x86_64-softmmu/accel/stubs/kvm-stub.o > CC x86_64-softmmu/accel/tcg/tcg-all.o > CC x86_64-softmmu/accel/tcg/cputlb.o > CC x86_64-softmmu/accel/tcg/cpu-exec.o > CC x86_64-softmmu/accel/tcg/cpu-exec-common.o > CC x86_64-softmmu/accel/tcg/translate-all.o > CC x86_64-softmmu/hw/block/virtio-blk.o > CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o > CC x86_64-softmmu/hw/char/virtio-serial-bus.o > CC x86_64-softmmu/hw/core/generic-loader.o > CC x86_64-softmmu/hw/core/null-machine.o > CC x86_64-softmmu/hw/display/vga.o > CC x86_64-softmmu/hw/display/virtio-gpu.o > CC x86_64-softmmu/hw/display/virtio-gpu-3d.o > CC x86_64-softmmu/hw/display/virtio-gpu-pci.o > CC x86_64-softmmu/hw/display/virtio-vga.o > CC x86_64-softmmu/hw/intc/apic.o > CC x86_64-softmmu/hw/intc/apic_common.o > CC x86_64-softmmu/hw/intc/ioapic.o > CC x86_64-softmmu/hw/isa/lpc_ich9.o > CC x86_64-softmmu/hw/misc/vmport.o > CC x86_64-softmmu/hw/misc/pvpanic.o > CC x86_64-softmmu/hw/misc/mmio_interface.o > CC x86_64-softmmu/hw/net/virtio-net.o > CC x86_64-softmmu/hw/net/vhost_net.o > CC x86_64-softmmu/hw/scsi/virtio-scsi.o > CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o > CC x86_64-softmmu/hw/timer/mc146818rtc.o > CC x86_64-softmmu/hw/virtio/virtio.o > CC x86_64-softmmu/hw/virtio/virtio-balloon.o > CC x86_64-softmmu/hw/virtio/virtio-crypto.o > CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o > CC x86_64-softmmu/hw/i386/multiboot.o > CC x86_64-softmmu/hw/i386/pc.o > CC x86_64-softmmu/hw/i386/pc_piix.o > CC x86_64-softmmu/hw/i386/pc_q35.o > CC x86_64-softmmu/hw/i386/pc_sysfw.o > CC x86_64-softmmu/hw/i386/x86-iommu.o > CC x86_64-softmmu/hw/i386/intel_iommu.o > CC x86_64-softmmu/hw/i386/amd_iommu.o > CC x86_64-softmmu/hw/i386/kvmvapic.o > CC x86_64-softmmu/hw/i386/acpi-build.o > CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o > CC x86_64-softmmu/target/i386/helper.o > CC x86_64-softmmu/target/i386/cpu.o > CC x86_64-softmmu/target/i386/gdbstub.o > CC x86_64-softmmu/target/i386/xsave_helper.o > CC x86_64-softmmu/target/i386/translate.o > CC x86_64-softmmu/target/i386/bpt_helper.o > CC x86_64-softmmu/target/i386/cc_helper.o > CC x86_64-softmmu/target/i386/excp_helper.o > CC x86_64-softmmu/target/i386/fpu_helper.o > CC x86_64-softmmu/target/i386/int_helper.o > CC x86_64-softmmu/target/i386/mem_helper.o > CC x86_64-softmmu/target/i386/misc_helper.o > CC x86_64-softmmu/target/i386/mpx_helper.o > CC x86_64-softmmu/target/i386/seg_helper.o > CC x86_64-softmmu/target/i386/smm_helper.o > CC x86_64-softmmu/target/i386/svm_helper.o > CC x86_64-softmmu/target/i386/machine.o > CC x86_64-softmmu/target/i386/arch_memory_mapping.o > CC x86_64-softmmu/target/i386/arch_dump.o > CC x86_64-softmmu/target/i386/monitor.o > CC x86_64-softmmu/target/i386/kvm-stub.o > GEN trace/generated-helpers.c > CC x86_64-softmmu/trace/control-target.o > CC x86_64-softmmu/gdbstub-xml.o > CC x86_64-softmmu/hypertrace/softmmu.o > CC x86_64-softmmu/hypertrace/common.o > CC x86_64-softmmu/trace/generated-helpers.o > In file included from /var/tmp/patchew-tester-tmp-eswc2rbf/src/hypertrace/common.c:42: > ./hypertrace/emit.c:3:39: error: too many arguments to function call, expected 2, have 4 > trace_guest_hypertrace(cpu, arg1, data[1-1], data[0-1]); > ~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~ > ../hypertrace/trace.h:28:1: note: 'trace_guest_hypertrace' declared here > static inline void trace_guest_hypertrace(CPUState * __cpu, uint64_t arg1) > ^ > 1 error generated. > gmake[1]: *** [/var/tmp/patchew-tester-tmp-eswc2rbf/src/rules.mak:66: hypertrace/common.o] Error 1 > gmake[1]: *** Waiting for unfinished jobs.... > gmake: *** [Makefile:329: subdir-x86_64-softmmu] Error 2 > rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c-timestamp /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c > === OUTPUT END === > Test command exited with code: 2 Is there a BSD machine I can log into to check why is this failing? Thanks, Lluis ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-30 12:44 ` Lluís Vilanova @ 2017-07-30 12:48 ` Lluís Vilanova 0 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 12:48 UTC (permalink / raw) To: no-reply; +Cc: qemu-devel, famz, stefanha, lcapitulino Lluís Vilanova writes: > no-reply writes: >> Hi, >> This series failed build test on FreeBSD host. Please find the details below. >> Subject: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel >> Type: series >> Message-id: 150141363372.9857.9055094189388759132.stgit@frigg.lan >> === TEST SCRIPT BEGIN === >> #!/bin/sh >> # Testing script will be invoked under the git checkout with >> # HEAD pointing to a commit that has the patches applied on top of "base" >> # branch >> set -e >> echo "=== ENV ===" >> env >> echo "=== PACKAGES ===" >> pkg info >> echo "=== TEST BEGIN ===" >> CC=/usr/local/libexec/ccache/cc >> INSTALL=$PWD/install >> BUILD=$PWD/build >> echo -n "Using CC: " >> realpath $CC >> mkdir -p $BUILD $INSTALL >> SRC=$PWD >> cd $BUILD >> $SRC/configure --cc=$CC --prefix=$INSTALL --target-list=x86_64-softmmu >> gmake -j4 >> # XXX: we need reliable clean up >> # make check -j4 V=1 >> gmake install >> === TEST SCRIPT END === >> Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 >> From https://github.com/patchew-project/qemu >> * [new tag] patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan -> patchew/150141363372.9857.9055094189388759132.stgit@frigg.lan >> Switched to a new branch 'test' >> 5dad7c93de hypertrace: Add guest-side user-level library >> dcf9d9c7c7 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event >> 4c041f724d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event >> 73796a3885 hypertrace: Add tracing event "guest_hypertrace" >> 43fe7e2e2e hypertrace: Add documentation >> === OUTPUT BEGIN === >> === ENV === >> LOGNAME=patchew-tester >> PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin >> PWD=/var/tmp/patchew-tester-tmp-eswc2rbf/src >> HOME=/home/patchew-tester >> USER=patchew-tester >> SHELL=/bin/sh >> PATCHEW=/home/patchew-tester/patchew/patchew-cli -s http://patchew.org --nodebug >> === PACKAGES === >> bash-4.4.12_2 GNU Project's Bourne Again SHell >> binutils-2.28,1 GNU binary tools >> bison-3.0.4,1 Parser generator from FSF, (mostly) compatible with Yacc >> ca_root_nss-3.30.2 Root certificate bundle from the Mozilla Project >> ccache-3.3.4_3 Tool to minimize the compile time of C/C++ programs >> curl-7.54.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers >> cvsps-2.1_2 Create patchset information from CVS >> dtc-1.4.2_1 Device Tree Compiler >> expat-2.2.0_1 XML 1.0 parser written in C >> gcc-5.4.0 GNU Compiler Collection 5 >> gcc-ecj-4.5 Eclipse Java Compiler used to build GCC Java >> gettext-runtime-0.19.8.1_1 GNU gettext runtime libraries and programs >> git-2.13.0 Distributed source code management tool >> glib-2.46.2_5 Some useful routines of C programming (current stable version) >> gmake-4.2.1_1 GNU version of 'make' utility >> gmp-6.1.2 Free library for arbitrary precision arithmetic >> indexinfo-0.2.6 Utility to regenerate the GNU info page index >> libffi-3.2.1 Foreign Function Interface >> libiconv-1.14_10 Character set conversion library >> libnghttp2-1.21.0 HTTP/2.0 C Library >> m4-1.4.18,1 GNU M4 >> mpc-1.0.3 Library of complex numbers with arbitrarily high precision >> mpfr-3.1.5_1 Library for multiple-precision floating-point computations >> p5-Authen-SASL-2.16_1 Perl5 module for SASL authentication >> p5-Digest-HMAC-1.03_1 Perl5 interface to HMAC Message-Digest Algorithms >> p5-Error-0.17024 Error/exception handling in object-oriented programming style >> p5-GSSAPI-0.28_1 Perl extension providing access to the GSSAPIv2 library >> pcre-8.40 Perl Compatible Regular Expressions library >> perl5-5.24.1 Practical Extraction and Report Language >> pixman-0.34.0 Low-level pixel manipulation library >> pkg-1.10.1 Package manager >> pkgconf-1.3.0,1 Utility to help to configure compiler and linker flags >> python-2.7_3,2 "meta-port" for the default version of Python interpreter >> python2-2_3 The "meta-port" for version 2 of the Python interpreter >> python27-2.7.13_3 Interpreted object-oriented programming language >> python3-3_3 The "meta-port" for version 3 of the Python interpreter >> python35-3.5.3_1 Interpreted object-oriented programming language >> readline-6.3.8 Library for editing command lines as they are typed >> sudo-1.8.20p1 Allow others to run commands as root >> === TEST BEGIN === >> Using CC: /usr/local/bin/ccache >> Install prefix /var/tmp/patchew-tester-tmp-eswc2rbf/src/install >> BIOS directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/qemu >> binary directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/bin >> library directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib >> module directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/lib/qemu >> libexec directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/libexec >> include directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/include >> config directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/etc >> local state directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/var >> Manual directory /var/tmp/patchew-tester-tmp-eswc2rbf/src/install/share/man >> ELF interp prefix /usr/gnemul/qemu-%M >> Source path /var/tmp/patchew-tester-tmp-eswc2rbf/src >> C compiler /usr/local/libexec/ccache/cc >> Host C compiler cc >> C++ compiler c++ >> Objective-C compiler clang >> ARFLAGS rv >> CFLAGS -O2 -g >> QEMU_CFLAGS -I/usr/local/include/pixman-1 -pthread > -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include > -I/usr/local/include -DNCURSES_WIDECHAR -m64 -mcx16 -D_GNU_SOURCE > -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls > -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing > -fno-common -fwrapv -Wno-string-plus-int -Wno-initializer-overrides > -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body > -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers > -Wold-style-definition -Wtype-limits -fstack-protector-strong >> LDFLAGS -Wl,--warn-common -m64 -g >> make gmake >> install install >> python python -B >> smbd /usr/sbin/smbd >> module support no >> host CPU x86_64 >> host big endian no >> target list x86_64-softmmu >> gprof enabled no >> sparse enabled no >> strip binaries yes >> profiler no >> static build no >> pixman system >> SDL support no >> GTK support no >> GTK GL support no >> VTE support no >> TLS priority NORMAL >> GNUTLS support no >> GNUTLS rnd no >> libgcrypt no >> libgcrypt kdf no >> nettle no >> nettle kdf no >> libtasn1 no >> curses support yes >> virgl support no >> curl support yes >> mingw32 support no >> Audio drivers oss >> Block whitelist (rw) >> Block whitelist (ro) >> VirtFS support no >> VNC support yes >> VNC SASL support no >> VNC JPEG support no >> VNC PNG support no >> xen support no >> brlapi support no >> bluez support no >> Documentation no >> PIE no >> vde support no >> netmap support yes >> Linux AIO support no >> ATTR/XATTR support no >> Install blobs yes >> KVM support no >> HAX support no >> TCG support yes >> TCG debug enabled no >> TCG interpreter no >> RDMA support no >> fdt support no >> preadv support yes >> fdatasync no >> madvise yes >> posix_madvise yes >> libcap-ng support no >> vhost-net support no >> vhost-scsi support no >> vhost-vsock support no >> Trace backends log >> Hypertrace arguments 1 >> spice support no >> rbd support no >> xfsctl support no >> smartcard support no >> libusb yes >> usb net redir no >> OpenGL support no >> OpenGL dmabufs no >> libiscsi support no >> libnfs support no >> build guest agent yes >> QGA VSS support no >> QGA w32 disk info no >> QGA MSI support no >> seccomp support no >> coroutine backend ucontext >> coroutine pool yes >> debug stack usage no >> crypto afalg no >> GlusterFS support no >> gcov gcov >> gcov enabled no >> TPM support yes >> libssh2 support no >> TPM passthrough no >> QOM debugging yes >> Live block migration yes >> lzo support no >> snappy support no >> bzip2 support yes >> NUMA host support no >> tcmalloc support no >> jemalloc support no >> avx2 optimization no >> replication support yes >> VxHS block device no >> GEN x86_64-softmmu/config-devices.mak.tmp >> GEN config-host.h >> GEN qemu-options.def >> GEN qmp-commands.h >> GEN x86_64-softmmu/config-devices.mak >> GEN qapi-types.h >> GEN qapi-visit.h >> GEN qapi-event.h >> GEN qmp-marshal.c >> GEN qapi-types.c >> GEN qapi-visit.c >> GEN qapi-event.c >> GEN qmp-introspect.h >> GEN qmp-introspect.c >> GEN trace/generated-tcg-tracers.h >> GEN trace/generated-helpers-wrappers.h >> GEN trace/generated-helpers.h >> GEN trace/generated-helpers.c >> GEN module_block.h >> GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h >> GEN tests/test-qapi-types.h >> GEN tests/test-qapi-visit.h >> GEN tests/test-qmp-commands.h >> GEN tests/test-qapi-event.h >> GEN tests/test-qmp-introspect.h >> GEN trace-root.h >> GEN util/trace.h >> GEN crypto/trace.h >> GEN io/trace.h >> GEN migration/trace.h >> GEN block/trace.h >> GEN chardev/trace.h >> GEN hw/block/trace.h >> GEN hw/block/dataplane/trace.h >> GEN hw/char/trace.h >> GEN hw/intc/trace.h >> GEN hw/net/trace.h >> GEN hw/virtio/trace.h >> GEN hw/audio/trace.h >> GEN hw/misc/trace.h >> GEN hw/usb/trace.h >> GEN hw/scsi/trace.h >> GEN hw/nvram/trace.h >> GEN hw/display/trace.h >> GEN hw/input/trace.h >> GEN hw/timer/trace.h >> GEN hw/dma/trace.h >> GEN hw/sparc/trace.h >> GEN hw/sd/trace.h >> GEN hw/isa/trace.h >> GEN hw/mem/trace.h >> GEN hw/i386/trace.h >> GEN hw/i386/xen/trace.h >> GEN hw/9pfs/trace.h >> GEN hw/ppc/trace.h >> GEN hw/pci/trace.h >> GEN hw/s390x/trace.h >> GEN hw/vfio/trace.h >> GEN hw/acpi/trace.h >> GEN hw/arm/trace.h >> GEN hw/alpha/trace.h >> GEN hw/xen/trace.h >> GEN ui/trace.h >> GEN audio/trace.h >> GEN net/trace.h >> GEN target/arm/trace.h >> GEN target/i386/trace.h >> GEN target/mips/trace.h >> GEN target/sparc/trace.h >> GEN target/s390x/trace.h >> GEN target/ppc/trace.h >> GEN qom/trace.h >> GEN linux-user/trace.h >> GEN qapi/trace.h >> GEN accel/tcg/trace.h >> GEN accel/kvm/trace.h >> GEN nbd/trace.h >> GEN trace-root.c >> GEN util/trace.c >> GEN crypto/trace.c >> GEN io/trace.c >> GEN migration/trace.c >> GEN block/trace.c >> GEN chardev/trace.c >> GEN hw/block/trace.c >> GEN hw/block/dataplane/trace.c >> GEN hw/char/trace.c >> GEN hw/intc/trace.c >> GEN hw/net/trace.c >> GEN hw/virtio/trace.c >> GEN hw/audio/trace.c >> GEN hw/misc/trace.c >> GEN hw/usb/trace.c >> GEN hw/scsi/trace.c >> GEN hw/nvram/trace.c >> GEN hw/display/trace.c >> GEN hw/input/trace.c >> GEN hw/timer/trace.c >> GEN hw/dma/trace.c >> GEN hw/sparc/trace.c >> GEN hw/sd/trace.c >> GEN hw/isa/trace.c >> GEN hw/mem/trace.c >> GEN hw/i386/trace.c >> GEN hw/i386/xen/trace.c >> GEN hw/9pfs/trace.c >> GEN hw/ppc/trace.c >> GEN hw/pci/trace.c >> GEN hw/s390x/trace.c >> GEN hw/vfio/trace.c >> GEN hw/acpi/trace.c >> GEN hw/arm/trace.c >> GEN hw/alpha/trace.c >> GEN hw/xen/trace.c >> GEN ui/trace.c >> GEN audio/trace.c >> GEN net/trace.c >> GEN target/arm/trace.c >> GEN target/i386/trace.c >> GEN target/mips/trace.c >> GEN target/sparc/trace.c >> GEN target/s390x/trace.c >> GEN target/ppc/trace.c >> GEN qom/trace.c >> GEN linux-user/trace.c >> GEN qapi/trace.c >> GEN accel/tcg/trace.c >> GEN accel/kvm/trace.c >> GEN nbd/trace.c >> GEN config-all-devices.mak >> rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.h-timestamp >> GEN qga/qapi-generated/qga-qapi-types.h >> GEN qga/qapi-generated/qga-qapi-visit.h >> GEN qga/qapi-generated/qga-qmp-commands.h >> GEN qga/qapi-generated/qga-qapi-types.c >> GEN qga/qapi-generated/qga-qapi-visit.c >> GEN qga/qapi-generated/qga-qmp-marshal.c >> CC qmp-introspect.o >> CC qapi-types.o >> CC qapi-visit.o >> CC qapi-event.o >> CC qapi/qapi-visit-core.o >> CC qapi/qapi-dealloc-visitor.o >> CC qapi/qobject-input-visitor.o >> CC qapi/qobject-output-visitor.o >> CC qapi/qmp-registry.o >> CC qapi/qmp-dispatch.o >> CC qapi/string-input-visitor.o >> CC qapi/string-output-visitor.o >> CC qapi/opts-visitor.o >> CC qapi/qapi-clone-visitor.o >> CC qapi/qmp-event.o >> CC qapi/qapi-util.o >> CC qobject/qnull.o >> CC qobject/qnum.o >> CC qobject/qstring.o >> CC qobject/qdict.o >> CC qobject/qlist.o >> CC qobject/qbool.o >> CC qobject/qjson.o >> CC qobject/qobject.o >> CC qobject/json-lexer.o >> CC qobject/json-streamer.o >> CC qobject/json-parser.o >> CC trace/control.o >> CC trace/qmp.o >> CC util/osdep.o >> CC util/cutils.o >> CC util/unicode.o >> CC util/qemu-timer-common.o >> CC util/bufferiszero.o >> CC util/lockcnt.o >> CC util/aiocb.o >> CC util/async.o >> CC util/thread-pool.o >> CC util/qemu-timer.o >> CC util/main-loop.o >> CC util/iohandler.o >> CC util/aio-posix.o >> CC util/compatfd.o >> CC util/event_notifier-posix.o >> CC util/mmap-alloc.o >> CC util/oslib-posix.o >> CC util/qemu-openpty.o >> CC util/qemu-thread-posix.o >> CC util/memfd.o >> CC util/envlist.o >> CC util/path.o >> CC util/module.o >> CC util/host-utils.o >> CC util/bitmap.o >> CC util/bitops.o >> CC util/hbitmap.o >> CC util/fifo8.o >> CC util/acl.o >> CC util/cacheinfo.o >> CC util/error.o >> CC util/qemu-error.o >> CC util/id.o >> CC util/iov.o >> CC util/qemu-config.o >> CC util/qemu-sockets.o >> CC util/uri.o >> CC util/notify.o >> CC util/qemu-option.o >> CC util/qemu-progress.o >> CC util/keyval.o >> CC util/hexdump.o >> CC util/crc32c.o >> CC util/uuid.o >> CC util/throttle.o >> CC util/getauxval.o >> CC util/readline.o >> CC util/rcu.o >> CC util/qemu-coroutine.o >> CC util/qemu-coroutine-lock.o >> CC util/qemu-coroutine-io.o >> CC util/qemu-coroutine-sleep.o >> CC util/coroutine-ucontext.o >> CC util/buffer.o >> CC util/timed-average.o >> CC util/base64.o >> CC util/log.o >> CC util/qdist.o >> CC util/qht.o >> CC util/range.o >> CC util/stats64.o >> CC util/systemd.o >> CC trace-root.o >> CC util/trace.o >> CC crypto/trace.o >> CC io/trace.o >> CC migration/trace.o >> CC block/trace.o >> CC chardev/trace.o >> CC hw/block/trace.o >> CC hw/block/dataplane/trace.o >> CC hw/char/trace.o >> CC hw/intc/trace.o >> CC hw/net/trace.o >> CC hw/virtio/trace.o >> CC hw/audio/trace.o >> CC hw/misc/trace.o >> CC hw/usb/trace.o >> CC hw/scsi/trace.o >> CC hw/nvram/trace.o >> CC hw/display/trace.o >> CC hw/input/trace.o >> CC hw/timer/trace.o >> CC hw/dma/trace.o >> CC hw/sparc/trace.o >> CC hw/sd/trace.o >> CC hw/isa/trace.o >> CC hw/mem/trace.o >> CC hw/i386/trace.o >> CC hw/i386/xen/trace.o >> CC hw/9pfs/trace.o >> CC hw/ppc/trace.o >> CC hw/pci/trace.o >> CC hw/s390x/trace.o >> CC hw/vfio/trace.o >> CC hw/acpi/trace.o >> CC hw/arm/trace.o >> CC hw/alpha/trace.o >> CC hw/xen/trace.o >> CC ui/trace.o >> CC audio/trace.o >> CC net/trace.o >> CC target/arm/trace.o >> CC target/i386/trace.o >> CC target/mips/trace.o >> CC target/sparc/trace.o >> CC target/s390x/trace.o >> CC target/ppc/trace.o >> CC qom/trace.o >> CC linux-user/trace.o >> CC qapi/trace.o >> CC accel/tcg/trace.o >> CC accel/kvm/trace.o >> CC nbd/trace.o >> GEN /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c >> CC crypto/pbkdf-stub.o >> CC stubs/arch-query-cpu-def.o >> CC stubs/arch-query-cpu-model-expansion.o >> CC stubs/arch-query-cpu-model-comparison.o >> CC stubs/arch-query-cpu-model-baseline.o >> CC stubs/bdrv-next-monitor-owned.o >> CC stubs/blk-commit-all.o >> CC stubs/blockdev-close-all-bdrv-states.o >> CC stubs/clock-warp.o >> CC stubs/cpu-get-clock.o >> CC stubs/cpu-get-icount.o >> CC stubs/dump.o >> CC stubs/error-printf.o >> CC stubs/fdset.o >> CC stubs/gdbstub.o >> CC stubs/get-vm-name.o >> CC stubs/iothread.o >> CC stubs/iothread-lock.o >> CC stubs/is-daemonized.o >> CC stubs/machine-init-done.o >> CC stubs/migr-blocker.o >> CC stubs/monitor.o >> CC stubs/notify-event.o >> CC stubs/qtest.o >> CC stubs/replay.o >> CC stubs/runstate-check.o >> CC stubs/set-fd-handler.o >> CC stubs/slirp.o >> CC stubs/sysbus.o >> CC stubs/trace-control.o >> CC stubs/uuid.o >> CC stubs/vm-stop.o >> CC stubs/vmstate.o >> CC stubs/qmp_pc_dimm_device_list.o >> CC stubs/target-monitor-defs.o >> CC stubs/target-get-monitor-def.o >> CC stubs/pc_madt_cpu_entry.o >> CC stubs/vmgenid.o >> CC stubs/xen-common.o >> CC stubs/xen-hvm.o >> CC qemu-nbd.o >> CC block.o >> CC blockjob.o >> CC qemu-io-cmds.o >> CC replication.o >> CC block/raw-format.o >> CC block/qcow.o >> CC block/vdi.o >> CC block/vmdk.o >> CC block/cloop.o >> CC block/bochs.o >> CC block/vpc.o >> CC block/vvfat.o >> CC block/dmg.o >> CC block/qcow2.o >> CC block/qcow2-refcount.o >> CC block/qcow2-cluster.o >> CC block/qcow2-snapshot.o >> CC block/qcow2-cache.o >> CC block/qcow2-bitmap.o >> CC block/qed.o >> CC block/qed-l2-cache.o >> CC block/qed-table.o >> CC block/qed-cluster.o >> CC block/qed-check.o >> CC block/vhdx.o >> CC block/vhdx-endian.o >> CC block/vhdx-log.o >> CC block/quorum.o >> CC block/parallels.o >> CC block/blkdebug.o >> CC block/blkverify.o >> CC block/blkreplay.o >> CC block/block-backend.o >> CC block/snapshot.o >> CC block/qapi.o >> CC block/file-posix.o >> CC block/null.o >> CC block/mirror.o >> CC block/commit.o >> CC block/io.o >> CC block/throttle-groups.o >> CC block/nbd.o >> CC block/nbd-client.o >> CC block/sheepdog.o >> CC block/accounting.o >> CC block/dirty-bitmap.o >> CC block/write-threshold.o >> CC block/backup.o >> CC block/replication.o >> CC block/crypto.o >> CC nbd/server.o >> CC nbd/client.o >> CC nbd/common.o >> CC block/curl.o >> CC block/dmg-bz2.o >> CC crypto/init.o >> CC crypto/hash.o >> CC crypto/hash-glib.o >> CC crypto/hmac-glib.o >> CC crypto/hmac.o >> CC crypto/aes.o >> CC crypto/desrfb.o >> CC crypto/cipher.o >> CC crypto/tlscreds.o >> CC crypto/tlscredsanon.o >> CC crypto/tlscredsx509.o >> CC crypto/tlssession.o >> CC crypto/secret.o >> CC crypto/random-platform.o >> CC crypto/pbkdf.o >> CC crypto/ivgen.o >> CC crypto/ivgen-essiv.o >> CC crypto/ivgen-plain.o >> CC crypto/afsplit.o >> CC crypto/ivgen-plain64.o >> CC crypto/xts.o >> CC crypto/block.o >> CC crypto/block-qcow.o >> CC crypto/block-luks.o >> CC io/channel.o >> CC io/channel-buffer.o >> CC io/channel-command.o >> CC io/channel-file.o >> CC io/channel-socket.o >> CC io/channel-tls.o >> CC io/channel-watch.o >> CC io/channel-websock.o >> CC io/channel-util.o >> CC io/dns-resolver.o >> CC io/task.o >> CC qom/object.o >> CC qom/container.o >> CC qom/qom-qobject.o >> CC qom/object_interfaces.o >> GEN qemu-img-cmds.h >> CC qemu-io.o >> CC blockdev.o >> CC blockdev-nbd.o >> CC bootdevice.o >> CC iothread.o >> CC qdev-monitor.o >> CC device-hotplug.o >> CC os-posix.o >> CC bt-host.o >> CC bt-vhci.o >> CC dma-helpers.o >> CC vl.o >> CC tpm.o >> CC qmp-marshal.o >> CC qmp.o >> CC hmp.o >> CC cpus-common.o >> CC audio/audio.o >> CC audio/noaudio.o >> CC audio/wavaudio.o >> CC audio/mixeng.o >> CC audio/ossaudio.o >> CC audio/wavcapture.o >> CC backends/rng.o >> CC backends/rng-egd.o >> CC backends/rng-random.o >> CC backends/tpm.o >> CC backends/hostmem.o >> CC backends/hostmem-ram.o >> CC backends/cryptodev.o >> CC backends/cryptodev-builtin.o >> CC block/stream.o >> CC chardev/msmouse.o >> CC chardev/wctablet.o >> CC chardev/testdev.o >> CC disas/i386.o >> CC hw/acpi/core.o >> CC hw/acpi/piix4.o >> CC hw/acpi/pcihp.o >> CC hw/acpi/ich9.o >> CC hw/acpi/tco.o >> CC hw/acpi/cpu_hotplug.o >> CC hw/acpi/memory_hotplug.o >> CC hw/acpi/cpu.o >> CC hw/acpi/nvdimm.o >> CC hw/acpi/vmgenid.o >> CC hw/acpi/acpi_interface.o >> CC hw/acpi/bios-linker-loader.o >> CC hw/acpi/aml-build.o >> CC hw/acpi/ipmi.o >> CC hw/acpi/acpi-stub.o >> CC hw/acpi/ipmi-stub.o >> CC hw/audio/sb16.o >> CC hw/audio/es1370.o >> CC hw/audio/ac97.o >> CC hw/audio/fmopl.o >> CC hw/audio/adlib.o >> CC hw/audio/gus.o >> CC hw/audio/gusemu_hal.o >> CC hw/audio/gusemu_mixer.o >> CC hw/audio/cs4231a.o >> CC hw/audio/intel-hda.o >> CC hw/audio/hda-codec.o >> CC hw/audio/pcspk.o >> CC hw/audio/soundhw.o >> CC hw/block/block.o >> CC hw/block/cdrom.o >> CC hw/block/hd-geometry.o >> CC hw/block/fdc.o >> CC hw/block/pflash_cfi01.o >> CC hw/block/nvme.o >> CC hw/bt/core.o >> CC hw/bt/l2cap.o >> CC hw/bt/sdp.o >> CC hw/bt/hid.o >> CC hw/bt/hci.o >> CC hw/bt/hci-csr.o >> CC hw/char/ipoctal232.o >> CC hw/char/parallel.o >> CC hw/char/serial.o >> CC hw/char/serial-isa.o >> CC hw/char/serial-pci.o >> CC hw/char/virtio-console.o >> CC hw/char/debugcon.o >> CC hw/core/qdev.o >> CC hw/core/qdev-properties.o >> CC hw/core/bus.o >> CC hw/core/reset.o >> CC hw/core/fw-path-provider.o >> CC hw/core/irq.o >> CC hw/core/hotplug.o >> CC hw/core/nmi.o >> CC hw/core/sysbus.o >> CC hw/core/machine.o >> CC hw/core/loader.o >> CC hw/core/qdev-properties-system.o >> CC hw/core/register.o >> CC hw/core/or-irq.o >> CC hw/cpu/core.o >> CC hw/display/cirrus_vga.o >> CC hw/display/vga-pci.o >> CC hw/display/vga-isa.o >> CC hw/display/vmware_vga.o >> CC hw/dma/i8257.o >> CC hw/i2c/core.o >> CC hw/i2c/smbus.o >> CC hw/i2c/smbus_eeprom.o >> CC hw/i2c/smbus_ich9.o >> CC hw/i2c/pm_smbus.o >> CC hw/ide/core.o >> CC hw/ide/atapi.o >> CC hw/ide/qdev.o >> CC hw/ide/pci.o >> CC hw/ide/isa.o >> CC hw/ide/piix.o >> CC hw/ide/ahci.o >> CC hw/ide/ich.o >> CC hw/input/hid.o >> CC hw/input/pckbd.o >> CC hw/input/ps2.o >> CC hw/input/vmmouse.o >> CC hw/input/virtio-input.o >> CC hw/input/virtio-input-hid.o >> CC hw/intc/i8259_common.o >> CC hw/intc/i8259.o >> CC hw/intc/ioapic_common.o >> CC hw/intc/intc.o >> CC hw/ipack/ipack.o >> CC hw/ipack/tpci200.o >> CC hw/ipmi/ipmi.o >> CC hw/ipmi/ipmi_bmc_sim.o >> CC hw/ipmi/ipmi_bmc_extern.o >> CC hw/ipmi/isa_ipmi_kcs.o >> CC hw/ipmi/isa_ipmi_bt.o >> CC hw/isa/isa-bus.o >> CC hw/isa/apm.o >> CC hw/mem/pc-dimm.o >> CC hw/mem/nvdimm.o >> CC hw/misc/applesmc.o >> CC hw/misc/debugexit.o >> CC hw/misc/sga.o >> CC hw/misc/pc-testdev.o >> CC hw/misc/pci-testdev.o >> CC hw/misc/edu.o >> CC hw/misc/unimp.o >> CC hw/net/ne2000.o >> CC hw/net/eepro100.o >> CC hw/net/pcnet-pci.o >> CC hw/net/pcnet.o >> CC hw/net/e1000.o >> CC hw/net/e1000x_common.o >> CC hw/net/net_tx_pkt.o >> CC hw/net/net_rx_pkt.o >> CC hw/net/e1000e.o >> CC hw/net/e1000e_core.o >> CC hw/net/rtl8139.o >> CC hw/net/vmxnet3.o >> CC hw/net/ne2000-isa.o >> CC hw/net/rocker/rocker.o >> CC hw/net/rocker/rocker_fp.o >> CC hw/net/rocker/rocker_desc.o >> CC hw/net/rocker/rocker_world.o >> CC hw/net/rocker/rocker_of_dpa.o >> CC hw/nvram/eeprom93xx.o >> CC hw/nvram/fw_cfg.o >> CC hw/nvram/chrp_nvram.o >> CC hw/pci-bridge/pci_bridge_dev.o >> CC hw/pci-bridge/pcie_root_port.o >> CC hw/pci-bridge/gen_pcie_root_port.o >> CC hw/pci-bridge/pci_expander_bridge.o >> CC hw/pci-bridge/xio3130_upstream.o >> CC hw/pci-bridge/xio3130_downstream.o >> CC hw/pci-bridge/ioh3420.o >> CC hw/pci-bridge/i82801b11.o >> CC hw/pci-host/piix.o >> CC hw/pci-host/pam.o >> CC hw/pci-host/q35.o >> CC hw/pci/pci.o >> CC hw/pci/pci_bridge.o >> CC hw/pci/msix.o >> CC hw/pci/msi.o >> CC hw/pci/shpc.o >> CC hw/pci/slotid_cap.o >> CC hw/pci/pci_host.o >> CC hw/pci/pcie_host.o >> CC hw/pci/pcie.o >> CC hw/pci/pcie_aer.o >> CC hw/pci/pcie_port.o >> CC hw/pci/pci-stub.o >> CC hw/pcmcia/pcmcia.o >> CC hw/scsi/scsi-disk.o >> CC hw/scsi/scsi-generic.o >> CC hw/scsi/scsi-bus.o >> CC hw/scsi/lsi53c895a.o >> CC hw/scsi/mptsas.o >> CC hw/scsi/mptconfig.o >> CC hw/scsi/mptendian.o >> CC hw/scsi/megasas.o >> CC hw/scsi/vmw_pvscsi.o >> CC hw/scsi/esp.o >> CC hw/scsi/esp-pci.o >> CC hw/sd/sd.o >> CC hw/sd/core.o >> CC hw/sd/sdhci.o >> CC hw/smbios/smbios.o >> CC hw/smbios/smbios_type_38.o >> CC hw/smbios/smbios-stub.o >> CC hw/smbios/smbios_type_38-stub.o >> CC hw/timer/hpet.o >> CC hw/timer/i8254_common.o >> CC hw/timer/i8254.o >> CC hw/tpm/tpm_tis.o >> CC hw/usb/core.o >> CC hw/usb/combined-packet.o >> CC hw/usb/bus.o >> CC hw/usb/libhw.o >> CC hw/usb/desc.o >> CC hw/usb/desc-msos.o >> CC hw/usb/hcd-uhci.o >> CC hw/usb/hcd-ohci.o >> CC hw/usb/hcd-ehci.o >> CC hw/usb/hcd-ehci-pci.o >> CC hw/usb/hcd-xhci.o >> CC hw/usb/hcd-xhci-nec.o >> CC hw/usb/dev-hub.o >> CC hw/usb/dev-hid.o >> CC hw/usb/dev-wacom.o >> CC hw/usb/dev-storage.o >> CC hw/usb/dev-uas.o >> CC hw/usb/dev-audio.o >> CC hw/usb/dev-serial.o >> CC hw/usb/dev-network.o >> CC hw/usb/dev-bluetooth.o >> CC hw/usb/dev-smartcard-reader.o >> CC hw/usb/dev-mtp.o >> CC hw/usb/host-libusb.o >> CC hw/usb/host-legacy.o >> CC hw/virtio/virtio-rng.o >> CC hw/virtio/virtio-pci.o >> CC hw/virtio/virtio-bus.o >> CC hw/virtio/virtio-mmio.o >> CC hw/virtio/vhost-stub.o >> CC hw/watchdog/watchdog.o >> CC hw/watchdog/wdt_i6300esb.o >> CC hw/watchdog/wdt_ib700.o >> CC migration/migration.o >> CC migration/socket.o >> CC migration/fd.o >> CC migration/exec.o >> CC migration/tls.o >> CC migration/channel.o >> CC migration/savevm.o >> CC migration/colo-comm.o >> CC migration/colo.o >> CC migration/colo-failover.o >> CC migration/vmstate.o >> CC migration/vmstate-types.o >> CC migration/page_cache.o >> CC migration/qemu-file.o >> CC migration/global_state.o >> CC migration/qemu-file-channel.o >> CC migration/xbzrle.o >> CC migration/postcopy-ram.o >> CC migration/qjson.o >> CC migration/block.o >> CC net/net.o >> CC net/queue.o >> CC net/checksum.o >> CC net/util.o >> CC net/hub.o >> CC net/socket.o >> CC net/dump.o >> CC net/eth.o >> CC net/vhost-user.o >> CC net/slirp.o >> CC net/netmap.o >> CC net/filter.o >> CC net/filter-buffer.o >> CC net/filter-mirror.o >> CC net/colo-compare.o >> CC net/colo.o >> CC net/filter-rewriter.o >> CC net/filter-replay.o >> CC net/tap.o >> CC net/tap-bsd.o >> CC qom/cpu.o >> CC replay/replay.o >> CC replay/replay-internal.o >> CC replay/replay-events.o >> CC replay/replay-time.o >> CC replay/replay-input.o >> CC replay/replay-char.o >> CC replay/replay-snapshot.o >> CC replay/replay-net.o >> CC replay/replay-audio.o >> CC slirp/cksum.o >> CC slirp/if.o >> CC slirp/ip_icmp.o >> CC slirp/ip6_icmp.o >> CC slirp/ip6_input.o >> CC slirp/ip6_output.o >> CC slirp/ip_input.o >> CC slirp/ip_output.o >> CC slirp/dnssearch.o >> CC slirp/dhcpv6.o >> CC slirp/slirp.o >> CC slirp/mbuf.o >> CC slirp/misc.o >> CC slirp/sbuf.o >> CC slirp/socket.o >> CC slirp/tcp_input.o >> CC slirp/tcp_output.o >> CC slirp/tcp_subr.o >> CC slirp/tcp_timer.o >> CC slirp/udp.o >> CC slirp/udp6.o >> CC slirp/bootp.o >> CC slirp/tftp.o >> CC slirp/arp_table.o >> CC slirp/ndp_table.o >> CC slirp/ncsi.o >> CC ui/keymaps.o >> CC ui/console.o >> CC ui/cursor.o >> CC ui/qemu-pixman.o >> CC ui/input.o >> CC ui/input-keymap.o >> CC ui/input-legacy.o >> CC ui/curses.o >> CC ui/vnc.o >> CC ui/vnc-enc-zlib.o >> CC ui/vnc-enc-hextile.o >> CC ui/vnc-enc-tight.o >> CC ui/vnc-palette.o >> CC ui/vnc-enc-zrle.o >> CC ui/vnc-auth-vencrypt.o >> CC ui/vnc-ws.o >> CC ui/vnc-jobs.o >> CC chardev/char.o >> CC chardev/char-fd.o >> CC chardev/char-fe.o >> CC chardev/char-file.o >> CC chardev/char-io.o >> CC chardev/char-mux.o >> CC chardev/char-null.o >> CC chardev/char-parallel.o >> CC chardev/char-pipe.o >> CC chardev/char-pty.o >> CC chardev/char-ringbuf.o >> CC chardev/char-serial.o >> CC chardev/char-socket.o >> CC chardev/char-stdio.o >> CC chardev/char-udp.o >> AS optionrom/multiboot.o >> AS optionrom/linuxboot.o >> CC optionrom/linuxboot_dma.o >> AS optionrom/kvmvapic.o >> CC qga/commands.o >> CC qga/guest-agent-command-state.o >> BUILD optionrom/multiboot.img >> BUILD optionrom/linuxboot.img >> BUILD optionrom/kvmvapic.img >> BUILD optionrom/multiboot.raw >> BUILD optionrom/linuxboot.raw >> BUILD optionrom/linuxboot_dma.img >> CC qga/main.o >> CC qga/commands-posix.o >> BUILD optionrom/kvmvapic.raw >> SIGN optionrom/multiboot.bin >> SIGN optionrom/linuxboot.bin >> BUILD optionrom/linuxboot_dma.raw >> SIGN optionrom/kvmvapic.bin >> CC qga/channel-posix.o >> SIGN optionrom/linuxboot_dma.bin >> CC qga/qapi-generated/qga-qapi-types.o >> CC qga/qapi-generated/qga-qapi-visit.o >> CC qga/qapi-generated/qga-qmp-marshal.o >> AR libqemustub.a >> CC qemu-img.o >> CC /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.o >> AR libqemuutil.a >> LINK qemu-ga >> LINK qemu-nbd >> LINK qemu-io >> LINK qemu-img >> GEN x86_64-softmmu/hmp-commands.h >> GEN x86_64-softmmu/hmp-commands-info.h >> GEN x86_64-softmmu/config-target.h >> CC x86_64-softmmu/tcg/tcg-op.o >> CC x86_64-softmmu/exec.o >> CC x86_64-softmmu/tcg/tcg.o >> CC x86_64-softmmu/tcg/optimize.o >> CC x86_64-softmmu/tcg/tcg-common.o >> CC x86_64-softmmu/tcg/tcg-runtime.o >> CC x86_64-softmmu/fpu/softfloat.o >> CC x86_64-softmmu/disas.o >> GEN x86_64-softmmu/gdbstub-xml.c >> CC x86_64-softmmu/hax-stub.o >> CC x86_64-softmmu/arch_init.o >> CC x86_64-softmmu/cpus.o >> CC x86_64-softmmu/monitor.o >> CC x86_64-softmmu/gdbstub.o >> CC x86_64-softmmu/balloon.o >> CC x86_64-softmmu/ioport.o >> CC x86_64-softmmu/numa.o >> CC x86_64-softmmu/qtest.o >> CC x86_64-softmmu/memory.o >> CC x86_64-softmmu/memory_mapping.o >> CC x86_64-softmmu/dump.o >> CC x86_64-softmmu/migration/ram.o >> CC x86_64-softmmu/accel/accel.o >> CC x86_64-softmmu/accel/stubs/kvm-stub.o >> CC x86_64-softmmu/accel/tcg/tcg-all.o >> CC x86_64-softmmu/accel/tcg/cputlb.o >> CC x86_64-softmmu/accel/tcg/cpu-exec.o >> CC x86_64-softmmu/accel/tcg/cpu-exec-common.o >> CC x86_64-softmmu/accel/tcg/translate-all.o >> CC x86_64-softmmu/hw/block/virtio-blk.o >> CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o >> CC x86_64-softmmu/hw/char/virtio-serial-bus.o >> CC x86_64-softmmu/hw/core/generic-loader.o >> CC x86_64-softmmu/hw/core/null-machine.o >> CC x86_64-softmmu/hw/display/vga.o >> CC x86_64-softmmu/hw/display/virtio-gpu.o >> CC x86_64-softmmu/hw/display/virtio-gpu-3d.o >> CC x86_64-softmmu/hw/display/virtio-gpu-pci.o >> CC x86_64-softmmu/hw/display/virtio-vga.o >> CC x86_64-softmmu/hw/intc/apic.o >> CC x86_64-softmmu/hw/intc/apic_common.o >> CC x86_64-softmmu/hw/intc/ioapic.o >> CC x86_64-softmmu/hw/isa/lpc_ich9.o >> CC x86_64-softmmu/hw/misc/vmport.o >> CC x86_64-softmmu/hw/misc/pvpanic.o >> CC x86_64-softmmu/hw/misc/mmio_interface.o >> CC x86_64-softmmu/hw/net/virtio-net.o >> CC x86_64-softmmu/hw/net/vhost_net.o >> CC x86_64-softmmu/hw/scsi/virtio-scsi.o >> CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o >> CC x86_64-softmmu/hw/timer/mc146818rtc.o >> CC x86_64-softmmu/hw/virtio/virtio.o >> CC x86_64-softmmu/hw/virtio/virtio-balloon.o >> CC x86_64-softmmu/hw/virtio/virtio-crypto.o >> CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o >> CC x86_64-softmmu/hw/i386/multiboot.o >> CC x86_64-softmmu/hw/i386/pc.o >> CC x86_64-softmmu/hw/i386/pc_piix.o >> CC x86_64-softmmu/hw/i386/pc_q35.o >> CC x86_64-softmmu/hw/i386/pc_sysfw.o >> CC x86_64-softmmu/hw/i386/x86-iommu.o >> CC x86_64-softmmu/hw/i386/intel_iommu.o >> CC x86_64-softmmu/hw/i386/amd_iommu.o >> CC x86_64-softmmu/hw/i386/kvmvapic.o >> CC x86_64-softmmu/hw/i386/acpi-build.o >> CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o >> CC x86_64-softmmu/target/i386/helper.o >> CC x86_64-softmmu/target/i386/cpu.o >> CC x86_64-softmmu/target/i386/gdbstub.o >> CC x86_64-softmmu/target/i386/xsave_helper.o >> CC x86_64-softmmu/target/i386/translate.o >> CC x86_64-softmmu/target/i386/bpt_helper.o >> CC x86_64-softmmu/target/i386/cc_helper.o >> CC x86_64-softmmu/target/i386/excp_helper.o >> CC x86_64-softmmu/target/i386/fpu_helper.o >> CC x86_64-softmmu/target/i386/int_helper.o >> CC x86_64-softmmu/target/i386/mem_helper.o >> CC x86_64-softmmu/target/i386/misc_helper.o >> CC x86_64-softmmu/target/i386/mpx_helper.o >> CC x86_64-softmmu/target/i386/seg_helper.o >> CC x86_64-softmmu/target/i386/smm_helper.o >> CC x86_64-softmmu/target/i386/svm_helper.o >> CC x86_64-softmmu/target/i386/machine.o >> CC x86_64-softmmu/target/i386/arch_memory_mapping.o >> CC x86_64-softmmu/target/i386/arch_dump.o >> CC x86_64-softmmu/target/i386/monitor.o >> CC x86_64-softmmu/target/i386/kvm-stub.o >> GEN trace/generated-helpers.c >> CC x86_64-softmmu/trace/control-target.o >> CC x86_64-softmmu/gdbstub-xml.o >> CC x86_64-softmmu/hypertrace/softmmu.o >> CC x86_64-softmmu/hypertrace/common.o >> CC x86_64-softmmu/trace/generated-helpers.o >> In file included from /var/tmp/patchew-tester-tmp-eswc2rbf/src/hypertrace/common.c:42: >> ./hypertrace/emit.c:3:39: error: too many arguments to function call, expected 2, have 4 >> trace_guest_hypertrace(cpu, arg1, data[1-1], data[0-1]); >> ~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~ >> ../hypertrace/trace.h:28:1: note: 'trace_guest_hypertrace' declared here >> static inline void trace_guest_hypertrace(CPUState * __cpu, uint64_t arg1) >> ^ >> 1 error generated. >> gmake[1]: *** [/var/tmp/patchew-tester-tmp-eswc2rbf/src/rules.mak:66: hypertrace/common.o] Error 1 >> gmake[1]: *** Waiting for unfinished jobs.... >> gmake: *** [Makefile:329: subdir-x86_64-softmmu] Error 2 >> rm /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c-timestamp /var/tmp/patchew-tester-tmp-eswc2rbf/src/build/hypertrace/trace.c >> === OUTPUT END === >> Test command exited with code: 2 > Is there a BSD machine I can log into to check why is this failing? Nevermind, I easily found a disk image for FreeBSD. Sorry. Lluis ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (5 preceding siblings ...) 2017-07-30 11:49 ` [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply @ 2017-07-30 12:03 ` no-reply 2017-07-30 12:43 ` Lluís Vilanova 6 siblings, 1 reply; 11+ messages in thread From: no-reply @ 2017-07-30 12:03 UTC (permalink / raw) To: vilanova; +Cc: famz, qemu-devel, stefanha, lcapitulino Hi, This series seems to have some coding style problems. See output below for more information: Subject: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Message-id: 150141363372.9857.9055094189388759132.stgit@frigg.lan Type: series === TEST SCRIPT BEGIN === #!/bin/bash BASE=base n=1 total=$(git log --oneline $BASE.. | wc -l) failed=0 git config --local diff.renamelimit 0 git config --local diff.renames True commits="$(git log --format=%H --reverse $BASE..)" for c in $commits; do echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..." if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then failed=1 echo fi n=$((n+1)) done exit $failed === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu * [new tag] patchew/1501444898-27668-1-git-send-email-peng.hao2@zte.com.cn -> patchew/1501444898-27668-1-git-send-email-peng.hao2@zte.com.cn Switched to a new branch 'test' 5dad7c93de hypertrace: Add guest-side user-level library dcf9d9c7c7 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 4c041f724d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 73796a3885 hypertrace: Add tracing event "guest_hypertrace" 43fe7e2e2e hypertrace: Add documentation === OUTPUT BEGIN === Checking PATCH 1/5: hypertrace: Add documentation... Checking PATCH 2/5: hypertrace: Add tracing event "guest_hypertrace"... Checking PATCH 3/5: hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event... Checking PATCH 4/5: hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event... Checking PATCH 5/5: hypertrace: Add guest-side user-level library... WARNING: architecture specific defines should be avoided #171: FILE: hypertrace/guest/common.c:84: +#if !defined(CONFIG_USER_ONLY) && defined(__linux__) ERROR: consider using qemu_strtoull in preference to strtoull #191: FILE: hypertrace/guest/common.c:104: + uint64_t vv = strtoull(v, &res, 16); total: 1 errors, 1 warnings, 432 lines checked Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. === OUTPUT END === Test command exited with code: 1 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-30 12:03 ` no-reply @ 2017-07-30 12:43 ` Lluís Vilanova 0 siblings, 0 replies; 11+ messages in thread From: Lluís Vilanova @ 2017-07-30 12:43 UTC (permalink / raw) To: no-reply; +Cc: qemu-devel, famz, stefanha, lcapitulino no-reply writes: > Hi, > This series seems to have some coding style problems. See output below for > more information: > Subject: [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel > Message-id: 150141363372.9857.9055094189388759132.stgit@frigg.lan > Type: series > === TEST SCRIPT BEGIN === > #!/bin/bash > BASE=base > n=1 > total=$(git log --oneline $BASE.. | wc -l) > failed=0 > git config --local diff.renamelimit 0 > git config --local diff.renames True > commits="$(git log --format=%H --reverse $BASE..)" > for c in $commits; do > echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..." > if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then > failed=1 > echo > fi > n=$((n+1)) > done > exit $failed > === TEST SCRIPT END === > Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 > From https://github.com/patchew-project/qemu > * [new tag] patchew/1501444898-27668-1-git-send-email-peng.hao2@zte.com.cn -> patchew/1501444898-27668-1-git-send-email-peng.hao2@zte.com.cn > Switched to a new branch 'test' > 5dad7c93de hypertrace: Add guest-side user-level library > dcf9d9c7c7 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event > 4c041f724d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event > 73796a3885 hypertrace: Add tracing event "guest_hypertrace" > 43fe7e2e2e hypertrace: Add documentation > === OUTPUT BEGIN === > Checking PATCH 1/5: hypertrace: Add documentation... > Checking PATCH 2/5: hypertrace: Add tracing event "guest_hypertrace"... > Checking PATCH 3/5: hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event... > Checking PATCH 4/5: hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event... > Checking PATCH 5/5: hypertrace: Add guest-side user-level library... > WARNING: architecture specific defines should be avoided > #171: FILE: hypertrace/guest/common.c:84: > +#if !defined(CONFIG_USER_ONLY) && defined(__linux__) > ERROR: consider using qemu_strtoull in preference to strtoull > #191: FILE: hypertrace/guest/common.c:104: > + uint64_t vv = strtoull(v, &res, 16); > total: 1 errors, 1 warnings, 432 lines checked > Your patch has style problems, please review. If any of these errors > are false positives report them to the maintainer, see > CHECKPATCH in MAINTAINERS. > === OUTPUT END === > Test command exited with code: 1 I think both are false positives for this specific case. Cheers, Lluis ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-07-30 12:48 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-30 11:20 [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-30 11:24 ` [Qemu-devel] [PATCH v7 1/5] hypertrace: Add documentation Lluís Vilanova 2017-07-30 11:28 ` [Qemu-devel] [PATCH v7 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova 2017-07-30 11:32 ` [Qemu-devel] [PATCH v7 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova 2017-07-30 11:36 ` [Qemu-devel] [PATCH v7 4/5] hypertrace: [softmmu] " Lluís Vilanova 2017-07-30 11:40 ` [Qemu-devel] [PATCH v7 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova 2017-07-30 11:49 ` [Qemu-devel] [PATCH v7 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply 2017-07-30 12:44 ` Lluís Vilanova 2017-07-30 12:48 ` Lluís Vilanova 2017-07-30 12:03 ` no-reply 2017-07-30 12:43 ` Lluís Vilanova
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.