Unable to run OS/2 Warp4.52
Host environment
-
Operating systems: Android11 (Termux) and Linux (Debian Bullseye)
-
OS/kernel versions: Android11 and 5.10.0-28-amd64
-
Architecture: x86 (Linux Debian) and ARM (Android)
-
QEMU flavor: qemu-system-x86_64 and qemu-system-i386
-
QEMU version: 8.0.2 (Android/Termux) and 5.0.2 (Debian 1:5.2+dfsg-11+deb11u3)
-
QEMU command line:
qemu-system-x86_64 \ -cpu pentium3 \ -m size=48 \ -vga std \ -parallel none \ -drive file=os2warp4.qcow2 \ -boot c
Emulated/Virtualized environment
- Operating system: OS/2 Warp4.52 (or Warp4 + fixpack15)
- OS/kernel version:
- Architecture: x86
Description of problem
Operating system crashes upon boot.
Steps to reproduce
- Install OS/2 Warp4
- Apply Fixpack15
- Try to boot the system
Additional information
This is a very old bug that seems to render a whole family of Operating Systems (OS/2 Warp4 and eComStation) unusable under Qemu. Warp4 works, in the sense that it does install and run, but just until it is updated to 4.52 (which is necessary to get a useable guest)
I found traces of its existence as far as: https://bugs.launchpad.net/qemu/+bug/1743441 https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg02337.html
And i found the issue brieffly commented at https://www.os2world.com/forum/index.php?topic=2346.0 I quote:
'Regarding QEMU/KVM, OS/2 runs in QEMU mostly fine. Except the trap in os2lvm.dmd and non-working netbeui.os2 and tcpbeui.os2. The problem with os2lvm.dmd is because QEMU closely follows the intel spec, which is incorrect. The spec says that 16-bit SGDT instruction behaves the same like in i286 processor. But it's not true, it behaves like i386 instruction. So, QEMU emulates SGDT 16-bit instruction incorrectly. OS2LVM.DMD uses 16-bit SGDT instruction and it hits the problem.'
After a brief discussion on the Warp4 group at groups.io where I was told that this is indeed a Qemu bug, I thought someone has to report on that.