| Summary: | dev-lisp/clozurecl fails to build(heap randomization (CONFIG_COMPAT_BRK=n) issue | ||
|---|---|---|---|
| Product: | Gentoo Linux | Reporter: | Diego Elio Pettenò (RETIRED) <flameeyes> |
| Component: | New packages | Assignee: | Common Lisp Bugs <common-lisp> |
| Status: | RESOLVED TEST-REQUEST | ||
| Severity: | normal | CC: | grozin |
| Priority: | High | ||
| Version: | unspecified | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Package list: | Runtime testing required: | --- | |
| Attachments: | Build log | ||
|
Description
Diego Elio Pettenò (RETIRED)
2010-01-05 13:55:04 UTC
Created attachment 215289 [details]
Build log
On 2 computers I use (pure ~x86), immediately after the line ;Wrote bootstrapping image: #P"/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32" I have: ;Wrote heap image: #P"/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/lx86cl.image" >>> Source compiled. >>> Test phase [not enabled]: dev-lisp/clozurecl-1.4 >>> Install clozurecl-1.4 into /var/tmp/portage/dev-lisp/clozurecl-1.4/image/ category dev-lisp >>> Completed installing clozurecl-1.4 into /var/tmp/portage/dev-lisp/clozurecl-1.4/image/ And you have instead: > Error: Errors (:SIGNALED 6) reloading boot image: > ;Loading level-1.lx32fsl etc. What can be the difference? My emerge --info is very similar to yours. The first difference is the processor: my laptop has pentium-m, my desktop has celeron. Maybe, the ccl binary does not like amd? (this would be a pity). Another difference is the kernel. My laptop runs 2.6.31-tuxonice, and desktop 2.6.32-gentoo. Both with "Disable heap randomization" - lisps often dislike randomization, non-executable stack and heap, and other security measures. Does your kernel have any of these security features enabled? Several users reported that they use clozurecl successfully. So, it does not fail for everybody. We have to identify the difference. I have heap randomization turned on, that might be the first problem. But the tinderbox has *everything* in the tree merged in so you might want to look at possible automagic dependencies as well. (In reply to comment #3) > I have heap randomization turned on, that might be the first problem. > > But the tinderbox has *everything* in the tree merged in so you might want to > look at possible automagic dependencies as well. > I can't reproduce this. Automagic dependencies? From what I've seen nothing from autotools is used, and nothing that seems like an automagic dep either. I think grozin's approach is the right one, I haven't checked my kernel configuration yet. But here's my emerge --info: Portage 2.2_rc61 (default/linux/x86/10.0, gcc-4.3.4, glibc-2.11-r1, 2.6.32-gentoo i686) ================================================================= System uname: Linux-2.6.32-gentoo-i686-Intel-R-_Core-TM-2_Duo_CPU_T5550_@_1.83GHz-with-gentoo-2.0.1 Timestamp of tree: Sat, 09 Jan 2010 17:00:01 +0000 distcc 3.1 i686-pc-linux-gnu [disabled] app-shells/bash: 4.0_p35 dev-java/java-config: 1.3.7-r1, 2.1.10 dev-lang/python: 2.6.4, 3.1.1-r1 dev-python/pycrypto: 2.1.0 dev-util/cmake: 2.8.0 sys-apps/baselayout: 2.0.1 sys-apps/openrc: 0.6.0 sys-apps/sandbox: 2.2 sys-devel/autoconf: 2.13, 2.65 sys-devel/automake: 1.5, 1.7.9-r1, 1.8.5-r3, 1.9.6-r3, 1.10.3, 1.11.1 sys-devel/binutils: 2.20 sys-devel/gcc-config: 1.4.1 sys-devel/libtool: 2.2.6b virtual/os-headers: 2.6.30-r1 ACCEPT_KEYWORDS="x86 ~x86" ACCEPT_LICENSE="*" CBUILD="i686-pc-linux-gnu" CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/X11/xkb /usr/share/config" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5/ext-active/ /etc/php/cgi-php5/ext-active/ /etc/php/cli-php5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" DISTDIR="/usr/portage/distfiles" FEATURES="assume-digests distlocks fixpackages news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unmerge-logs unmerge-orphans userfetch" GENTOO_MIRRORS="http://distfiles.gentoo.org" LDFLAGS="-Wl,-O1" LINGUAS="es es_AR" MAKEOPTS="-j3" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/local/portage /usr/local/portage/layman/kde-testing /usr/local/portage/layman/qting-edge /usr/local/portage/layman/sunrise /usr/local/portage/layman/lisp /usr/local/portage/layman/mozilla /usr/local/portage/layman/science /usr/local/portage/layman/x11" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="3dnow X aac accessibility acl acpi additions alsa berkdb bzip2 cairo cdr cgi cli clucene consolekit cracklib crypt ctype cups curl cxx dbus divx djvu dri dvd dvdr dvdread encode examples fastcgi ffmpeg fortran fuse gd gdbm gif glib gnome gpm gstreamer gtk hal httpd iconv ieee1394 ipv6 java jpeg kde kqemu lame laptop ldap live mmx mng mod modules moonlight mp3 mp4live mplayer mudflap mysql mysqli ncurses nls nptl nptlonly ogg openal opengl openmp pam pcre pdf perl php player plotutils png pppd python qt3 qt3support qt4 quicktime raptor readline realmedia redland reflection rss samba sdl session spl sql sqlite sqlite3 srt sse sse2 ssl stream svg symlink sysfs tcpd tetex theora tiff truetype unicode v4l v4l2 vorbis webkit wifi win32codecs wxwindows x264 x86 xcb xcomposite xine xorg xvid yp zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" ELIBC="glibc" INPUT_DEVICES="keyboard mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="es es_AR" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="nvidia" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS My guess is that you've compiled the tinderbox kernel wit CONFIG_COMPAT_BRK=n Clozure needs that Good guess, Stelian. I don't have that enabled at all. But I don't see any particular check for that in the ebuild? I'm pretty sure another lisp ebuild has a check for brk settings… dev-lisp/sbcl only checks that sys-devel/gcc wasn't compiled with +hardened, nothing more. I wouldn't know how to check for CONFIG_COMPAT_BRK=y other than grepping /proc/config.gz but not everyone enables that(CONFIG_IKCONFIG). Suggestions ? It seems unlikely that some installed package can interfere with building clozurecl. The tarball contains a binary lisp compiler; it is used to re-build clozurecl from sources on the user's computer. No make, autoconf, ...
I make the following experiment: prepended
strace -ff -o log
before the line
./${CCL_RUNTIME} -n -b -Q -e '(ccl:rebuild-ccl :full t)' -e '(ccl:quit)'
in the ebuild. I got 95 log.* files. The process which writes the messages
;Wrote bootstrapping image: #P"/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32"
;Wrote heap image: #P"/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/lx86cl.image"
has the minimum pid. You have the first message, but not the second one - you get an error message instead. The strace log for this pid (near the end) looks like
write(1, "recl-1.4/work/ccl/x86-boot32\"", 29) = 29
then the messages
nanosleep({0, 330000000}, 0xbfc832a0) = 0
gettimeofday({1263506318, 449900}, NULL) = 0
are repeated many times, then
nanosleep({0, 330000000}, {0, 281706597}) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGPWR (Power failure) @ 0 (0) ---
rt_sigreturn(0xbfc82d84) = -1 EINTR (Interrupted system call)
--- SIGILL (Illegal instruction) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], NULL, 8) = 0
rt_sigreturn(0xbfc82344) = 10
write(1, "work/ccl/lx86cl.image\"\n", 23) = 23
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost isig icanon echo ...}) = 0
exit_group(0) = ?
The real work of writing x86-boot32 and lx86cl.image is done by another processes. The strace log of the first of them looks like
....
open("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", O_WRONLY|O_CREAT|O_TRU
NC, 0666) = 4
close(4) = 0
lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4", {st_mode=S_IFDIR|0775, st_size=4096, ..
.}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work", {st_mode=S_IFDIR|0700, st_size=409
6, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl", {st_mode=S_IFDIR|0755, st_size
=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", {st_mode=S_IFREG|06
44, st_size=0, ...}) = 0
stat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", {st_mode=S_IFREG|064
4, st_size=0, ...}) = 0
mmap2(NULL, 8196, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7416000
mmap2(NULL, 8196, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7413000
lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4", {st_mode=S_IFDIR|0775, st_size=4096, ..
.}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work", {st_mode=S_IFDIR|0700, st_size=409
6, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
munmap(0xb7416000, 8196) = 0
munmap(0xb7413000, 8196) = 0
open("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", O_WRONLY) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xb73bf068) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xb73bf068) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
_llseek(4, 0, [0], SEEK_CUR) = 0
ftruncate(4, 0) = 0
_llseek(4, 3968, [3968], SEEK_SET) = 0
gettimeofday({1263506317, 903352}, NULL) = 0
then
write(4, "nepOILCMegameliF\r\22\372\316\0\0\0\20\0\0\0\20\4\0\0\0"..., 4096) = 4096
and similar write calls are repeated many times, then
close(4) = 0
lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", {st_mode=S_IFREG|0644, st_size=1175568, ...}) = 0
stat64("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl/x86-boot32", {st_mode=S_IFREG|0644, st_size=1175568, ...}) = 0
write(1, "\n;Wrote bootstrapping image: #P\""..., 63) = 63
gettimeofday({1263506317, 960268}, NULL) = 0
open("/tmp/lisp-tempfzRpvV", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
mmap2(NULL, 8196, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7416000
mmap2(NULL, 8196, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7413000
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/tmp/lisp-tempfzRpvV", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
lstat64("/tmp/lisp-tempfzRpvV", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
munmap(0xb7416000, 8196) = 0
munmap(0xb7413000, 8196) = 0
unlink("/tmp/lisp-tempfzRpvV") = 0
dup(4) = 9
fstat64(9, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
ioctl(9, SNDCTL_TMR_TIMEBASE or TCGETS, 0xb73bf038) = -1 ENOTTY (Inappropriate ioctl for device)
fstat64(9, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
write(9, "(save-application \"lx86cl.image\""..., 33) = 33
close(9) = 0
_llseek(4, 0, [0], SEEK_SET) = 0
pipe([9, 10]) = 0
pipe([11, 12]) = 0
gettimeofday({1263506318, 525}, NULL) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
clone(child_stack=0xb70b8384, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb70b8bd8, {entry_number:6, base_addr:0xb70b8b70, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb70b8bd8) = 16812
<skipped>
chdir("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl") = 0
getcwd("/var/tmp/portage/dev-lisp/clozurecl-1.4/work/ccl", 64) = 49
--- SIGILL (Illegal instruction) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
tgkill(16714, 16714, SIGPWR) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], NULL, 8) = 0
rt_sigreturn(0xb73bec24) = 391454
mprotect(0xb714b000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mprotect(0xb714a000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0xb714a000, 1122304) = 0
mprotect(0xb70b9000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0xb70b9000, 593920) = 0
modify_ldt(1, {entry_number:1, base_addr:00000000, limit:0, seg_32bit:0, contents:0, read_exec_only:0, limit_in_pages:0, seg_not_present:0, useable:0}, 16) = 0
madvise(0xb725c000, 1437696, MADV_DONTNEED) = 0
_exit(0) = ?
Probably, you have something similar, because x86-boot32 has been written. Right? Now the process which writes lx86cl.image (and which, probably, fails on your computer). Its strace looks like
....
open("lx86cl.image", O_WRONLY|O_CREAT, 0644) = 4
fchmod(4, 0644) = 0
write(1, "\n", 1) = 1
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbf8aa8f8) = -1 EINVAL (Invalid argument)
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
--- SIGILL (Illegal instruction) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], NULL, 8) = 0
rt_sigreturn(0xbf8aa4d4) = -1220857938
--- SIGILL (Illegal instruction) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], NULL, 8) = 0
rt_sigreturn(0xbf8aa4d4) = -1220857904
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
gettimeofday({1263506322, 955742}, NULL) = 0
madvise(0x15f00000, 65536, MADV_DONTNEED) = 0
mmap2(0x15f00000, 65536, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x15f00000
gettimeofday({1263506323, 112947}, NULL) = 0
mprotect(0x1004e000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mmap2(0x1004f000, 4345856, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x1004f000
mprotect(0x10000000, 4665344, PROT_READ|PROT_EXEC) = 0
gettimeofday({1263506323, 216611}, NULL) = 0
madvise(0x15ae0000, 4325376, MADV_DONTNEED) = 0
mmap2(0x15ae0000, 4325376, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x15ae0000
gettimeofday({1263506323, 375483}, NULL) = 0
time(NULL) = 1263506323
lseek(4, 0, SEEK_CUR) = 0
then many lseek(4,...) and write(4,...), then
fsync(4) = 0
close(4) = 0
exit_group(0) = ?
On your computer lx86cl.image has not been written, right? Then, if you do a similar experiment, we can find where the difference in behaviour starts. And, maybe, we can identify which kernel feature (if any) is responsible for the difference.
Is this still valid with 1.10? |