Port-mips archive

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

undefined functions and lazy dlopen()



Hello,
trying to get the sis xorg driver working on loonson, I hit an issue with
dlopen() and lazy bindings. Note that this is with n32 binaries, not o32
(this makes a difference in mips_reloc.c).
Loading the module, xorg complains:

[  1566.115] (II) Loading /usr/X11R7/lib/modules/drivers/sis_drv.so
[  1566.124] (EE) Failed to load /usr/X11R7/lib/modules/drivers/sis_drv.so: 
/usr/X11R7/lib/modules/drivers/sis_drv.so: Undefined symbol 
"VBESetDisplayStart" (symnum = 301)

it also commplains for the siliconmotion driver:

[  1565.970] (II) Loading /usr/X11R7/lib/modules/drivers/siliconmotion_drv.so
[  1565.975] (EE) Failed to load 
/usr/X11R7/lib/modules/drivers/siliconmotion_drv.so: 
/usr/X11R7/lib/modules/drivers/siliconmotion_drv.so: Undefined symbol 
"exaOffscreenFree" (symnum = 101)

both functions have a 0 address in their respective .so, unlinke other
undefined functions:
cuba# objdump -x /usr/X11R7/lib/modules/drivers/siliconmotion_drv.so | grep exa
0001b2b0       F *UND*  00000000 exaDriverFini
0001b310       F *UND*  00000000 exaDriverAlloc
0001b3d0       F *UND*  00000000 exaWaitSync
0001b480       F *UND*  00000000 exaOffscreenAlloc
0001b520       F *UND*  00000000 exaDriverInit
0001b710       F *UND*  00000000 exaGetPixmapPitch
0001b770       F *UND*  00000000 exaGetPixmapOffset
00000000       F *UND*  00000000 exaOffscreenFree
cuba# objdump -x /usr/X11R7/lib/modules/drivers/sis_drv.so.0 | grep VBE         
0007b820       F *UND*  00000000 VBEGetVBEMode
0007b840       F *UND*  00000000 VBESaveRestore
00000000         *UND*  00000000 VBESetDisplayStart
0007bc00       F *UND*  00000000 VBEGetModeInfo
0007bdd0       F *UND*  00000000 VBEExtendedInit
0007be10       F *UND*  00000000 VBESetVBEMode
0007bec0       F *UND*  00000000 VBEFreeModeInfo
0007bff0       F *UND*  00000000 VBESetGetLogicalScanlineLength
0007c040       F *UND*  00000000 VBEFreeVBEInfo
0007c050       F *UND*  00000000 VBEGetVBEInfo

(also, VBESetDisplayStart is not marked F but I'm not sure it's an issue).

I think this is because these functions are R_MIPS_GOT_DISP and not
R_MIPS_CALL16:

/dsk/l1/misc/bouyer/tmp/evbmips64el/obj/netbsd-6/src/tooldir/bin/mips64el--netbsd-objdump
 -x sis_driver.o | grep VBE
000020e0 R_MIPS_CALL16     VBESaveRestore
00002118 R_MIPS_CALL16     VBESetVBEMode
00002140 R_MIPS_CALL16     VBEGetVBEMode
00002168 R_MIPS_CALL16     VBESaveRestore
0000222c R_MIPS_CALL16     VBESaveRestore
00002414 R_MIPS_CALL16     VBEExtendedInit
00010b30 R_MIPS_GOT_DISP   VBESetDisplayStart
00011388 R_MIPS_CALL16     VBESetVBEMode
000113b4 R_MIPS_CALL16     VBESetGetLogicalScanlineLength
00013748 R_MIPS_CALL16     VBESetVBEMode
00013d38 R_MIPS_CALL16     VBESetVBEMode
00013f3c R_MIPS_CALL16     VBESetVBEMode
000144a4 R_MIPS_CALL16     VBEExtendedInit
0001a758 R_MIPS_CALL16     VBEGetVBEInfo
0001a7c8 R_MIPS_CALL16     VBEGetModeInfo
0001a80c R_MIPS_CALL16     VBEFreeModeInfo
0001be3c R_MIPS_CALL16     VBEFreeVBEInfo
0001becc R_MIPS_CALL16     VBEFreeModeInfo

houla:/dsk/l1/misc/bouyer/tmp/evbmips64el/obj/dsk/l1/misc/bouyer/netbsd-6/src/external/mit/xorg/server/drivers/xf86-video-sis>/dsk/l1/misc/bouyer/tmp/evbmips64el/obj/netbsd-6/src/tooldir/bin/mips64el--netbsd-objdump
 -x ../xf86-video-siliconmotion/smi_video.o | grep exa
00000000         *UND*  00000000 exaOffscreenFree
00000000         *UND*  00000000 exaOffscreenAlloc
00001d00 R_MIPS_CALL16     exaOffscreenFree
00001d18 R_MIPS_CALL16     exaOffscreenAlloc
00003470 R_MIPS_GOT_DISP   exaOffscreenFree

Any idea ?

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index