Hello,
I am trying to run PolyML on i386 linux, and I can't get it to work. I get
segmentation faults with some kernel versions, and mmap failures with other
versions.
I first tried with kernel 2.6.14 and with 2.6.17.2 (current one in debian-sid).
On both setups PolyML segfaults. When run with GDB it shows:
c@cek:/tmp$ gdb ./poly-driver
GNU gdb 6.4.90-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...Using host libthread_db library
+"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) run
Starting program: /tmp/poly-driver
Poly/ML RTS version I386-4.1.4 (14:18:30 Nov 14 2005)
Copyright (c) 2002-5 CUTS and contributors.
Running with heap parameters (h=10240K,ib=2048K,ip=100%,mb=6144K,mp=20%)
Program received signal SIGSEGV, Segmentation fault.
0xa7e84bd8 in mmap () from /lib/tls/i686/cmov/libc.so.6
PolyML 4.2 also segfaults, on the same mmap, on both above kernel versions.
After upgrading the kernel to 2.6.18 I no longer get the segfault, but
a proper error message. PolyML 4.2.0 compiled with EXTRA_DEBUG sais:
c@cek:~/isa/driver420$ ./poly
Poly/ML RTS version I386-4.2.0 (07:41:26 Oct 6 2006)
Copyright (c) 2002-5 CUTS and contributors.
Running with heap parameters (h=10240K,ib=2048K,ip=100%,mb=6144K,mp=20%)
Mapping ./ML_dbase
Reading in header: 00002000 bytes
MMAP; addr=0x20000000, len=00002000, prot=00000007, flags=00000032, fd=-1, off=00000000
Mapping in H->i_space
Reading page table; page: 1, length: 00000004
MMAP; addr=0x20002000, len=00008000, prot=00000007, flags=00000032, fd=-1, off=00000000
Mapping in pages
MMAP; addr=0x2070c000, len=00502000, prot=00000005, flags=00000012, fd=3, off=0000c000
Mapping in H->m_space
Reading page table; page: 5, length: 00000001
MMAP; addr=0x2000a000, len=00002000, prot=00000007, flags=00000032, fd=-1, off=00000000
Mapping in pages
MMAP; addr=0x2000c000, len=000e6000, prot=00000005, flags=00000012, fd=3, off=0050e000
allocating H->m_space.bitmap
MMAP; addr=0x3f002000, len=00007300, prot=00000007, flags=00000022, fd=-1, off=00000000
allocating H->i_space.bitmap
MMAP; addr=0x3f002000, len=00028100, prot=00000007, flags=00000022, fd=-1, off=00000000
MMAP; addr=0x3f002000, pa=0x6fe38000
MMAP; addr=0x3f000000, len=00002000, prot=00000007, flags=00000032, fd=-1, off=00000000
entry no 13, at address 3f0001a0 is a jumpentry to 80755c8
entry no 14, at address 3f0001c0 is a jumpentry to 807550e
entry no 84, at address 3f000a80 is a jumpentry to 8074dbf
MMAP; addr=0x97e00000, len=00200000, prot=00000007, flags=00000032, fd=-1, off=00000000
** MMAP: Unable to map file: 0 to address 0x97e00000
** errno=12: Cannot allocate memory
** This may be due to insufficient swap space, will retry in 2 seconds ...
And it never succeeds, but goes in an infinite loop.
PolyML 4.1.3 also fails, just the addresses in the error are different, the mmap that
fails shows:
** MMAP: Unable to map file: 0 to address 0xa7e00000
PolyML seems to use only the kernel and glibc, so let me mention that my glibc
version is 2.3.6.ds1-5 (latest one on debian-sid).
Any suggestions on how to get PolyML to run?
Cezary Kaliszyk