I have a 32bit Slackware box that I keep on current. After some recent updates I can no longer use the VirtualBox .run script to install. I raised a bug report with VirtualBox but they think it is a problem with libgcc in Slackware.
To reproduce:
1. Install slackware current 32bit.
2. Download VirtualBox-5.1.22-115126-Linux_x86.run (Linux All Distributions i386)
3. Execute VirtualBox-5.1.22-115126-Linux_x86.run as root.
Installation will fail:
Code:
Verifying archive integrity... All good.
Uncompressing VirtualBox for Linux installation.............
VirtualBox Version 5.1.22 r115126 (2017-04-28T15:48:48Z) installer
Installing VirtualBox to /opt/VirtualBox
Python found: python, installing bindings...
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.
There were problems setting up VirtualBox. To re-start the set-up process, run
/sbin/vboxconfig
as root.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.
Checking dmesg there are the following errors:
Code:
[ 1864.907681] vboxdrv: Unknown symbol __udivmoddi4 (err 0)
[ 1914.540632] vboxdrv: Unknown symbol __udivmoddi4 (err 0)
[ 1914.843340] vboxdrv: Unknown symbol __udivmoddi4 (err 0)
[ 1964.479924] vboxdrv: Unknown symbol __udivmoddi4 (err 0)
Using the amd64 version on Slackware64 current works perfectly.
Spent some time digging and there are differences in the libgcc.a library between 32bit and 64bit possibly pointing to undefined reference but I don't know enough to take this further at the moment.
On Slackware current 32 bit
Code:
root@slack-current:~# readelf -Ws /usr/lib/gcc/i586-slackware-linux/7.1.0/libgcc.a | grep udiv
File: /usr/lib/gcc/i586-slackware-linux/7.1.0/libgcc.a(_udivdi3.o)
7: 00000000 290 FUNC GLOBAL HIDDEN 1 __udivdi3
File: /usr/lib/gcc/i586-slackware-linux/7.1.0/libgcc.a(_udivmoddi4.o)
7: 00000000 523 FUNC GLOBAL HIDDEN 1 __udivmoddi4
File: /usr/lib/gcc/i586-slackware-linux/7.1.0/libgcc.a(_udiv_w_sdiv.o)
7: 00000000 3 FUNC GLOBAL HIDDEN 1 __udiv_w_sdiv
20: 00000000 0 NOTYPE GLOBAL DEFAULT UND __udivmoddi4
32: 00000000 0 NOTYPE GLOBAL DEFAULT UND __udivmoddi4
and on Slackware current 64bit
Code:
root@slack64-current:~# readelf -Ws /usr/lib64/gcc/x86_64-slackware-linux/7.1.0/libgcc.a | grep udiv
File: /usr/lib64/gcc/x86_64-slackware-linux/7.1.0/libgcc.a(_udivdi3.o)
7: 0000000000000000 255 FUNC GLOBAL HIDDEN 1 __udivti3
File: /usr/lib64/gcc/x86_64-slackware-linux/7.1.0/libgcc.a(_udivmoddi4.o)
7: 0000000000000000 454 FUNC GLOBAL HIDDEN 1 __udivmodti4
File: /usr/lib64/gcc/x86_64-slackware-linux/7.1.0/libgcc.a(_udiv_w_sdiv.o)
7: 0000000000000000 3 FUNC GLOBAL HIDDEN 1 __udiv_w_sdiv
So on 32bit is this indicating some undefined references to __udivmoddi4? I don't know if this is the problem or a red herring though.
Anyone have any ideas?