[Libguestfs] [nbdkit PATCH v7 2/2] vddk: Drive library loading from libdir parameter.

Eric Blake eblake at redhat.com
Tue Feb 18 17:37:54 UTC 2020


On 2/18/20 11:28 AM, Richard W.M. Jones wrote:
> On Tue, Feb 18, 2020 at 11:05:11AM -0600, Eric Blake wrote:
>>     static const char *sonames[] = {
>> -    /* Prefer the newest library in case multiple exist. */
>> +    /* Prefer the newest library in case multiple exist.  Check two
>> +     * possible directories: the usual VDDK installation puts .so
>> +     * files in an arch-specific subdirectory of $libdir (although
>> +     * only VDDK 5 supported 32-bit); but in our testsuite is easier
>> +     * to write if we point libdir directly to a stub .so.
>> +     */
>> +    "lib64/libvixDiskLib.so.6",
>>       "libvixDiskLib.so.6",
>> +    "lib64/libvixDiskLib.so.5",
>> +    "lib32/libvixDiskLib.so.5",
>>       "libvixDiskLib.so.5",
> 
> Should we put #ifdef around the lib64/ and lib32/ versions?

Not necessary: dlopen() fails to open a .so from the wrong arch (on a 
32-bit platform, even though lib64/libvixDiskLib.so.5 exists, it will 
fail to load, and we'll then try dlopen()ing lib32/libvixDiskLib.so.5). 
We don't re-exec until after a successful dlopen(), but it was not the 
initial dlopen() that was giving us grief, but the fact that 
VixDiskLib_InitEx() triggers a further dlopen() which in turn has an 
unanchored dependency, and this still re-exec's before that point.

> 
> Another alternative might be to get rid of the lib32/ version
> entirely, only compile the plugin for x86-64, and set the minimum
> version of VDDK in the docs to 5.5.5 (see nbdkit-vddk-plugin.pod
> section "SUPPORTED VERSIONS OF VDDK").

Would be reasonable as a followup patch.

> 
> But the series looks good now, so
> 
> ACK
> 
> Thanks for the tremendous amount of effort that went into the
> apparently simple change :-)

You bet.  Took both of us longer than expected, but I like the results. 
And I got to learn a lot about ld.so (there's something satisfying about 
understanding how the black magic of shared libraries actually works)

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list