On 08/29/2013 07:08 PM, Eric Blake wrote:
> We are already providing an LD_PRELOAD override of
> dbus_message_set_reply_serial as part of that test, which SHOULD be
> avoiding that assert (at least, it did so on both RHEL 5 and current
> Fedora) (see commit 524f52c). Can you do some debugging under gdb to
> see why the preload is not being used on Ubuntu's version of dbus?
>
The mechanism itself is working fine, but looking at the backtrace it
seems that dbus_message_set_reply_serial is called from within a
function that's not part of the mock library:
Breakpoint 1, 0x00007ffff5aaf8e0 in dbus_message_set_reply_serial () from /lib/x86_64-linux-gnu/libdbus-1.so.3
(gdb) bt
#0 0x00007ffff5aaf8e0 in dbus_message_set_reply_serial () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#1 0x00007ffff5ab2a28 in dbus_message_new_method_return () from /lib/x86_64-linux-gnu/libdbus-1.so.3
#2 0x00007ffff770c71f in virDBusCallMethod (conn=0x1, replyout=0x0, destination=<optimized out>,
path=<optimized out>, iface=0x7ffff791c8f0 "org.freedesktop.machine1.Manager", member=<optimized out>,
types=0x7ffff791c9cb "sayssusa(sv)") at ../../src/util/virdbus.c:1151
#3 0x00007ffff77459c1 in virSystemdCreateMachine (name=<optimized out>, drivername=0x411d3d "lxc",
privileged=<optimized out>,
uuid=0x7fffffffded0 "\001\001\001\001\002\002\002\002\003\003\003\003\004\004\004\004",
rootdir=<optimized out>, pidleader=123, iscontainer=true, partition=0x411db2 "highpriority.slice")
at ../../src/util/virsystemd.c:213
#4 0x00000000004031e9 in testCreateContainer (opaque=<optimized out>) at ../../tests/virsystemdtest.c:39
#5 0x0000000000403f9d in virtTestRun (title=<optimized out>, nloops=1, body=0x403150 <testCreateContainer>,
data=0x0) at ../../tests/testutils.c:169
#6 0x0000000000402bc1 in mymain () at ../../tests/virsystemdtest.c:178
#7 0x000000000040468b in virtTestMain (argc=1, argv=<optimized out>, func=0x402b90 <mymain>)
at ../../tests/testutils.c:772
#8 0x00000000004029e0 in main (argc=1, argv=0x7fffffffe168) at ../../tests/virsystemdtest.c:207
as can be seen here:
ldd -r .libs/virsystemdmock.so
undefined symbol: dbus_set_error (.libs/virsystemdmock.so)
linux-vdso.so.1 => (0x00007fff69bb2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd46ecf0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd46f2d2000)
undefined symbol: dbus_message_new_error (.libs/virsystemdmock.so)
undefined symbol: dbus_message_new_method_return (.libs/virsystemdmock.so)
although the callstack seems to have fallen prey to the optimizer,
virDBusCallMethod calls the mock dbus_connection_send_with_reply_and_block
which in turn calls the real dbus_message_new_method_return which again
calls dbus_message_set_reply_serial, but the real one instead of the mock
version. On RHEL it's calling the mock ...reply_serial.
On other occcasions I have observed that libtool on Ubuntu behaves differently
than on RHEL or Fedora and maybe that's why the LD_PRELOAD works differently
for intra-library calls there. But here I am entering the realm of wild
speculations...
--
Mit freundlichen Grüßen/Kind Regards
Viktor Mihajlovski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294