117 lines
4.3 KiB
Diff
117 lines
4.3 KiB
Diff
From ba3068eb1a349ec4ed8b7ccdae76450f0c315be9 Mon Sep 17 00:00:00 2001
|
|
From: Stefan Hajnoczi <stefanha@redhat.com>
|
|
Date: Thu, 19 Nov 2020 17:23:11 -0500
|
|
Subject: [PATCH 18/18] trace: use STAP_SDT_V2 to work around symbol visibility
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Stefan Hajnoczi <stefanha@redhat.com>
|
|
Message-id: <20201119172311.942629-2-stefanha@redhat.com>
|
|
Patchwork-id: 99779
|
|
O-Subject: [RHEL-8.4.0 qemu-kvm PATCH 1/1] trace: use STAP_SDT_V2 to work around symbol visibility
|
|
Bugzilla: 1898700
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com>
|
|
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
|
|
QEMU binaries no longer launch successfully with recent SystemTap
|
|
releases. This is because modular QEMU builds link the sdt semaphores
|
|
into the main binary instead of into the shared objects where they are
|
|
used. The symbol visibility of semaphores is 'hidden' and the dynamic
|
|
linker prints an error during module loading:
|
|
|
|
$ ./configure --enable-trace-backends=dtrace --enable-modules ...
|
|
...
|
|
Failed to open module: /builddir/build/BUILD/qemu-4.2.0/s390x-softmmu/../block-curl.so: undefined symbol: qemu_curl_close_semaphore
|
|
|
|
The long-term solution is to generate per-module dtrace .o files and
|
|
link them into the module instead of the main binary.
|
|
|
|
In the short term we can define STAP_SDT_V2 so dtrace(1) produces a .o
|
|
file with 'default' symbol visibility instead of 'hidden'. This
|
|
workaround is small and easier to merge for QEMU 5.2 and downstream
|
|
backports.
|
|
|
|
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1898700
|
|
Cc: wcohen@redhat.com
|
|
Cc: fche@redhat.com
|
|
Cc: kraxel@redhat.com
|
|
Cc: rjones@redhat.com
|
|
Cc: ddepaula@redhat.com
|
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
Reviewed-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
|
(cherry picked from commit 4b265c79a85bb35abe19aacea6954c1616521639)
|
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
|
Conflicts:
|
|
trace/meson.build
|
|
Downstream uses makefiles, so move the dtrace invocation changes to
|
|
rules.mak and Makefile.
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
Makefile | 4 ++--
|
|
configure | 7 +++++++
|
|
rules.mak | 2 +-
|
|
3 files changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index ff05c309497..29b01a13ee3 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -198,7 +198,7 @@ tracetool-y += $(shell find $(SRC_PATH)/scripts/tracetool -name "*.py")
|
|
$< > $@,"GEN","$(@:%-timestamp=%)")
|
|
|
|
%/trace-dtrace.h: %/trace-dtrace.dtrace $(tracetool-y)
|
|
- $(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
|
+ $(call quiet-command,dtrace -o $@ -DSTAP_SDT_V2 -h -s $<, "GEN","$@")
|
|
|
|
%/trace-dtrace.o: %/trace-dtrace.dtrace $(tracetool-y)
|
|
|
|
@@ -258,7 +258,7 @@ trace-dtrace-root.dtrace-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config
|
|
$< > $@,"GEN","$(@:%-timestamp=%)")
|
|
|
|
trace-dtrace-root.h: trace-dtrace-root.dtrace
|
|
- $(call quiet-command,dtrace -o $@ -h -s $<, "GEN","$@")
|
|
+ $(call quiet-command,dtrace -o $@ -DSTAP_SDT_V2 -h -s $<, "GEN","$@")
|
|
|
|
trace-dtrace-root.o: trace-dtrace-root.dtrace
|
|
|
|
diff --git a/configure b/configure
|
|
index 5120c1409a7..c62b61403f6 100755
|
|
--- a/configure
|
|
+++ b/configure
|
|
@@ -5275,6 +5275,13 @@ if have_backend "dtrace"; then
|
|
trace_backend_stap="no"
|
|
if has 'stap' ; then
|
|
trace_backend_stap="yes"
|
|
+
|
|
+ # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
|
|
+ # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
|
|
+ # instead. QEMU --enable-modules depends on this because the SystemTap
|
|
+ # semaphores are linked into the main binary and not the module's shared
|
|
+ # object.
|
|
+ QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
|
|
fi
|
|
fi
|
|
|
|
diff --git a/rules.mak b/rules.mak
|
|
index 967295dd2b6..bdfc223a5a1 100644
|
|
--- a/rules.mak
|
|
+++ b/rules.mak
|
|
@@ -101,7 +101,7 @@ LINK = $(call quiet-command, $(LINKPROG) $(QEMU_LDFLAGS) $(QEMU_CFLAGS) $(CFLAGS
|
|
-c -o $@ $<,"OBJC","$(TARGET_DIR)$@")
|
|
|
|
%.o: %.dtrace
|
|
- $(call quiet-command,dtrace -o $@ -G -s $<,"GEN","$(TARGET_DIR)$@")
|
|
+ $(call quiet-command,dtrace -o $@ -DSTAP_SDT_V2 -G -s $<,"GEN","$(TARGET_DIR)$@")
|
|
|
|
DSO_OBJ_CFLAGS := -fPIC -DBUILD_DSO
|
|
module-common.o: CFLAGS += $(DSO_OBJ_CFLAGS)
|
|
--
|
|
2.27.0
|
|
|