tth@gally:~/WWW/buvette$ uname -a Linux gally 2.6.12-10-686 #1 Wed Feb 7 03:56:37 UTC 2007 i686 GNU/Linux tth@gally:~/WWW/buvette$ gcc -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --with-gxx-include-dir=/usr/include/c++/4.0.2 --enable-shared --with-system-zlib --libexecdir=/usr/lib --enable-nls --without-included-gettext --enable-threads=posix --program-suffix=-4.0 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)
After unpacking this tarball, and changing nothing to the supplied Makefile:
tth@gally:/tmp/xfractint-20.04p07$ make /usr/bin/gcc -I./headers -DXFRACT -DNOBSTRING -g -DBIG_ANSI_C -DLINUX -O2 -march=pentium -fno-builtin -c -o dos_help/hc.o dos_help/hc.c /usr/bin/gcc -I./headers -DXFRACT -DNOBSTRING -g -DBIG_ANSI_C -DLINUX -O2 -march=pentium -fno-builtin -DSRCDIR=\"/usr/share/xfractint\" -c ./unix/unix.c /usr/bin/gcc -o hc -I./headers -DXFRACT -DNOBSTRING -g -DBIG_ANSI_C -DLINUX -O2 -march=pentium -fno-builtin ./dos_help/hc.o unix.o cd ./dos_help; ../hc /c; mv fractint.hlp .. HC - FRACTINT Help Compiler. Compiling: help.src Making hot-links. Paginating online help. Paginating document. Writing: helpdefs.h I'm waiting a few minutes..., hitting Ctrl-C make: *** [fractint.hlp] Interrupt
In another xterm:
tth@gally:~$ ps x | grep hc 28504 pts/1 S+ 0:00 /bin/sh -c cd ./dos_help; ../hc /c; mv fractint.hlp .. 28505 pts/1 S+ 0:00 ../hc /c tth@gally:~$ strace -p 28505 Process 28505 attached - interrupt to quit futex(0x80687d0, FUTEX_WAIT, 2, NULL <unfinished ...>
Uh oh, what is this futex ? We need more investigation...
Cleaning up the build dirs (with rm -Rf, unpacking tarball, re-make the HC compiler, and running it under strace. (Full trace here)
read(3, "\n\10\3\3\0\0\0\0\0\0\0\0\0\0\0\0 Using Help \3\10\33\3"..., 4096) = 4096 read(3, ".........\n2.26 Orbit Fractals"..., 4096) = 4096 read(3, "...........\n5.8 Image Calcul"..., 4096) = 4096 _llseek(3, 0, [0], SEEK_SET) = 0 read(3, "\n\10\3\3\0\0\0\0\0\0\0\0\0\0\0\0 Using Help \3\10\33\3"..., 4096) = 4096 _llseek(3, -2953, [1143], SEEK_CUR) = 0 write(3, " New Features in 20.4.X...."..., 8192) = 8192 open("/etc/mtab", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=334, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f74000 read(4, "/dev/hda3 / ext3 rw,errors=remou"..., 4096) = 334 close(4) = 0 munmap(0xb7f74000, 4096) = 0 open("/proc/meminfo", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f74000 read(4, "MemTotal: 191788 kB\nMemFre"..., 1024) = 598 close(4) = 0 munmap(0xb7f74000, 4096) = 0 open("helpdefs.h", O_RDONLY) = -1 ENOENT (No such file or directory) open("helpdefs.h", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4 write(1, "Writing: helpdefs.h\n", 20) = 20 fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f74000 write(4, "\n/*\n * helpdefs.h\n *\n * Contains"..., 4096) = 4096 write(4, "NZ3D1 86\n#d"..., 4096) = 4096 futex(0x80687d0, FUTEX_WAIT, 2, NULL) = -1 EINTR (Interrupted system call) --- SIGINT (Interrupt) @ 0 (0) --- +++ killed by SIGINT +++
Nice try. Why this damned software is reading mtab and meminfo ? (Are we in the Glibc ?) Next tool before chain saw: ltrace, maybe, can show us others evidences...
fprintf(0x8072060, "\n") = 1 fprintf(0x8072060, "#define %-32s %3d", "INTRO_CREDITS", 186) = 44 strlen("HELP_INDEX") = 10 fprintf(0x8072060, "\n") = 1 fprintf(0x8072060, "#define %-32s %3d", "RDSKEYS", 187) = 44 strlen("HELP_INDEX") = 10 fprintf(0x8072060, "\n") = 1 fprintf(0x8072060, "\n\n") = 2 fclose(0x8072000 <unfinished ...> --- SIGINT (Interrupt) --- +++ killed by SIGINT +++
Hang in a fclose ?
tth@gally:/tmp/xfractint-20.04p07/dos_help$ grep 8072000 ltrace.txt fclose(0x8072000 <unfinished ...> tth@gally:/tmp/xfractint-20.04p07/dos_help$
AH AH ! I'm running crazy !