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