qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 6/9] error-report: add a callback to overwrite error_vprintf


From: Marc-André Lureau
Subject: Re: [PATCH 6/9] error-report: add a callback to overwrite error_vprintf
Date: Thu, 7 Jul 2022 22:05:14 +0400

Hi

On Thu, Jul 7, 2022 at 4:18 PM Markus Armbruster <armbru@redhat.com> wrote:
marcandre.lureau@redhat.com writes:

> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> error_vprintf() is implemented in monitor.c, which overrides the
> default implementation from stubs/, while avoiding a direct dependency
> to the monitor from error-report.c.
>
> However, the stub solution isn't working when moving error-report.c and
> stubs/error-printf.c in a common library. Linking with such library
> creates conflicts for the error_vprintf() implementations

I'm feeling dense today: how?

If I try to overwrite a symbol in qemu when linking with a static library from a subproject, the linker fails:

FAILED: storage-daemon/qemu-storage-daemon
cc -m64 -mcx16  -o storage-daemon/qemu-storage-daemon storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-introspect.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-types.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-visit.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-commands.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-init-commands.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-events.c.o storage-daemon/qemu-storage-daemon.p/meson-generated_.._qapi_qapi-emit-events.c.o storage-daemon/qemu-storage-daemon.p/qemu-storage-daemon.c.o -Wl,--as-needed -Wl,--no-undefined -pie -Wl,--whole-archive libblockdev.fa libblock.fa libcrypto.fa libauthz.fa libqom.fa libio.fa -Wl,--start-group libevent-loop-base.a libchardev.fa libqmp.fa -Wl,--no-whole-archive -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -fstack-protector-strong -Wl,-rpath,/usr/lib64/iscsi -Wl,-rpath-link,/usr/lib64/iscsi libqemuutil.a subprojects/libvhost-user/libvhost-user-glib.a subprojects/libvhost-user/libvhost-user.a subprojects/qemu-common/libqemu-common.a libblockdev.fa subprojects/libvduse/libvduse.a libblock.fa libcrypto.fa libauthz.fa libqom.fa libio.fa libchardev.fa libqmp.fa @block.syms /usr/lib64/libgnutls.so /usr/lib64/liburing.so /usr/lib64/libgio-2.0.so /usr/lib64/libgobject-2.0.so /usr/lib64/libglib-2.0.so -Wl,--export-dynamic -pthread -lgmodule-2.0 -lglib-2.0 -lglib-2.0 -lm /usr/lib64/libpixman-1.so -lgmodule-2.0 -lglib-2.0 -lglib-2.0 -lgmodule-2.0 -lglib-2.0 -lglib-2.0 -lgmodule-2.0 -lglib-2.0 -lglib-2.0 /usr/lib64/libfuse3.so -lpthread -lgmodule-2.0 -lglib-2.0 -lglib-2.0 /usr/lib64/libzstd.so /usr/lib64/libz.so /usr/lib64/iscsi/libiscsi.so -laio -lpam -lutil -Wl,--end-group
/usr/bin/ld: subprojects/qemu-common/libqemu-common.a.p/src_error-report.c.o: in function `error_init':
/home/elmarco/src/qemu/build/../subprojects/qemu-common/src/error-report.c:413: multiple definition of `error_init'; libqmp.fa.p/monitor_qmp.c.o:/home/elmarco/src/qemu/build/../monitor/qmp.c:40: first defined here

But I can't really explain why it works when overwriting symbols from libqemuutil.a, I am a bit puzzled here. Am I missing something obvious? (this is a bit of dark linker magic going on)



Why would the linker pull in error-printf.o when the symbols it defines
are already provided by .o the linker processed before the library
containing error-printf.o?

>                                                           (and weak
> symbols aren't great either).

Weak symbols are great, except Windows isn't.

>                               Instead, use the "traditional" approach to
> provide overidable callbacks.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>




--
Marc-André Lureau

reply via email to

[Prev in Thread] Current Thread [Next in Thread]