* [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel @ 2017-07-26 16:48 Lluís Vilanova 2017-07-26 16:52 ` [Qemu-devel] [PATCH v5 1/5] hypertrace: Add documentation Lluís Vilanova ` (6 more replies) 0 siblings, 7 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 16:48 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 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 | 12 + 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 | 235 ++++++++++++++++++++ hypertrace/user.c | 414 ++++++++++++++++++++++++++++++++++++ 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 ++- trace-events | 11 + 25 files changed, 1651 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] 8+ messages in thread
* [Qemu-devel] [PATCH v5 1/5] hypertrace: Add documentation 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova @ 2017-07-26 16:52 ` Lluís Vilanova 2017-07-26 16:56 ` [Qemu-devel] [PATCH v5 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova ` (5 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 16:52 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] 8+ messages in thread
* [Qemu-devel] [PATCH v5 2/5] hypertrace: Add tracing event "guest_hypertrace" 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-26 16:52 ` [Qemu-devel] [PATCH v5 1/5] hypertrace: Add documentation Lluís Vilanova @ 2017-07-26 16:56 ` Lluís Vilanova 2017-07-26 17:00 ` [Qemu-devel] [PATCH v5 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova ` (4 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 16:56 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 | 7 ++++--- Makefile.objs | 2 ++ configure | 34 ++++++++++++++++++++++++++++++++++ trace-events | 11 +++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 38814f9a61..d45158cf29 100644 --- a/Makefile +++ b/Makefile @@ -83,7 +83,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 +92,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 +101,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 +534,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/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] 8+ messages in thread
* [Qemu-devel] [PATCH v5 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-26 16:52 ` [Qemu-devel] [PATCH v5 1/5] hypertrace: Add documentation Lluís Vilanova 2017-07-26 16:56 ` [Qemu-devel] [PATCH v5 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova @ 2017-07-26 17:00 ` Lluís Vilanova 2017-07-26 17:04 ` [Qemu-devel] [PATCH v5 4/5] hypertrace: [softmmu] " Lluís Vilanova ` (3 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 17:00 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 | 414 ++++++++++++++++++++++++++++++++++++++++++++++ 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, 713 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..f9f0ac0673 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\n", 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..2bda105c2f --- /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 $$(( $(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..af1b8ef26e --- /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) + /* We need 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..72717f9357 --- /dev/null +++ b/hypertrace/user.c @@ -0,0 +1,414 @@ +/* + * 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..edfe190f61 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\n", 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] 8+ messages in thread
* [Qemu-devel] [PATCH v5 4/5] hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (2 preceding siblings ...) 2017-07-26 17:00 ` [Qemu-devel] [PATCH v5 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova @ 2017-07-26 17:04 ` Lluís Vilanova 2017-07-26 17:08 ` [Qemu-devel] [PATCH v5 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova ` (2 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 17:04 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 | 235 ++++++++++++++++++++++++++++++++++++++++++++++ include/hw/pci/pci.h | 2 3 files changed, 241 insertions(+) create mode 100644 hypertrace/softmmu.c diff --git a/hypertrace/Makefile.objs b/hypertrace/Makefile.objs index 2bda105c2f..01c56c910c 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..8b98938e01 --- /dev/null +++ b/hypertrace/softmmu.c @@ -0,0 +1,235 @@ +/* + * 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); + } + + 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); + } + + 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] 8+ messages in thread
* [Qemu-devel] [PATCH v5 5/5] hypertrace: Add guest-side user-level library 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (3 preceding siblings ...) 2017-07-26 17:04 ` [Qemu-devel] [PATCH v5 4/5] hypertrace: [softmmu] " Lluís Vilanova @ 2017-07-26 17:08 ` Lluís Vilanova 2017-07-26 17:13 ` [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply 2017-07-26 17:13 ` no-reply 6 siblings, 0 replies; 8+ messages in thread From: Lluís Vilanova @ 2017-07-26 17:08 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 d45158cf29..f3a39b6c7c 100644 --- a/Makefile +++ b/Makefile @@ -601,8 +601,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] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (4 preceding siblings ...) 2017-07-26 17:08 ` [Qemu-devel] [PATCH v5 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova @ 2017-07-26 17:13 ` no-reply 2017-07-26 17:13 ` no-reply 6 siblings, 0 replies; 8+ messages in thread From: no-reply @ 2017-07-26 17:13 UTC (permalink / raw) To: vilanova; +Cc: famz, qemu-devel, stefanha, lcapitulino Hi, This series failed build test on s390x host. Please find the details below. Message-id: 150108770564.11502.9555409719195740021.stgit@frigg.lan Subject: [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Type: series === TEST SCRIPT BEGIN === #!/bin/bash # 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 ===" rpm -qa echo "=== TEST BEGIN ===" CC=$HOME/bin/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 make -j4 # XXX: we need reliable clean up # make check -j4 V=1 make install === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu * [new tag] patchew/150108770564.11502.9555409719195740021.stgit@frigg.lan -> patchew/150108770564.11502.9555409719195740021.stgit@frigg.lan Switched to a new branch 'test' 22e4769 hypertrace: Add guest-side user-level library e6d88a1 hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 11dbccc hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 3e587b3 hypertrace: Add tracing event "guest_hypertrace" 4f4b20a hypertrace: Add documentation === OUTPUT BEGIN === === ENV === XDG_SESSION_ID=167835 SHELL=/bin/sh USER=fam PATCHEW=/home/fam/patchew/patchew-cli -s http://patchew.org --nodebug PATH=/usr/bin:/bin PWD=/var/tmp/patchew-tester-tmp-88xjlrnz/src LANG=en_US.UTF-8 HOME=/home/fam SHLVL=2 LOGNAME=fam DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1012/bus XDG_RUNTIME_DIR=/run/user/1012 _=/usr/bin/env === PACKAGES === gpg-pubkey-873529b8-54e386ff xz-libs-5.2.2-2.fc24.s390x libxshmfence-1.2-3.fc24.s390x giflib-4.1.6-15.fc24.s390x trousers-lib-0.3.13-6.fc24.s390x ncurses-base-6.0-6.20160709.fc25.noarch gmp-6.1.1-1.fc25.s390x libidn-1.33-1.fc25.s390x slang-2.3.0-7.fc25.s390x pkgconfig-0.29.1-1.fc25.s390x alsa-lib-1.1.1-2.fc25.s390x yum-metadata-parser-1.1.4-17.fc25.s390x python3-slip-dbus-0.6.4-4.fc25.noarch python2-cssselect-0.9.2-1.fc25.noarch createrepo_c-libs-0.10.0-6.fc25.s390x initscripts-9.69-1.fc25.s390x parted-3.2-21.fc25.s390x flex-2.6.0-3.fc25.s390x colord-libs-1.3.4-1.fc25.s390x python-osbs-client-0.33-3.fc25.noarch perl-Pod-Simple-3.35-1.fc25.noarch python2-simplejson-3.10.0-1.fc25.s390x brltty-5.4-2.fc25.s390x librados2-10.2.4-2.fc25.s390x tcp_wrappers-7.6-83.fc25.s390x libcephfs_jni1-10.2.4-2.fc25.s390x nettle-devel-3.3-1.fc25.s390x bzip2-devel-1.0.6-21.fc25.s390x libuuid-2.28.2-2.fc25.s390x python3-dnf-1.1.10-6.fc25.noarch texlive-kpathsea-doc-svn41139-33.fc25.1.noarch openssh-7.4p1-4.fc25.s390x texlive-kpathsea-bin-svn40473-33.20160520.fc25.1.s390x texlive-graphics-svn41015-33.fc25.1.noarch texlive-dvipdfmx-def-svn40328-33.fc25.1.noarch texlive-mfware-svn40768-33.fc25.1.noarch texlive-texlive-scripts-svn41433-33.fc25.1.noarch texlive-euro-svn22191.1.1-33.fc25.1.noarch texlive-etex-svn37057.0-33.fc25.1.noarch texlive-iftex-svn29654.0.2-33.fc25.1.noarch texlive-palatino-svn31835.0-33.fc25.1.noarch texlive-texlive-docindex-svn41430-33.fc25.1.noarch texlive-xunicode-svn30466.0.981-33.fc25.1.noarch texlive-koma-script-svn41508-33.fc25.1.noarch texlive-pst-grad-svn15878.1.06-33.fc25.1.noarch texlive-pst-blur-svn15878.2.0-33.fc25.1.noarch texlive-jknapltx-svn19440.0-33.fc25.1.noarch texinfo-6.1-4.fc25.s390x openssl-devel-1.0.2k-1.fc25.s390x gdk-pixbuf2-2.36.6-1.fc25.s390x nspr-4.14.0-2.fc25.s390x nss-softokn-freebl-3.30.2-1.0.fc25.s390x jansson-2.10-2.fc25.s390x fedora-repos-25-4.noarch python3-libs-3.5.3-6.fc25.s390x perl-Errno-1.25-387.fc25.s390x acl-2.2.52-13.fc25.s390x pcre2-utf16-10.23-8.fc25.s390x pango-1.40.5-1.fc25.s390x systemd-pam-231-17.fc25.s390x python2-gluster-3.10.4-1.fc25.s390x NetworkManager-libnm-1.4.4-5.fc25.s390x selinux-policy-3.13.1-225.18.fc25.noarch poppler-0.45.0-5.fc25.s390x ccache-3.3.4-1.fc25.s390x valgrind-3.12.0-9.fc25.s390x perl-open-1.10-387.fc25.noarch libaio-0.3.110-6.fc24.s390x libfontenc-1.1.3-3.fc24.s390x lzo-2.08-8.fc24.s390x isl-0.14-5.fc24.s390x libXau-1.0.8-6.fc24.s390x linux-atm-libs-2.5.1-14.fc24.s390x libXext-1.3.3-4.fc24.s390x libXxf86vm-1.1.4-3.fc24.s390x bison-3.0.4-4.fc24.s390x perl-srpm-macros-1-20.fc25.noarch gawk-4.1.3-8.fc25.s390x libwayland-client-1.12.0-1.fc25.s390x perl-Exporter-5.72-366.fc25.noarch perl-version-0.99.17-1.fc25.s390x fftw-libs-double-3.3.5-3.fc25.s390x libssh2-1.8.0-1.fc25.s390x ModemManager-glib-1.6.4-1.fc25.s390x newt-python3-0.52.19-2.fc25.s390x python-munch-2.0.4-3.fc25.noarch python-bugzilla-1.2.2-4.fc25.noarch libedit-3.1-16.20160618cvs.fc25.s390x createrepo_c-0.10.0-6.fc25.s390x device-mapper-multipath-libs-0.4.9-83.fc25.s390x yum-3.4.3-510.fc25.noarch dracut-config-rescue-044-78.fc25.s390x mozjs17-17.0.0-16.fc25.s390x libselinux-2.5-13.fc25.s390x libgo-devel-6.3.1-1.fc25.s390x python2-pyparsing-2.1.10-1.fc25.noarch cairo-gobject-1.14.8-1.fc25.s390x ethtool-4.8-1.fc25.s390x xorg-x11-proto-devel-7.7-20.fc25.noarch brlapi-0.6.5-2.fc25.s390x librados-devel-10.2.4-2.fc25.s390x libXinerama-devel-1.1.3-6.fc24.s390x lua-posix-33.3.1-3.fc25.s390x usbredir-devel-0.7.1-2.fc24.s390x libepoxy-1.4.1-1.fc25.s390x python3-dnf-plugins-core-0.1.21-5.fc25.noarch texlive-pdftex-doc-svn41149-33.fc25.1.noarch openssh-clients-7.4p1-4.fc25.s390x iptables-1.6.0-3.fc25.s390x texlive-texlive.infra-svn41280-33.fc25.1.noarch texlive-graphics-cfg-svn40269-33.fc25.1.noarch texlive-bibtex-svn40768-33.fc25.1.noarch texlive-mfware-bin-svn40473-33.20160520.fc25.1.s390x texlive-texlive-scripts-bin-svn29741.0-33.20160520.fc25.1.noarch texlive-sauerj-svn15878.0-33.fc25.1.noarch texlive-enctex-svn34957.0-33.fc25.1.noarch texlive-ifetex-svn24853.1.2-33.fc25.1.noarch texlive-ntgclass-svn15878.2.1a-33.fc25.1.noarch texlive-tex-gyre-math-svn41264-33.fc25.1.noarch texlive-bera-svn20031.0-33.fc25.1.noarch texlive-ms-svn29849.0-33.fc25.1.noarch texlive-pst-fill-svn15878.1.01-33.fc25.1.noarch texlive-ctable-svn38672-33.fc25.1.noarch texlive-extsizes-svn17263.1.4a-33.fc25.1.noarch texlive-collection-latexrecommended-svn35765.0-33.20160520.fc25.1.noarch perl-Filter-1.57-1.fc25.s390x krb5-workstation-1.14.4-7.fc25.s390x python2-rpm-macros-3-12.fc25.noarch libglvnd-egl-0.2.999-14.20170308git8e6e102.fc25.s390x libglvnd-opengl-0.2.999-14.20170308git8e6e102.fc25.s390x gdbm-1.13-1.fc25.s390x nss-util-3.30.2-1.0.fc25.s390x libcrypt-nss-2.24-9.fc25.s390x libtasn1-4.12-1.fc25.s390x fedora-release-25-2.noarch gdb-headless-7.12.1-48.fc25.s390x perl-macros-5.24.2-387.fc25.s390x sqlite-devel-3.14.2-2.fc25.s390x pcre-devel-8.41-1.fc25.s390x libX11-1.6.5-1.fc25.s390x coreutils-8.25-17.fc25.s390x python2-openidc-client-0-3.20170523git77cb3ee.fc25.noarch nss-sysinit-3.30.2-1.1.fc25.s390x systemtap-client-3.1-5.fc25.s390x nss-devel-3.30.2-1.1.fc25.s390x firewalld-0.4.4.5-1.fc25.noarch rpmlint-1.9-9.fc25.noarch system-python-3.5.3-6.fc25.s390x gpg-pubkey-efe550f5-5220ba41 gpg-pubkey-81b46521-55b3ca9a filesystem-3.2-37.fc24.s390x libffi-3.1-9.fc24.s390x keyutils-libs-1.5.9-8.fc24.s390x libnfnetlink-1.0.1-8.fc24.s390x libtheora-1.1.1-14.fc24.s390x xml-common-0.6.3-44.fc24.noarch autoconf-2.69-22.fc24.noarch libXt-1.1.5-3.fc24.s390x kbd-legacy-2.0.3-3.fc24.noarch ghostscript-fonts-5.50-35.fc24.noarch libXevie-1.0.3-11.fc24.s390x libcap-2.25-2.fc25.s390x mpfr-3.1.5-1.fc25.s390x perl-Carp-1.40-365.fc25.noarch libmnl-1.0.4-1.fc25.s390x perl-Unicode-EastAsianWidth-1.33-8.fc25.noarch libwayland-cursor-1.12.0-1.fc25.s390x python-krbV-1.0.90-12.fc25.s390x python2-urllib3-1.15.1-3.fc25.noarch fipscheck-1.4.1-11.fc25.s390x libndp-1.6-1.fc25.s390x gnupg2-2.1.13-2.fc25.s390x libXfixes-5.0.3-1.fc25.s390x adwaita-icon-theme-3.22.0-1.fc25.noarch dconf-0.26.0-1.fc25.s390x ncurses-devel-6.0-6.20160709.fc25.s390x dejagnu-1.6-1.fc25.noarch libstdc++-devel-6.3.1-1.fc25.s390x device-mapper-1.02.136-3.fc25.s390x subversion-1.9.5-1.fc25.s390x libtool-ltdl-2.4.6-13.fc25.s390x libevent-2.0.22-1.fc25.s390x atk-devel-2.22.0-1.fc25.s390x libev-4.24-1.fc25.s390x xorg-x11-fonts-Type1-7.5-16.fc24.noarch brlapi-devel-0.6.5-2.fc25.s390x pulseaudio-libs-10.0-2.fc25.s390x glib2-2.50.3-1.fc25.s390x python2-rpm-4.13.0.1-1.fc25.s390x dnf-1.1.10-6.fc25.noarch texlive-metafont-bin-svn40987-33.20160520.fc25.1.s390x texlive-xkeyval-svn35741.2.7a-33.fc25.1.noarch texlive-euler-svn17261.2.5-33.fc25.1.noarch texlive-mptopdf-svn41282-33.fc25.1.noarch texlive-wasy-svn35831.0-33.fc25.1.noarch texlive-avantgar-svn31835.0-33.fc25.1.noarch texlive-eurosym-svn17265.1.4_subrfix-33.fc25.1.noarch texlive-knuth-lib-svn35820.0-33.fc25.1.noarch texlive-parallel-svn15878.0-33.fc25.1.noarch texlive-texlive-msg-translations-svn41431-33.fc25.1.noarch texlive-latex-svn40218-33.fc25.1.noarch texlive-lualatex-math-svn40621-33.fc25.1.noarch texlive-auto-pst-pdf-svn23723.0.6-33.fc25.1.noarch texlive-powerdot-svn38984-33.fc25.1.noarch texlive-wasysym-svn15878.2.0-33.fc25.1.noarch ImageMagick-libs-6.9.3.0-6.fc25.s390x geoclue2-2.4.5-1.fc25.s390x perl-IO-Socket-IP-0.39-1.fc25.noarch python2-pyasn1-0.2.3-1.fc25.noarch libglvnd-0.2.999-14.20170308git8e6e102.fc25.s390x libglvnd-gles-0.2.999-14.20170308git8e6e102.fc25.s390x gdk-pixbuf2-devel-2.36.6-1.fc25.s390x at-spi2-core-devel-2.22.1-1.fc25.s390x libacl-2.2.52-13.fc25.s390x perl-libs-5.24.2-387.fc25.s390x mesa-libglapi-17.0.5-3.fc25.s390x kernel-headers-4.11.10-200.fc25.s390x p11-kit-devel-0.23.2-4.fc25.s390x python3-rpmconf-1.0.19-1.fc25.noarch sqlite-3.14.2-2.fc25.s390x pcre-utf32-8.41-1.fc25.s390x libX11-common-1.6.5-1.fc25.noarch coreutils-common-8.25-17.fc25.s390x mesa-libEGL-17.0.5-3.fc25.s390x nss-3.30.2-1.1.fc25.s390x systemtap-runtime-3.1-5.fc25.s390x NetworkManager-glib-1.4.4-5.fc25.s390x audit-2.7.7-1.fc25.s390x perl-Time-HiRes-1.9742-1.fc25.s390x libsolv-0.6.28-1.fc25.s390x gpg-pubkey-34ec9cba-54e38751 gpg-pubkey-030d5aed-55b577f0 basesystem-11-2.fc24.noarch libmpc-1.0.2-5.fc24.s390x libunistring-0.9.4-3.fc24.s390x libmodman-2.0.1-12.fc24.s390x lsscsi-0.28-3.fc24.s390x kbd-misc-2.0.3-3.fc24.noarch kmod-23-1.fc25.s390x newt-0.52.19-2.fc25.s390x perl-Text-Unidecode-1.27-3.fc25.noarch plymouth-core-libs-0.9.3-0.6.20160620git0e65b86c.fc25.s390x which-2.21-1.fc25.s390x python3-slip-0.6.4-4.fc25.noarch python3-systemd-232-1.fc25.s390x python-lockfile-0.11.0-4.fc25.noarch python2-requests-2.10.0-4.fc25.noarch libnghttp2-1.13.0-2.fc25.s390x python-urlgrabber-3.10.1-9.fc25.noarch iputils-20161105-1.fc25.s390x rest-0.8.0-1.fc25.s390x adwaita-cursor-theme-3.22.0-1.fc25.noarch authconfig-6.2.10-14.fc25.s390x automake-1.15-7.fc25.noarch shared-mime-info-1.8-1.fc25.s390x pigz-2.3.4-1.fc25.s390x device-mapper-libs-1.02.136-3.fc25.s390x dnsmasq-2.76-2.fc25.s390x fedora-packager-0.6.0.1-1.fc25.noarch gcc-c++-6.3.1-1.fc25.s390x libwebp-0.5.2-1.fc25.s390x boost-system-1.60.0-10.fc25.s390x libasyncns-0.8-10.fc24.s390x libXau-devel-1.0.8-6.fc24.s390x libverto-libev-0.2.6-6.fc24.s390x python3-html5lib-0.999-9.fc25.noarch ttmkfdir-3.0.9-48.fc24.s390x pulseaudio-libs-glib2-10.0-2.fc25.s390x wpa_supplicant-2.6-1.fc25.s390x texlive-lib-2016-33.20160520.fc25.s390x libXi-devel-1.7.9-1.fc25.s390x python3-distro-1.0.3-1.fc25.noarch rpm-plugin-systemd-inhibit-4.13.0.1-1.fc25.s390x texlive-texlive-common-doc-svn40682-33.fc25.1.noarch packagedb-cli-2.14.1-1.fc25.noarch texlive-metafont-svn40793-33.fc25.1.noarch texlive-tools-svn40934-33.fc25.1.noarch texlive-enumitem-svn24146.3.5.2-33.fc25.1.noarch texlive-mptopdf-bin-svn18674.0-33.20160520.fc25.1.noarch texlive-underscore-svn18261.0-33.fc25.1.noarch texlive-anysize-svn15878.0-33.fc25.1.noarch texlive-euenc-svn19795.0.1h-33.fc25.1.noarch texlive-kastrup-svn15878.0-33.fc25.1.noarch texlive-paralist-svn39247-33.fc25.1.noarch texlive-texlive-en-svn41185-33.fc25.1.noarch texlive-tipa-svn29349.1.3-33.fc25.1.noarch texlive-currfile-svn40725-33.fc25.1.noarch texlive-pst-node-svn40743-33.fc25.1.noarch texlive-pst-slpe-svn24391.1.31-33.fc25.1.noarch texlive-typehtml-svn17134.0-33.fc25.1.noarch SDL2-devel-2.0.5-3.fc25.s390x libcroco-0.6.11-3.fc25.s390x bluez-libs-devel-5.44-1.fc25.s390x kernel-4.10.8-200.fc25.s390x expat-2.2.1-1.fc25.s390x system-python-libs-3.5.3-6.fc25.s390x pcre2-10.23-8.fc25.s390x firewalld-filesystem-0.4.4.5-1.fc25.noarch pcre-cpp-8.41-1.fc25.s390x python3-firewall-0.4.4.5-1.fc25.noarch freetype-devel-2.6.5-9.fc25.s390x pcre-utf16-8.41-1.fc25.s390x linux-firmware-20170605-74.git37857004.fc25.noarch distribution-gpg-keys-1.12-1.fc25.noarch kernel-modules-4.11.10-200.fc25.s390x gnutls-devel-3.5.14-1.fc25.s390x systemtap-devel-3.1-5.fc25.s390x java-1.8.0-openjdk-1.8.0.131-1.b12.fc25.s390x polkit-0.113-8.fc25.s390x perl-SelfLoader-1.23-387.fc25.noarch libdb-utils-5.3.28-24.fc25.s390x fontpackages-filesystem-1.44-17.fc24.noarch groff-base-1.22.3-8.fc24.s390x ilmbase-2.2.0-5.fc24.s390x OpenEXR-libs-2.2.0-5.fc24.s390x hesiod-3.2.1-6.fc24.s390x sysfsutils-2.1.0-19.fc24.s390x ocaml-srpm-macros-2-4.fc24.noarch mailx-12.5-19.fc24.s390x ncurses-libs-6.0-6.20160709.fc25.s390x ipset-libs-6.29-1.fc25.s390x gmp-devel-6.1.1-1.fc25.s390x python-pip-8.1.2-2.fc25.noarch harfbuzz-1.3.2-1.fc25.s390x python2-iniparse-0.4-20.fc25.noarch python3-iniparse-0.4-20.fc25.noarch python3-kickstart-2.32-1.fc25.noarch perl-Net-SSLeay-1.78-1.fc25.s390x drpm-0.3.0-3.fc25.s390x glib-networking-2.50.0-1.fc25.s390x webkitgtk3-2.4.11-3.fc25.s390x libXaw-1.0.13-4.fc25.s390x xorg-x11-font-utils-7.5-32.fc25.s390x hardlink-1.1-1.fc25.s390x libcom_err-1.43.3-1.fc25.s390x python2-dateutil-2.6.0-1.fc25.noarch libXpm-3.5.12-1.fc25.s390x python2-smmap-2.0.1-1.fc25.noarch poppler-data-0.4.7-6.fc25.noarch librbd1-10.2.4-2.fc25.s390x perl-Digest-MD5-2.55-2.fc25.s390x wayland-protocols-devel-1.7-1.fc25.noarch texi2html-5.0-4.fc24.noarch libxkbcommon-0.7.1-1.fc25.s390x libuuid-devel-2.28.2-2.fc25.s390x libcacard-2.5.3-1.fc25.s390x libwmf-lite-0.2.8.4-50.fc25.s390x texlive-tetex-svn41059-33.fc25.1.noarch texlive-thumbpdf-svn34621.3.16-33.fc25.1.noarch texlive-carlisle-svn18258.0-33.fc25.1.noarch texlive-makeindex-bin-svn40473-33.20160520.fc25.1.s390x texlive-pdftex-svn41149-33.fc25.1.noarch texlive-csquotes-svn39538-33.fc25.1.noarch texlive-courier-svn35058.0-33.fc25.1.noarch texlive-helvetic-svn31835.0-33.fc25.1.noarch texlive-mfnfss-svn19410.0-33.fc25.1.noarch texlive-sepnum-svn20186.2.0-33.fc25.1.noarch texlive-utopia-svn15878.0-33.fc25.1.noarch texlive-luatexbase-svn38550-33.fc25.1.noarch texlive-pst-3d-svn17257.1.10-33.fc25.1.noarch texlive-latex-bin-bin-svn14050.0-33.20160520.fc25.1.noarch texlive-l3experimental-svn41163-33.fc25.1.noarch net-tools-2.0-0.40.20160329git.fc25.s390x perl-Pod-Perldoc-3.28-1.fc25.noarch openssl-1.0.2k-1.fc25.s390x man-pages-4.06-4.fc25.noarch python3-magic-5.29-4.fc25.noarch libxml2-2.9.4-2.fc25.s390x nss-softokn-3.30.2-1.0.fc25.s390x p11-kit-trust-0.23.2-4.fc25.s390x emacs-filesystem-25.2-2.fc25.noarch python3-dateutil-2.6.0-1.fc25.noarch perl-threads-shared-1.57-1.fc25.s390x libnotify-0.7.7-1.fc25.s390x unzip-6.0-32.fc25.s390x pango-devel-1.40.5-1.fc25.s390x libdrm-2.4.81-1.fc25.s390x python-beautifulsoup4-4.6.0-1.fc25.noarch libcurl-7.51.0-7.fc25.s390x dhcp-client-4.3.5-3.fc25.s390x python2-fedora-0.9.0-6.fc25.noarch emacs-25.2-2.fc25.s390x gdb-7.12.1-48.fc25.s390x expat-devel-2.2.1-1.fc25.s390x gpg-pubkey-95a43f54-5284415a dejavu-fonts-common-2.35-3.fc24.noarch libSM-1.2.2-4.fc24.s390x diffutils-3.3-13.fc24.s390x libogg-1.3.2-5.fc24.s390x hunspell-en-US-0.20140811.1-5.fc24.noarch libdaemon-0.14-10.fc24.s390x patch-2.7.5-3.fc24.s390x libsysfs-2.1.0-19.fc24.s390x procmail-3.22-39.fc24.s390x libXdamage-1.1.4-8.fc24.s390x libotf-0.9.13-7.fc24.s390x urw-fonts-2.4-22.fc24.noarch crontabs-1.11-12.20150630git.fc24.noarch ppp-2.4.7-9.fc24.s390x cyrus-sasl-2.1.26-26.2.fc24.s390x zlib-devel-1.2.8-10.fc24.s390x time-1.7-49.fc24.s390x gpg-pubkey-fdb19c98-56fd6333 libcap-ng-0.7.8-1.fc25.s390x binutils-2.26.1-1.fc25.s390x lcms2-2.8-2.fc25.s390x libcomps-0.1.7-5.fc25.s390x apr-1.5.2-4.fc25.s390x perl-constant-1.33-367.fc25.noarch perl-Data-Dumper-2.161-1.fc25.s390x ipcalc-0.1.8-1.fc25.s390x gmp-c++-6.1.1-1.fc25.s390x fontconfig-2.12.1-1.fc25.s390x enchant-1.6.0-14.fc25.s390x pyliblzma-0.5.3-16.fc25.s390x libsepol-devel-2.5-10.fc25.s390x python3-ordered-set-2.0.0-4.fc25.noarch python-ipaddress-1.0.16-3.fc25.noarch python2-kerberos-1.2.5-1.fc25.s390x python2-pysocks-1.5.6-5.fc25.noarch fipscheck-lib-1.4.1-11.fc25.s390x libatomic_ops-7.4.4-1.fc25.s390x net-snmp-agent-libs-5.7.3-13.fc25.s390x dracut-044-78.fc25.s390x python2-pygpgme-0.3-18.fc25.s390x orc-0.4.26-1.fc25.s390x yum-utils-1.1.31-511.fc25.noarch libXrender-0.9.10-1.fc25.s390x libXrandr-1.5.1-1.fc25.s390x go-srpm-macros-2-7.fc25.noarch gnupg2-smime-2.1.13-2.fc25.s390x guile-devel-2.0.13-1.fc25.s390x uboot-tools-2016.09.01-2.fc25.s390x pykickstart-2.32-1.fc25.noarch python-bunch-1.0.1-9.fc25.noarch perl-generators-1.10-1.fc25.noarch perl-Mozilla-CA-20160104-3.fc25.noarch bzip2-libs-1.0.6-21.fc25.s390x libpng-1.6.27-1.fc25.s390x desktop-file-utils-0.23-2.fc25.s390x python2-cccolutils-1.4-1.fc25.s390x python2-lxml-3.7.2-1.fc25.s390x redhat-rpm-config-45-1.fc25.noarch device-mapper-event-libs-1.02.136-3.fc25.s390x lvm2-libs-2.02.167-3.fc25.s390x python2-gitdb-2.0.0-1.fc25.noarch gcc-gfortran-6.3.1-1.fc25.s390x libselinux-python-2.5-13.fc25.s390x openjpeg2-2.1.2-3.fc25.s390x boost-thread-1.60.0-10.fc25.s390x librbd-devel-10.2.4-2.fc25.s390x libXcursor-devel-1.1.14-6.fc24.s390x latex2html-2012-7.fc24.noarch lksctp-tools-1.0.16-5.fc24.s390x libfdt-1.4.2-1.fc25.s390x libXft-devel-2.3.2-4.fc24.s390x libattr-devel-2.4.47-16.fc24.s390x libiscsi-devel-1.15.0-2.fc24.s390x gettext-0.19.8.1-3.fc25.s390x libjpeg-turbo-devel-1.5.1-0.fc25.s390x pulseaudio-libs-devel-10.0-2.fc25.s390x libepoxy-devel-1.4.1-1.fc25.s390x krb5-libs-1.14.4-7.fc25.s390x libmount-2.28.2-2.fc25.s390x python3-decorator-4.0.11-1.fc25.noarch rpm-plugin-selinux-4.13.0.1-1.fc25.s390x tzdata-java-2017b-1.fc25.noarch python-srpm-macros-3-12.fc25.noarch libsmartcols-2.28.2-2.fc25.s390x kernel-core-4.10.5-200.fc25.s390x kernel-modules-4.10.5-200.fc25.s390x texlive-kpathsea-svn41139-33.fc25.1.noarch texlive-amsmath-svn41561-33.fc25.1.noarch texlive-thumbpdf-bin-svn6898.0-33.20160520.fc25.1.noarch texlive-psnfss-svn33946.9.2a-33.fc25.1.noarch texlive-subfig-svn15878.1.3-33.fc25.1.noarch texlive-fancybox-svn18304.1.4-33.fc25.1.noarch texlive-lua-alt-getopt-svn29349.0.7.0-33.fc25.1.noarch texlive-natbib-svn20668.8.31b-33.fc25.1.noarch texlive-pdftex-bin-svn40987-33.20160520.fc25.1.s390x texlive-xdvi-svn40768-33.fc25.1.noarch texlive-crop-svn15878.1.5-33.fc25.1.noarch texlive-babel-english-svn30264.3.3p-33.fc25.1.noarch texlive-cmextra-svn32831.0-33.fc25.1.noarch texlive-fancyhdr-svn15878.3.1-33.fc25.1.noarch texlive-luatex-svn40963-33.fc25.1.noarch texlive-knuth-local-svn38627-33.fc25.1.noarch texlive-mflogo-font-svn36898.1.002-33.fc25.1.noarch texlive-parskip-svn19963.2.0-33.fc25.1.noarch texlive-section-svn20180.0-33.fc25.1.noarch texlive-textcase-svn15878.0-33.fc25.1.noarch texlive-updmap-map-svn41159-33.fc25.1.noarch texlive-attachfile-svn38830-33.fc25.1.noarch libglvnd-glx-0.2.999-14.20170308git8e6e102.fc25.s390x libglvnd-core-devel-0.2.999-14.20170308git8e6e102.fc25.s390x python-magic-5.29-4.fc25.noarch glibc-common-2.24-9.fc25.s390x sqlite-libs-3.14.2-2.fc25.s390x libtiff-4.0.8-1.fc25.s390x libdb-5.3.28-24.fc25.s390x glusterfs-client-xlators-3.10.4-1.fc25.s390x nss-util-devel-3.30.2-1.0.fc25.s390x gnutls-3.5.14-1.fc25.s390x bind-license-9.10.5-2.P2.fc25.noarch mesa-libGLES-17.0.5-3.fc25.s390x python3-requests-kerberos-0.10.0-2.fc25.noarch python3-pyOpenSSL-16.2.0-1.fc25.noarch perl-threads-2.16-1.fc25.s390x cryptsetup-libs-1.7.5-1.fc25.s390x vim-minimal-8.0.705-1.fc25.s390x netpbm-10.79.00-1.fc25.s390x qrencode-libs-3.4.4-1.fc25.s390x mariadb-config-10.1.24-3.fc25.s390x gstreamer1-plugins-base-1.10.5-1.fc25.s390x elfutils-default-yama-scope-0.169-1.fc25.noarch glusterfs-3.10.4-1.fc25.s390x systemd-udev-231-17.fc25.s390x python2-koji-1.13.0-2.fc25.noarch unbound-libs-1.6.3-1.fc25.s390x openldap-2.4.44-11.fc25.s390x koji-1.13.0-2.fc25.noarch bind99-libs-9.9.10-2.P3.fc25.s390x libcurl-devel-7.51.0-7.fc25.s390x mesa-libGL-devel-17.0.5-3.fc25.s390x python2-sssdconfig-1.15.2-5.fc25.noarch webkitgtk4-plugin-process-gtk2-2.16.5-1.fc25.s390x graphite2-devel-1.3.10-1.fc25.s390x systemtap-sdt-devel-3.1-5.fc25.s390x iproute-tc-4.11.0-1.fc25.s390x libarchive-3.2.2-2.fc25.s390x publicsuffix-list-dafsa-20170424-1.fc25.noarch texlive-luaotfload-svn40902-33.fc25.1.noarch texlive-unicode-math-svn38462-33.fc25.1.noarch texlive-fancyvrb-svn18492.2.8-33.fc25.1.noarch texlive-pst-pdf-bin-svn7838.0-33.20160520.fc25.1.noarch texlive-amscls-svn36804.0-33.fc25.1.noarch texlive-ltxmisc-svn21927.0-33.fc25.1.noarch texlive-breqn-svn38099.0.98d-33.fc25.1.noarch texlive-xetex-def-svn40327-33.fc25.1.noarch openssh-server-7.4p1-4.fc25.s390x sendmail-8.15.2-8.fc25.s390x tzdata-2017b-1.fc25.noarch hunspell-1.4.1-2.fc25.s390x gpg-pubkey-8e1431d5-53bcbac7 zlib-1.2.8-10.fc24.s390x sed-4.2.2-15.fc24.s390x psmisc-22.21-8.fc24.s390x gpm-libs-1.20.7-9.fc24.s390x zip-3.0-16.fc24.s390x libyubikey-1.13-2.fc24.s390x sg3_utils-libs-1.41-3.fc24.s390x polkit-pkla-compat-0.1-7.fc24.s390x passwd-0.79-8.fc24.s390x trousers-0.3.13-6.fc24.s390x grubby-8.40-3.fc24.s390x rootfiles-8.1-19.fc24.noarch nettle-3.3-1.fc25.s390x libksba-1.3.5-1.fc25.s390x perl-Text-ParseWords-3.30-365.fc25.noarch perl-PathTools-3.63-366.fc25.s390x perl-File-Temp-0.23.04-365.fc25.noarch fuse-libs-2.9.7-1.fc25.s390x perl-Pod-Escapes-1.07-365.fc25.noarch perl-Term-ANSIColor-4.05-2.fc25.noarch perl-URI-1.71-5.fc25.noarch libXfont-1.5.2-1.fc25.s390x python-six-1.10.0-3.fc25.noarch dbus-glib-0.108-1.fc25.s390x gobject-introspection-1.50.0-1.fc25.s390x libpwquality-1.3.0-6.fc25.s390x python-gobject-base-3.22.0-1.fc25.s390x python-html5lib-0.999-9.fc25.noarch python3-dbus-1.2.4-2.fc25.s390x python3-chardet-2.3.0-1.fc25.noarch python3-urllib3-1.15.1-3.fc25.noarch python-offtrac-0.1.0-7.fc25.noarch python2-cryptography-1.5.3-3.fc25.s390x python2-requests-kerberos-0.10.0-2.fc25.noarch libserf-1.3.9-1.fc25.s390x libdatrie-0.2.9-3.fc25.s390x s390utils-base-1.36.0-1.fc25.s390x kpartx-0.4.9-83.fc25.s390x s390utils-cpuplugd-1.36.0-1.fc25.s390x s390utils-osasnmpd-1.36.0-1.fc25.s390x python-dnf-plugins-extras-common-0.0.12-4.fc25.noarch fpc-srpm-macros-1.0-1.fc25.noarch libuser-0.62-4.fc25.s390x man-db-2.7.5-3.fc25.s390x python-systemd-doc-232-1.fc25.s390x lz4-1.7.5-1.fc25.s390x tar-1.29-3.fc25.s390x bodhi-client-0.9.12.2-6.fc25.noarch cairo-1.14.8-1.fc25.s390x gcc-go-6.3.1-1.fc25.s390x cracklib-dicts-2.9.6-4.fc25.s390x libselinux-python3-2.5-13.fc25.s390x python2-enchant-1.6.8-1.fc25.noarch boost-iostreams-1.60.0-10.fc25.s390x userspace-rcu-0.9.2-2.fc25.s390x libXext-devel-1.3.3-4.fc24.s390x libXrandr-devel-1.5.1-1.fc25.s390x perl-XML-XPath-1.39-1.fc25.noarch python3-lxml-3.7.2-1.fc25.s390x libiscsi-1.15.0-2.fc24.s390x fontconfig-devel-2.12.1-1.fc25.s390x libfdt-devel-1.4.2-1.fc25.s390x ceph-devel-compat-10.2.4-2.fc25.s390x zlib-static-1.2.8-10.fc24.s390x chrpath-0.16-3.fc24.s390x info-6.1-4.fc25.s390x iptables-libs-1.6.0-3.fc25.s390x libfdisk-2.28.2-2.fc25.s390x dnf-plugins-core-0.1.21-5.fc25.noarch perl-Storable-2.56-368.fc25.s390x python2-decorator-4.0.11-1.fc25.noarch libnetfilter_conntrack-1.0.6-2.fc25.s390x texlive-texlive.infra-bin-svn40312-33.20160520.fc25.1.s390x texlive-ifluatex-svn41346-33.fc25.1.noarch texlive-fp-svn15878.0-33.fc25.1.noarch texlive-latex-fonts-svn28888.0-33.fc25.1.noarch texlive-bibtex-bin-svn40473-33.20160520.fc25.1.s390x texlive-glyphlist-svn28576.0-33.fc25.1.noarch texlive-marvosym-svn29349.2.2a-33.fc25.1.noarch texlive-tex-bin-svn40987-33.20160520.fc25.1.s390x texlive-texconfig-svn40768-33.fc25.1.noarch texlive-wasy2-ps-svn35830.0-33.fc25.1.noarch texlive-psfrag-svn15878.3.04-33.fc25.1.noarch texlive-charter-svn15878.0-33.fc25.1.noarch texlive-ec-svn25033.1.0-33.fc25.1.noarch texlive-lineno-svn21442.4.41-33.fc25.1.noarch texlive-hyphen-base-svn41138-33.fc25.1.noarch texlive-manfnt-font-svn35799.0-33.fc25.1.noarch texlive-ncntrsbk-svn31835.0-33.fc25.1.noarch texlive-pst-math-svn34786.0.63-33.fc25.1.noarch texlive-symbol-svn31835.0-33.fc25.1.noarch texlive-environ-svn33821.0.3-33.fc25.1.noarch texlive-algorithms-svn38085.0.1-33.fc25.1.noarch kernel-core-4.10.8-200.fc25.s390x libglvnd-devel-0.2.999-14.20170308git8e6e102.fc25.s390x python3-hawkey-0.6.4-3.fc25.s390x glibc-all-langpacks-2.24-9.fc25.s390x freetype-2.6.5-9.fc25.s390x mesa-libwayland-egl-17.0.5-3.fc25.s390x libicu-57.1-5.fc25.s390x nspr-devel-4.14.0-2.fc25.s390x libnl3-cli-3.2.29-3.fc25.s390x cups-libs-2.2.0-9.fc25.s390x bind-libs-lite-9.10.5-2.P2.fc25.s390x ca-certificates-2017.2.14-1.0.fc25.noarch python3-kerberos-1.2.5-1.fc25.s390x python3-cryptography-1.5.3-3.fc25.s390x perl-IO-1.36-387.fc25.s390x dhcp-libs-4.3.5-3.fc25.s390x rsync-3.1.2-4.fc25.s390x make-4.1-6.fc25.s390x pcre2-devel-10.23-8.fc25.s390x quota-4.03-8.fc25.s390x libX11-devel-1.6.5-1.fc25.s390x ghostscript-9.20-9.fc25.s390x dbus-1.11.14-1.fc25.s390x rpcbind-0.2.4-6.rc2.fc25.s390x pyOpenSSL-16.2.0-1.fc25.noarch glusterfs-devel-3.10.4-1.fc25.s390x nss-tools-3.30.2-1.1.fc25.s390x python3-pycurl-7.43.0-6.fc25.s390x bind99-license-9.9.10-2.P3.fc25.noarch curl-7.51.0-7.fc25.s390x glusterfs-api-devel-3.10.4-1.fc25.s390x python-firewall-0.4.4.5-1.fc25.noarch netpbm-progs-10.79.00-1.fc25.s390x libsndfile-1.0.28-3.fc25.s390x python3-sssdconfig-1.15.2-5.fc25.noarch wget-1.18-3.fc25.s390x libsemanage-2.5-9.fc25.s390x telnet-0.17-68.fc25.s390x texlive-ifplatform-svn21156.0.4-33.fc25.1.noarch texlive-eso-pic-svn37925.2.0g-33.fc25.1.noarch texlive-xcolor-svn41044-33.fc25.1.noarch texlive-pst-eps-svn15878.1.0-33.fc25.1.noarch texlive-pst-text-svn15878.1.00-33.fc25.1.noarch texlive-rotating-svn16832.2.16b-33.fc25.1.noarch texlive-pdfpages-svn40638-33.fc25.1.noarch texlive-cm-super-svn15878.0-33.fc25.1.noarch texlive-xetex-svn41438-33.fc25.1.noarch dnf-yum-1.1.10-6.fc25.noarch libseccomp-devel-2.3.2-1.fc25.s390x gpgme-1.8.0-10.fc25.s390x apr-util-1.5.4-3.fc24.s390x jbigkit-libs-2.1-5.fc24.s390x pixman-0.34.0-2.fc24.s390x dwz-0.12-2.fc24.s390x expect-5.45-22.fc24.s390x libsigsegv-2.10-10.fc24.s390x fakeroot-libs-1.20.2-4.fc24.s390x m17n-lib-1.7.0-5.fc24.s390x libverto-0.2.6-6.fc24.s390x libXmu-1.1.2-4.fc24.s390x libXcursor-1.1.14-6.fc24.s390x python-kitchen-1.2.4-2.fc24.noarch fakeroot-1.20.2-4.fc24.s390x blktrace-1.1.0-3.fc24.s390x usermode-1.111-8.fc24.s390x kbd-2.0.3-3.fc24.s390x libaio-devel-0.3.110-6.fc24.s390x web-assets-filesystem-5-4.fc24.noarch libgpg-error-1.24-1.fc25.s390x findutils-4.6.0-8.fc25.s390x libassuan-2.4.3-1.fc25.s390x libusbx-1.0.21-1.fc25.s390x libxslt-1.1.28-13.fc25.s390x libmetalink-0.1.3-1.fc25.s390x perl-MIME-Base64-3.15-365.fc25.s390x ncurses-6.0-6.20160709.fc25.s390x libwayland-server-1.12.0-1.fc25.s390x perl-Fedora-VSP-0.001-4.fc25.noarch perl-libintl-perl-1.26-1.fc25.s390x shadow-utils-4.2.1-11.fc25.s390x atk-2.22.0-1.fc25.s390x pam-1.3.0-1.fc25.s390x harfbuzz-icu-1.3.2-1.fc25.s390x libsecret-0.18.5-2.fc25.s390x s390utils-iucvterm-1.36.0-1.fc25.s390x python3-requests-2.10.0-4.fc25.noarch pyusb-1.0.0-2.fc25.noarch python-enum34-1.0.4-6.fc25.noarch pyxattr-0.5.3-8.fc25.s390x libbabeltrace-1.4.0-3.fc25.s390x libthai-0.1.25-1.fc25.s390x deltarpm-3.6-17.fc25.s390x s390utils-mon_statd-1.36.0-1.fc25.s390x device-mapper-multipath-0.4.9-83.fc25.s390x python3-pygpgme-0.3-18.fc25.s390x libreport-filesystem-2.8.0-1.fc25.s390x ghc-srpm-macros-1.4.2-4.fc25.noarch rpmdevtools-8.9-1.fc25.noarch python-dnf-plugins-extras-migrate-0.0.12-4.fc25.noarch perl-IO-Socket-SSL-2.038-1.fc25.noarch perl-File-ShareDir-1.102-7.fc25.noarch tcl-8.6.6-1.fc25.s390x bzip2-1.0.6-21.fc25.s390x libss-1.43.3-1.fc25.s390x libselinux-utils-2.5-13.fc25.s390x python3-enchant-1.6.8-1.fc25.noarch python2-dockerfile-parse-0.0.5-7.fc25.noarch systemd-bootchart-231-2.fc25.s390x gcc-objc-6.3.1-1.fc25.s390x e2fsprogs-1.43.3-1.fc25.s390x libstdc++-static-6.3.1-1.fc25.s390x libpng-devel-1.6.27-1.fc25.s390x perl-XML-Parser-2.44-5.fc25.s390x lttng-ust-2.8.1-2.fc25.s390x libXfixes-devel-5.0.3-1.fc25.s390x libXcomposite-devel-0.4.4-8.fc24.s390x python3-javapackages-4.7.0-6.1.fc25.noarch libcephfs_jni-devel-10.2.4-2.fc25.s390x keyutils-libs-devel-1.5.9-8.fc24.s390x harfbuzz-devel-1.3.2-1.fc25.s390x libidn-devel-1.33-1.fc25.s390x libnfs-1.9.8-2.fc24.s390x libssh2-devel-1.8.0-1.fc25.s390x qemu-sanity-check-nodeps-1.1.5-5.fc24.s390x alsa-lib-devel-1.1.1-2.fc25.s390x libpsl-0.17.0-1.fc25.s390x libseccomp-2.3.2-1.fc25.s390x copy-jdk-configs-2.2-2.fc25.noarch json-glib-1.2.6-1.fc25.s390x python2-dnf-1.1.10-6.fc25.noarch python2-GitPython-2.1.3-1.fc25.noarch texlive-tetex-bin-svn36770.0-33.20160520.fc25.1.noarch texlive-amsfonts-svn29208.3.04-33.fc25.1.noarch texlive-babel-svn40706-33.fc25.1.noarch texlive-colortbl-svn29803.v1.0a-33.fc25.1.noarch texlive-babelbib-svn25245.1.31-33.fc25.1.noarch texlive-footmisc-svn23330.5.5b-33.fc25.1.noarch texlive-makeindex-svn40768-33.fc25.1.noarch texlive-plain-svn40274-33.fc25.1.noarch texlive-texconfig-bin-svn29741.0-33.20160520.fc25.1.noarch texlive-zapfding-svn31835.0-33.fc25.1.noarch texlive-microtype-svn41127-33.fc25.1.noarch texlive-bookman-svn31835.0-33.fc25.1.noarch texlive-dvisvgm-def-svn41011-33.fc25.1.noarch texlive-finstrut-svn21719.0.5-33.fc25.1.noarch texlive-hyph-utf8-svn41189-33.fc25.1.noarch texlive-lualibs-svn40370-33.fc25.1.noarch kernel-modules-4.10.8-200.fc25.s390x python2-hawkey-0.6.4-3.fc25.s390x glibc-2.24-9.fc25.s390x elfutils-libelf-0.169-1.fc25.s390x libsoup-2.56.0-3.fc25.s390x libnl3-3.2.29-3.fc25.s390x gstreamer1-1.10.5-1.fc25.s390x polkit-libs-0.113-8.fc25.s390x libtirpc-1.0.2-0.fc25.s390x emacs-common-25.2-2.fc25.s390x libteam-1.27-1.fc25.s390x python3-3.5.3-6.fc25.s390x python3-pyasn1-0.2.3-1.fc25.noarch perl-File-Path-2.12-366.fc25.noarch mesa-libwayland-egl-devel-17.0.5-3.fc25.s390x libacl-devel-2.2.52-13.fc25.s390x lua-libs-5.3.4-3.fc25.s390x pcre2-utf32-10.23-8.fc25.s390x quota-nls-4.03-8.fc25.noarch gtk3-3.22.16-1.fc25.s390x ghostscript-x11-9.20-9.fc25.s390x systemd-231-17.fc25.s390x glusterfs-api-3.10.4-1.fc25.s390x glusterfs-extra-xlators-3.10.4-1.fc25.s390x glusterfs-server-3.10.4-1.fc25.s390x java-1.8.0-openjdk-headless-1.8.0.131-1.b12.fc25.s390x git-2.9.4-1.fc25.s390x dhcp-common-4.3.5-3.fc25.noarch python2-rpkg-1.49-5.fc25.noarch vte291-devel-0.46.2-1.fc25.s390x python-devel-2.7.13-2.fc25.s390x elfutils-0.169-1.fc25.s390x lua-5.3.4-3.fc25.s390x python3-beautifulsoup4-4.6.0-1.fc25.noarch libmicrohttpd-0.9.55-1.fc25.s390x screen-4.6.1-1.fc25.s390x strace-4.18-1.fc25.s390x texlive-mparhack-svn15878.1.4-33.fc25.1.noarch texlive-pspicture-svn15878.0-33.fc25.1.noarch texlive-soul-svn15878.2.4-33.fc25.1.noarch texlive-trimspaces-svn15878.1.1-33.fc25.1.noarch texlive-varwidth-svn24104.0.92-33.fc25.1.noarch texlive-geometry-svn19716.5.6-33.fc25.1.noarch texlive-memoir-svn41203-33.fc25.1.noarch texlive-pgf-svn40966-33.fc25.1.noarch texlive-pst-coil-svn37377.1.07-33.fc25.1.noarch texlive-pst-plot-svn41242-33.fc25.1.noarch texlive-latex-bin-svn41438-33.fc25.1.noarch texlive-ucs-svn35853.2.2-33.fc25.1.noarch texlive-ae-svn15878.1.4-33.fc25.1.noarch texlive-xetex-bin-svn41091-33.20160520.fc25.1.s390x fedora-upgrade-26.1-1.fc25.noarch fedpkg-1.28-1.fc25.noarch perl-Thread-Queue-3.12-1.fc25.noarch cdparanoia-libs-10.2-21.fc24.s390x ustr-1.0.4-21.fc24.s390x libusb-0.1.5-7.fc24.s390x readline-devel-6.3-8.fc24.s390x chkconfig-1.8-1.fc25.s390x avahi-libs-0.6.32-4.fc25.s390x perl-Unicode-Normalize-1.25-365.fc25.s390x perl-libnet-3.10-1.fc25.noarch perl-podlators-4.09-1.fc25.noarch dbus-python-1.2.4-2.fc25.s390x libgnome-keyring-3.12.0-7.fc25.s390x python-backports-1.0-8.fc25.s390x python-pycparser-2.14-7.fc25.noarch plymouth-scripts-0.9.3-0.6.20160620git0e65b86c.fc25.s390x cronie-1.5.1-2.fc25.s390x python2-librepo-1.7.18-3.fc25.s390x libXv-1.0.11-1.fc25.s390x python2-ndg_httpsclient-0.4.0-4.fc25.noarch btrfs-progs-4.6.1-1.fc25.s390x libgcc-6.3.1-1.fc25.s390x libgomp-6.3.1-1.fc25.s390x perl-Encode-2.88-5.fc25.s390x cracklib-2.9.6-4.fc25.s390x libobjc-6.3.1-1.fc25.s390x gcc-6.3.1-1.fc25.s390x python3-dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch boost-random-1.60.0-10.fc25.s390x libref_array-0.1.5-29.fc25.s390x libXrender-devel-0.9.10-1.fc25.s390x javapackages-tools-4.7.0-6.1.fc25.noarch keyutils-1.5.9-8.fc24.s390x libcom_err-devel-1.43.3-1.fc25.s390x lzo-minilzo-2.08-8.fc24.s390x libusbx-devel-1.0.21-1.fc25.s390x virglrenderer-devel-0.5.0-1.20160411git61846f92f.fc25.s390x acpica-tools-20160831-1.fc25.s390x grep-2.27-2.fc25.s390x dnf-conf-1.1.10-6.fc25.noarch crypto-policies-20160921-4.gitf3018dd.fc25.noarch rpm-build-libs-4.13.0.1-1.fc25.s390x libnfsidmap-0.27-1.fc25.s390x SDL2-2.0.5-3.fc25.s390x texlive-etex-pkg-svn39355-33.fc25.1.noarch texlive-multido-svn18302.1.42-33.fc25.1.noarch texlive-gsftopk-svn40768-33.fc25.1.noarch texlive-pst-ovl-svn40873-33.fc25.1.noarch texlive-ltabptch-svn17533.1.74d-33.fc25.1.noarch texlive-cite-svn36428.5.5-33.fc25.1.noarch texlive-fpl-svn15878.1.002-33.fc25.1.noarch texlive-mathpazo-svn15878.1.003-33.fc25.1.noarch texlive-rcs-svn15878.0-33.fc25.1.noarch texlive-type1cm-svn21820.0-33.fc25.1.noarch texlive-l3kernel-svn41246-33.fc25.1.noarch texlive-hyperref-svn41396-33.fc25.1.noarch texlive-pst-tree-svn24142.1.12-33.fc25.1.noarch texlive-sansmathaccent-svn30187.0-33.fc25.1.noarch texlive-dvipdfmx-bin-svn40273-33.20160520.fc25.1.s390x texlive-zapfchan-svn31835.0-33.fc25.1.noarch glib2-static-2.50.3-1.fc25.s390x bash-completion-2.5-1.fc25.noarch glusterfs-libs-3.10.4-1.fc25.s390x p11-kit-0.23.2-4.fc25.s390x hyphen-2.8.8-4.fc24.s390x gnutls-c++-3.5.14-1.fc25.s390x python3-idna-2.5-1.fc25.noarch nss-softokn-devel-3.30.2-1.0.fc25.s390x less-481-7.fc25.s390x rpmconf-base-1.0.19-1.fc25.noarch gtk2-2.24.31-2.fc25.s390x mesa-libgbm-17.0.5-3.fc25.s390x nfs-utils-2.1.1-5.rc4.fc25.s390x perl-Git-2.9.4-1.fc25.noarch mock-1.4.2-1.fc25.noarch mc-4.8.19-5.fc25.s390x pcre-static-8.41-1.fc25.s390x bind-libs-9.10.5-2.P2.fc25.s390x libproxy-0.4.15-2.fc25.s390x gpg-pubkey-a29cb19c-53bcbba6 m4-1.4.17-9.fc24.s390x liblockfile-1.09-4.fc24.s390x sg3_utils-1.41-3.fc24.s390x libXinerama-1.1.3-6.fc24.s390x libXft-2.3.2-4.fc24.s390x tcp_wrappers-libs-7.6-83.fc25.s390x perl-Text-Tabs+Wrap-2013.0523-365.fc25.noarch perl-Error-0.17024-7.fc25.noarch perl-Term-Cap-1.17-365.fc25.noarch perl-Pod-Usage-1.69-1.fc25.noarch device-mapper-persistent-data-0.6.3-1.fc25.s390x net-snmp-libs-5.7.3-13.fc25.s390x python3-six-1.10.0-3.fc25.noarch python3-pysocks-1.5.6-5.fc25.noarch python-chardet-2.3.0-1.fc25.noarch python2-cffi-1.7.0-2.fc25.s390x gc-devel-7.4.4-1.fc25.s390x plymouth-0.9.3-0.6.20160620git0e65b86c.fc25.s390x ebtables-2.0.10-21.fc25.s390x python3-librepo-1.7.18-3.fc25.s390x net-snmp-5.7.3-13.fc25.s390x at-spi2-atk-2.22.0-1.fc25.s390x avahi-autoipd-0.6.32-4.fc25.s390x libgo-6.3.1-1.fc25.s390x cpp-6.3.1-1.fc25.s390x pyparsing-2.1.10-1.fc25.noarch python3-pyparsing-2.1.10-1.fc25.noarch libcollection-0.7.0-29.fc25.s390x libcephfs-devel-10.2.4-2.fc25.s390x libXdamage-devel-1.1.4-8.fc24.s390x libverto-devel-0.2.6-6.fc24.s390x snappy-1.1.3-2.fc24.s390x cairo-gobject-devel-1.14.8-1.fc25.s390x cyrus-sasl-devel-2.1.26-26.2.fc24.s390x libXi-1.7.9-1.fc25.s390x texlive-base-2016-33.20160520.fc25.noarch python3-rpm-4.13.0.1-1.fc25.s390x texlive-booktabs-svn40846-33.fc25.1.noarch texlive-lm-svn28119.2.004-33.fc25.1.noarch texlive-gsftopk-bin-svn40473-33.20160520.fc25.1.s390x texlive-tex-svn40793-33.fc25.1.noarch texlive-fancyref-svn15878.0.9c-33.fc25.1.noarch texlive-chngcntr-svn17157.1.0a-33.fc25.1.noarch texlive-fix2col-svn38770-33.fc25.1.noarch texlive-marginnote-svn41382-33.fc25.1.noarch texlive-pxfonts-svn15878.0-33.fc25.1.noarch texlive-txfonts-svn15878.0-33.fc25.1.noarch texlive-l3packages-svn41246-33.fc25.1.noarch texlive-oberdiek-svn41346-33.fc25.1.noarch texlive-pst-tools-svn34067.0.05-33.fc25.1.noarch texlive-tex-gyre-svn18651.2.004-33.fc25.1.noarch texlive-dvipdfmx-svn41149-33.fc25.1.noarch texlive-collection-fontsrecommended-svn35830.0-33.20160520.fc25.1.noarch libcacard-devel-2.5.3-1.fc25.s390x ykpers-1.18.0-2.fc25.s390x python2-idna-2.5-1.fc25.noarch file-libs-5.29-4.fc25.s390x policycoreutils-2.5-20.fc25.s390x libgcrypt-1.7.8-1.fc25.s390x pcre-8.41-1.fc25.s390x GeoIP-1.6.11-1.fc25.s390x ghostscript-core-9.20-9.fc25.s390x python3-cffi-1.7.0-2.fc25.s390x nss-softokn-freebl-devel-3.30.2-1.0.fc25.s390x json-c-0.12.1-2.fc25.s390x vim-common-8.0.705-1.fc25.s390x vte291-0.46.2-1.fc25.s390x libdrm-devel-2.4.81-1.fc25.s390x gssproxy-0.7.0-9.fc25.s390x git-core-doc-2.9.4-1.fc25.s390x systemtap-3.1-5.fc25.s390x mesa-libgbm-devel-17.0.5-3.fc25.s390x vim-enhanced-8.0.705-1.fc25.s390x glibc-static-2.24-9.fc25.s390x libgusb-0.2.10-1.fc25.s390x python-async-0.6.1-9.fc22.s390x dejavu-sans-mono-fonts-2.35-3.fc24.noarch popt-1.16-7.fc24.s390x cyrus-sasl-lib-2.1.26-26.2.fc24.s390x xz-5.2.2-2.fc24.s390x libpipeline-1.4.1-2.fc24.s390x pinentry-0.9.7-2.fc24.s390x pth-2.0.7-27.fc24.s390x libsepol-2.5-10.fc25.s390x libxcb-1.12-1.fc25.s390x perl-Getopt-Long-2.49.1-1.fc25.noarch avahi-glib-0.6.32-4.fc25.s390x python3-pip-8.1.2-2.fc25.noarch python3-libcomps-0.1.7-5.fc25.s390x python-slip-0.6.4-4.fc25.noarch python2-libcomps-0.1.7-5.fc25.s390x gc-7.4.4-1.fc25.s390x s390utils-cmsfs-1.36.0-1.fc25.s390x newt-python-0.52.19-2.fc25.s390x qt5-srpm-macros-5.7.1-1.fc25.noarch device-mapper-event-1.02.136-3.fc25.s390x perl-Class-Inspector-1.31-2.fc25.noarch libbasicobjects-0.1.1-29.fc25.s390x libradosstriper1-10.2.4-2.fc25.s390x libXxf86vm-devel-1.1.4-3.fc24.s390x zziplib-0.13.62-7.fc24.s390x libpaper-1.1.24-12.fc24.s390x libini_config-1.3.0-29.fc25.s390x snappy-devel-1.1.3-2.fc24.s390x libcap-ng-devel-0.7.8-1.fc25.s390x libxkbcommon-devel-0.7.1-1.fc25.s390x openssl-libs-1.0.2k-1.fc25.s390x libkadm5-1.14.4-7.fc25.s390x rpm-libs-4.13.0.1-1.fc25.s390x util-linux-2.28.2-2.fc25.s390x texlive-etoolbox-svn38031.2.2a-33.fc25.1.noarch texlive-dvips-svn41149-33.fc25.1.noarch texlive-latexconfig-svn40274-33.fc25.1.noarch texlive-tex-ini-files-svn40533-33.fc25.1.noarch texlive-qstest-svn15878.0-33.fc25.1.noarch texlive-cmap-svn41168-33.fc25.1.noarch texlive-luatex-bin-svn41091-33.20160520.fc25.1.s390x texlive-mflogo-svn38628-33.fc25.1.noarch texlive-sansmath-svn17997.1.1-33.fc25.1.noarch texlive-unicode-data-svn39808-33.fc25.1.noarch texlive-luaotfload-bin-svn34647.0-33.20160520.fc25.1.noarch texlive-listings-svn37534.1.6-33.fc25.1.noarch texlive-pstricks-svn41321-33.fc25.1.noarch texlive-metalogo-svn18611.0.12-33.fc25.1.noarch texlive-collection-latex-svn41011-33.20160520.fc25.1.noarch kernel-4.10.5-200.fc25.s390x python2-dnf-plugins-core-0.1.21-5.fc25.noarch xkeyboard-config-2.20-2.fc25.noarch file-5.29-4.fc25.s390x perl-Test-Harness-3.39-1.fc25.noarch systemd-libs-231-17.fc25.s390x webkitgtk4-jsc-2.16.5-1.fc25.s390x gtk-update-icon-cache-3.22.16-1.fc25.s390x glibc-devel-2.24-9.fc25.s390x python3-pycparser-2.14-7.fc25.noarch kernel-devel-4.11.10-200.fc25.s390x gsm-1.0.17-1.fc25.s390x vim-filesystem-8.0.705-1.fc25.s390x webkitgtk4-2.16.5-1.fc25.s390x python-2.7.13-2.fc25.s390x glusterfs-fuse-3.10.4-1.fc25.s390x git-core-2.9.4-1.fc25.s390x selinux-policy-targeted-3.13.1-225.18.fc25.noarch kernel-4.11.10-200.fc25.s390x rpmconf-1.0.19-1.fc25.noarch teamd-1.27-1.fc25.s390x jasper-libs-1.900.13-4.fc25.s390x libattr-2.4.47-16.fc24.s390x libvisual-0.4.0-20.fc24.s390x libpcap-1.7.4-2.fc24.s390x libutempter-1.1.6-8.fc24.s390x libgudev-230-3.fc24.s390x popt-devel-1.16-7.fc24.s390x hicolor-icon-theme-0.15-3.fc24.noarch setup-2.10.4-1.fc25.noarch bash-4.3.43-4.fc25.s390x libjpeg-turbo-1.5.1-0.fc25.s390x perl-Socket-2.024-1.fc25.s390x perl-HTTP-Tiny-0.070-1.fc25.noarch ipset-6.29-1.fc25.s390x python2-setuptools-25.1.1-1.fc25.noarch gsettings-desktop-schemas-3.22.0-1.fc25.s390x python3-setuptools-25.1.1-1.fc25.noarch python-slip-dbus-0.6.4-4.fc25.noarch python2-ply-3.8-2.fc25.noarch dtc-1.4.2-1.fc25.s390x guile-2.0.13-1.fc25.s390x cronie-anacron-1.5.1-2.fc25.s390x libXtst-1.2.3-1.fc25.s390x iso-codes-3.70-1.fc25.noarch s390utils-1.36.0-1.fc25.s390x python-backports-ssl_match_hostname-3.5.0.1-3.fc25.noarch fedora-cert-0.6.0.1-1.fc25.noarch libstdc++-6.3.1-1.fc25.s390x subversion-libs-1.9.5-1.fc25.s390x libgfortran-6.3.1-1.fc25.s390x dnf-plugin-system-upgrade-0.7.1-4.fc25.noarch lvm2-2.02.167-3.fc25.s390x libselinux-devel-2.5-13.fc25.s390x perl-Time-Local-1.250-1.fc25.noarch libradosstriper-devel-10.2.4-2.fc25.s390x flac-libs-1.3.2-1.fc25.s390x perl-Digest-1.17-366.fc25.noarch teckit-2.5.1-15.fc24.s390x libpath_utils-0.2.1-29.fc25.s390x attr-2.4.47-16.fc24.s390x usbredir-0.7.1-2.fc24.s390x cairo-devel-1.14.8-1.fc25.s390x lzo-devel-2.08-8.fc24.s390x libcap-devel-2.25-2.fc25.s390x krb5-devel-1.14.4-7.fc25.s390x rpm-4.13.0.1-1.fc25.s390x kernel-devel-4.10.5-200.fc25.s390x libbsd-0.8.3-1.fc25.s390x texlive-url-svn32528.3.4-33.fc25.1.noarch texlive-dvips-bin-svn40987-33.20160520.fc25.1.s390x texlive-index-svn24099.4.1beta-33.fc25.1.noarch texlive-setspace-svn24881.6.7a-33.fc25.1.noarch texlive-mathtools-svn38833-33.fc25.1.noarch texlive-cm-svn32865.0-33.fc25.1.noarch texlive-graphics-def-svn41879-33.fc25.1.noarch texlive-mdwtools-svn15878.1.05.4-33.fc25.1.noarch texlive-rsfs-svn15878.0-33.fc25.1.noarch texlive-ucharcat-svn38907-33.fc25.1.noarch texlive-fontspec-svn41262-33.fc25.1.noarch texlive-showexpl-svn32737.v0.3l-33.fc25.1.noarch texlive-pstricks-add-svn40744-33.fc25.1.noarch texlive-beamer-svn36461.3.36-33.fc25.1.noarch texlive-collection-basic-svn41149-33.20160520.fc25.1.noarch rpm-build-4.13.0.1-1.fc25.s390x xemacs-filesystem-21.5.34-20.20170124hgf412e9f093d4.fc25.noarch hawkey-0.6.4-3.fc25.s390x gdk-pixbuf2-modules-2.36.6-1.fc25.s390x bluez-libs-5.44-1.fc25.s390x audit-libs-2.7.7-1.fc25.s390x iproute-4.11.0-1.fc25.s390x libICE-1.0.9-9.fc25.s390x glibc-headers-2.24-9.fc25.s390x python3-ply-3.8-2.fc25.noarch perl-5.24.2-387.fc25.s390x graphite2-1.3.10-1.fc25.s390x vte-profile-0.46.2-1.fc25.s390x gtk3-devel-3.22.16-1.fc25.s390x python-libs-2.7.13-2.fc25.s390x mesa-libGL-17.0.5-3.fc25.s390x python2-pycurl-7.43.0-6.fc25.s390x NetworkManager-1.4.4-5.fc25.s390x mesa-libEGL-devel-17.0.5-3.fc25.s390x mariadb-libs-10.1.24-3.fc25.s390x mesa-libGLES-devel-17.0.5-3.fc25.s390x hostname-3.15-8.fc25.s390x gpg-pubkey-a0a7badb-52844296 readline-6.3-8.fc24.s390x cpio-2.12-3.fc24.s390x libXcomposite-0.4.4-8.fc24.s390x procps-ng-3.3.10-11.fc24.s390x GConf2-3.2.6-16.fc24.s390x xz-devel-5.2.2-2.fc24.s390x fedora-logos-22.0.0-3.fc24.s390x gpg-pubkey-e372e838-56fd7943 kmod-libs-23-1.fc25.s390x perl-parent-0.236-1.fc25.noarch perl-TermReadKey-2.37-1.fc25.s390x ncurses-c++-libs-6.0-6.20160709.fc25.s390x gzip-1.8-1.fc25.s390x python3-gobject-base-3.22.0-1.fc25.s390x python2-yubico-1.3.2-3.fc25.noarch s390utils-ziomon-1.36.0-1.fc25.s390x librepo-1.7.18-3.fc25.s390x librsvg2-2.40.16-2.fc25.s390x gnat-srpm-macros-4-1.fc25.noarch python-decoratortools-1.8-12.fc25.noarch m17n-db-1.7.0-7.fc25.noarch e2fsprogs-libs-1.43.3-1.fc25.s390x libvorbis-1.3.5-1.fc25.s390x gcc-gdb-plugin-6.3.1-1.fc25.s390x npth-1.3-1.fc25.s390x libcephfs1-10.2.4-2.fc25.s390x wayland-devel-1.12.0-1.fc25.s390x libxcb-devel-1.12-1.fc25.s390x perl-encoding-2.19-5.fc25.s390x python3-cssselect-0.9.2-1.fc25.noarch gettext-libs-0.19.8.1-3.fc25.s390x at-spi2-atk-devel-2.22.0-1.fc25.s390x virglrenderer-0.5.0-1.20160411git61846f92f.fc25.s390x pixman-devel-0.34.0-2.fc24.s390x libnfs-devel-1.9.8-2.fc24.s390x libblkid-2.28.2-2.fc25.s390x glib2-devel-2.50.3-1.fc25.s390x texlive-ifxetex-svn19685.0.5-33.fc25.1.noarch texlive-caption-svn41409-33.fc25.1.noarch texlive-float-svn15878.1.3d-33.fc25.1.noarch texlive-pdftex-def-svn22653.0.06d-33.fc25.1.noarch texlive-xdvi-bin-svn40750-33.20160520.fc25.1.s390x texlive-beton-svn15878.0-33.fc25.1.noarch texlive-filecontents-svn24250.1.3-33.fc25.1.noarch texlive-lm-math-svn36915.1.959-33.fc25.1.noarch texlive-pslatex-svn16416.0-33.fc25.1.noarch texlive-times-svn35058.0-33.fc25.1.noarch texlive-breakurl-svn29901.1.40-33.fc25.1.noarch texlive-filehook-svn24280.0.5d-33.fc25.1.noarch texlive-pst-pdf-svn31660.1.1v-33.fc25.1.noarch texlive-seminar-svn34011.1.62-33.fc25.1.noarch texlive-xetexconfig-svn41133-33.fc25.1.noarch python-rpm-macros-3-12.fc25.noarch rpm-devel-4.13.0.1-1.fc25.s390x nss-pem-1.0.3-3.fc25.s390x at-spi2-core-2.22.1-1.fc25.s390x GeoIP-GeoLite-data-2017.04-1.fc25.noarch kernel-devel-4.10.8-200.fc25.s390x dbus-libs-1.11.14-1.fc25.s390x perl-Scalar-List-Utils-1.48-1.fc25.s390x libidn2-2.0.2-1.fc25.s390x libtasn1-devel-4.12-1.fc25.s390x python3-koji-1.13.0-2.fc25.noarch glusterfs-cli-3.10.4-1.fc25.s390x opus-1.1.5-1.fc25.s390x mariadb-common-10.1.24-3.fc25.s390x elfutils-libs-0.169-1.fc25.s390x kernel-core-4.11.10-200.fc25.s390x gnutls-dane-3.5.14-1.fc25.s390x systemd-container-231-17.fc25.s390x sudo-1.8.20p2-1.fc25.s390x dbus-devel-1.11.14-1.fc25.s390x perl-Module-CoreList-5.20170621-1.fc25.noarch libicu-devel-57.1-5.fc25.s390x js-jquery-2.2.4-3.fc25.noarch === TEST BEGIN === Using CC: /home/fam/bin/cc Install prefix /var/tmp/patchew-tester-tmp-88xjlrnz/src/install BIOS directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/share/qemu binary directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/bin library directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/lib module directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/lib/qemu libexec directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/libexec include directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/include config directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/etc local state directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/var Manual directory /var/tmp/patchew-tester-tmp-88xjlrnz/src/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /var/tmp/patchew-tester-tmp-88xjlrnz/src C compiler /home/fam/bin/cc Host C compiler cc C++ compiler c++ Objective-C compiler /home/fam/bin/cc ARFLAGS rv CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -I/usr/include/pixman-1 -Werror -DHAS_LIBSSH2_SFTP_FSYNC -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -DNCURSES_WIDECHAR -D_GNU_SOURCE -m64 -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 -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1 -I/usr/include/libpng16 -I/usr/include/libdrm -I/usr/include/cacard -I/usr/include/nss3 -I/usr/include/nspr4 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/libusb-1.0 LDFLAGS -Wl,--warn-common -m64 -g make make install install python python -B smbd /usr/sbin/smbd module support no host CPU s390x host big endian yes target list aarch64-softmmu alpha-softmmu arm-softmmu cris-softmmu i386-softmmu lm32-softmmu m68k-softmmu microblazeel-softmmu microblaze-softmmu mips64el-softmmu mips64-softmmu mipsel-softmmu mips-softmmu moxie-softmmu nios2-softmmu or1k-softmmu ppc64-softmmu ppcemb-softmmu ppc-softmmu s390x-softmmu sh4eb-softmmu sh4-softmmu sparc64-softmmu sparc-softmmu tricore-softmmu unicore32-softmmu x86_64-softmmu xtensaeb-softmmu xtensa-softmmu aarch64-linux-user alpha-linux-user armeb-linux-user arm-linux-user cris-linux-user hppa-linux-user i386-linux-user m68k-linux-user microblazeel-linux-user microblaze-linux-user mips64el-linux-user mips64-linux-user mipsel-linux-user mips-linux-user mipsn32el-linux-user mipsn32-linux-user nios2-linux-user or1k-linux-user ppc64abi32-linux-user ppc64le-linux-user ppc64-linux-user ppc-linux-user s390x-linux-user sh4eb-linux-user sh4-linux-user sparc32plus-linux-user sparc64-linux-user sparc-linux-user tilegx-linux-user x86_64-linux-user gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support yes (2.0.5) GTK support yes (3.22.16) GTK GL support yes VTE support yes (0.46.2) TLS priority NORMAL GNUTLS support yes GNUTLS rnd yes libgcrypt no libgcrypt kdf no nettle yes (3.3) nettle kdf yes libtasn1 yes curses support yes virgl support yes curl support yes mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support yes VNC support yes VNC SASL support yes VNC JPEG support yes VNC PNG support yes xen support no brlapi support yes bluez support yes Documentation yes PIE no vde support no netmap support no Linux AIO support yes ATTR/XATTR support yes Install blobs yes KVM support yes HAX support no TCG support yes TCG debug enabled no TCG interpreter no RDMA support no fdt support yes preadv support yes fdatasync yes madvise yes posix_madvise yes libcap-ng support yes vhost-net support yes vhost-scsi support yes vhost-vsock support yes Trace backends log Hypertrace arguments 1 spice support no rbd support yes xfsctl support no smartcard support yes libusb yes usb net redir yes OpenGL support yes OpenGL dmabufs yes libiscsi support yes libnfs support yes 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 yes gcov gcov gcov enabled no TPM support yes libssh2 support yes TPM passthrough no QOM debugging yes Live block migration yes lzo support yes snappy support yes bzip2 support yes NUMA host support no tcmalloc support no jemalloc support no avx2 optimization no replication support yes VxHS block device no GEN aarch64-softmmu/config-devices.mak.tmp GEN alpha-softmmu/config-devices.mak.tmp GEN arm-softmmu/config-devices.mak.tmp GEN cris-softmmu/config-devices.mak.tmp GEN cris-softmmu/config-devices.mak GEN arm-softmmu/config-devices.mak GEN i386-softmmu/config-devices.mak.tmp GEN alpha-softmmu/config-devices.mak GEN lm32-softmmu/config-devices.mak.tmp GEN aarch64-softmmu/config-devices.mak GEN m68k-softmmu/config-devices.mak.tmp GEN microblazeel-softmmu/config-devices.mak.tmp GEN lm32-softmmu/config-devices.mak GEN i386-softmmu/config-devices.mak GEN m68k-softmmu/config-devices.mak GEN microblaze-softmmu/config-devices.mak.tmp GEN mips64el-softmmu/config-devices.mak.tmp GEN mips64-softmmu/config-devices.mak.tmp GEN microblazeel-softmmu/config-devices.mak GEN mipsel-softmmu/config-devices.mak.tmp GEN microblaze-softmmu/config-devices.mak GEN mips-softmmu/config-devices.mak.tmp GEN mips64el-softmmu/config-devices.mak GEN mips64-softmmu/config-devices.mak GEN moxie-softmmu/config-devices.mak.tmp GEN nios2-softmmu/config-devices.mak.tmp GEN mipsel-softmmu/config-devices.mak GEN or1k-softmmu/config-devices.mak.tmp GEN mips-softmmu/config-devices.mak GEN nios2-softmmu/config-devices.mak GEN moxie-softmmu/config-devices.mak GEN ppc64-softmmu/config-devices.mak.tmp GEN ppcemb-softmmu/config-devices.mak.tmp GEN or1k-softmmu/config-devices.mak GEN ppc-softmmu/config-devices.mak.tmp GEN s390x-softmmu/config-devices.mak.tmp GEN s390x-softmmu/config-devices.mak GEN ppc-softmmu/config-devices.mak GEN ppc64-softmmu/config-devices.mak GEN ppcemb-softmmu/config-devices.mak GEN sh4eb-softmmu/config-devices.mak.tmp GEN sh4-softmmu/config-devices.mak.tmp GEN sparc64-softmmu/config-devices.mak.tmp GEN sparc-softmmu/config-devices.mak.tmp GEN sh4eb-softmmu/config-devices.mak GEN sparc64-softmmu/config-devices.mak GEN sparc-softmmu/config-devices.mak GEN tricore-softmmu/config-devices.mak.tmp GEN unicore32-softmmu/config-devices.mak.tmp GEN x86_64-softmmu/config-devices.mak.tmp GEN tricore-softmmu/config-devices.mak GEN sh4-softmmu/config-devices.mak GEN xtensaeb-softmmu/config-devices.mak.tmp GEN xtensa-softmmu/config-devices.mak.tmp GEN unicore32-softmmu/config-devices.mak GEN aarch64-linux-user/config-devices.mak.tmp GEN xtensaeb-softmmu/config-devices.mak GEN xtensa-softmmu/config-devices.mak GEN x86_64-softmmu/config-devices.mak GEN alpha-linux-user/config-devices.mak.tmp GEN armeb-linux-user/config-devices.mak.tmp GEN aarch64-linux-user/config-devices.mak GEN arm-linux-user/config-devices.mak.tmp GEN cris-linux-user/config-devices.mak.tmp GEN alpha-linux-user/config-devices.mak GEN hppa-linux-user/config-devices.mak.tmp GEN armeb-linux-user/config-devices.mak GEN arm-linux-user/config-devices.mak GEN i386-linux-user/config-devices.mak.tmp GEN m68k-linux-user/config-devices.mak.tmp GEN cris-linux-user/config-devices.mak GEN microblazeel-linux-user/config-devices.mak.tmp GEN hppa-linux-user/config-devices.mak GEN microblaze-linux-user/config-devices.mak.tmp GEN i386-linux-user/config-devices.mak GEN m68k-linux-user/config-devices.mak GEN microblazeel-linux-user/config-devices.mak GEN mips64el-linux-user/config-devices.mak.tmp GEN mips64-linux-user/config-devices.mak.tmp GEN mipsel-linux-user/config-devices.mak.tmp GEN microblaze-linux-user/config-devices.mak GEN mips-linux-user/config-devices.mak.tmp GEN mips64el-linux-user/config-devices.mak GEN mips64-linux-user/config-devices.mak GEN mipsn32el-linux-user/config-devices.mak.tmp GEN mipsel-linux-user/config-devices.mak GEN mips-linux-user/config-devices.mak GEN mipsn32-linux-user/config-devices.mak.tmp GEN or1k-linux-user/config-devices.mak.tmp GEN nios2-linux-user/config-devices.mak.tmp GEN mipsn32el-linux-user/config-devices.mak GEN mipsn32-linux-user/config-devices.mak GEN ppc64abi32-linux-user/config-devices.mak.tmp GEN nios2-linux-user/config-devices.mak GEN ppc64le-linux-user/config-devices.mak.tmp GEN or1k-linux-user/config-devices.mak GEN ppc64-linux-user/config-devices.mak.tmp GEN ppc-linux-user/config-devices.mak.tmp GEN ppc64abi32-linux-user/config-devices.mak GEN ppc64le-linux-user/config-devices.mak GEN ppc64-linux-user/config-devices.mak GEN s390x-linux-user/config-devices.mak.tmp GEN sh4eb-linux-user/config-devices.mak.tmp GEN sh4-linux-user/config-devices.mak.tmp GEN ppc-linux-user/config-devices.mak GEN sparc32plus-linux-user/config-devices.mak.tmp GEN sh4-linux-user/config-devices.mak GEN sh4eb-linux-user/config-devices.mak GEN s390x-linux-user/config-devices.mak GEN sparc64-linux-user/config-devices.mak.tmp GEN sparc-linux-user/config-devices.mak.tmp GEN tilegx-linux-user/config-devices.mak.tmp GEN sparc32plus-linux-user/config-devices.mak GEN sparc64-linux-user/config-devices.mak GEN sparc-linux-user/config-devices.mak GEN x86_64-linux-user/config-devices.mak.tmp GEN config-host.h GEN tilegx-linux-user/config-devices.mak GEN qemu-options.def GEN x86_64-linux-user/config-devices.mak GEN qmp-commands.h 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-88xjlrnz/src/build/hypertrace/trace.h GEN tests/test-qapi-visit.h GEN tests/test-qapi-types.h GEN tests/test-qmp-commands.h GEN tests/test-qmp-introspect.h GEN tests/test-qapi-event.h make: *** No rule to make target 'util/trace.h-timestamp', needed by 'util/trace.h'. Stop. make: *** Waiting for unfinished jobs.... GEN trace-root.h rm /var/tmp/patchew-tester-tmp-88xjlrnz/src/build/hypertrace/trace.h-timestamp === 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] 8+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova ` (5 preceding siblings ...) 2017-07-26 17:13 ` [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply @ 2017-07-26 17:13 ` no-reply 6 siblings, 0 replies; 8+ messages in thread From: no-reply @ 2017-07-26 17:13 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 v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Message-id: 150108770564.11502.9555409719195740021.stgit@frigg.lan Type: series === 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/150108770564.11502.9555409719195740021.stgit@frigg.lan -> patchew/150108770564.11502.9555409719195740021.stgit@frigg.lan Switched to a new branch 'test' 22e4769dcf hypertrace: Add guest-side user-level library e6d88a148e hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event 11dbcccf1d hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event 3e587b35c2 hypertrace: Add tracing event "guest_hypertrace" 4f4b20a4b3 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-k9qtq5ke/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-k9qtq5ke/src/install BIOS directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/share/qemu binary directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/bin library directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/lib module directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/lib/qemu libexec directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/libexec include directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/include config directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/etc local state directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/var Manual directory /var/tmp/patchew-tester-tmp-k9qtq5ke/src/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /var/tmp/patchew-tester-tmp-k9qtq5ke/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-k9qtq5ke/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 gmake: *** No rule to make target 'util/trace.h-timestamp', needed by 'util/trace.h'. Stop. gmake: *** Waiting for unfinished jobs.... GEN trace-root.h rm /var/tmp/patchew-tester-tmp-k9qtq5ke/src/build/hypertrace/trace.h-timestamp === 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] 8+ messages in thread
end of thread, other threads:[~2017-07-26 17:14 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-07-26 16:48 [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova 2017-07-26 16:52 ` [Qemu-devel] [PATCH v5 1/5] hypertrace: Add documentation Lluís Vilanova 2017-07-26 16:56 ` [Qemu-devel] [PATCH v5 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova 2017-07-26 17:00 ` [Qemu-devel] [PATCH v5 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova 2017-07-26 17:04 ` [Qemu-devel] [PATCH v5 4/5] hypertrace: [softmmu] " Lluís Vilanova 2017-07-26 17:08 ` [Qemu-devel] [PATCH v5 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova 2017-07-26 17:13 ` [Qemu-devel] [PATCH v5 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply 2017-07-26 17:13 ` no-reply
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.