Package: libc6-dev Version: 2.3.6.ds1-13 Severity: normal A program that is statically linked to NPTL will fail at runtime when calling raise(3) (and, by extension, abort(3)):
$ cc -g -Wall -pthread -I/usr/include/nptl -L/usr/lib/nptl -static test1.c -o test1 $ strace ./test1 ... tgkill(0, 0, SIGQUIT) = -1 EINVAL (Invalid argument) This does not occur if the binary is dynamically linked against NPTL, nor does it occur when linked against LinuxThreads, either statically or dynamically. -- Details: $ cat test.c #include <signal.h> int main(int argc, char *argv[]) { raise(SIGQUIT); return 0; } $ cat Makefile all: test1 test2 test3 test4 test1: CFLAGS=-g -Wall -pthread -I/usr/include/nptl -L/usr/lib/nptl -static test2: CFLAGS=-g -Wall -pthread -I/usr/include/nptl -L/usr/lib/nptl test3: CFLAGS=-g -Wall -pthread -static test4: CFLAGS=-g -Wall -pthread test1.c test2.c test3.c test4.c: test.c cp $^ $@ $ strace ./test1 execve("./test1", ["./test1"], [/* 24 vars */]) = 0 uname({sys="Linux", node="itrains", ...}) = 0 brk(0) = 0x80bf000 brk(0x80bfc90) = 0x80bfc90 set_thread_area({entry_number:-1 -> 6, base_addr:0x80bf830, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 brk(0x80e0c90) = 0x80e0c90 brk(0x80e1000) = 0x80e1000 tgkill(0, 0, SIGQUIT) = -1 EINVAL (Invalid argument) exit_group(0) = ? Process 32023 detached $ strace ./test2 execve("./test2", ["./test2"], [/* 24 vars */]) = 0 uname({sys="Linux", node="itrains", ...}) = 0 brk(0) = 0x804a000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7f4a000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=23128, ...}) = 0 mmap2(NULL, 23128, PROT_READ, MAP_PRIVATE, 3, 0) = 0xa7f44000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240H\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=89370, ...}) = 0 mmap2(NULL, 70104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa7f32000 mmap2(0xa7f40000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe) = 0xa7f40000 mmap2(0xa7f42000, 4568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa7f42000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240O\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=1241392, ...}) = 0 mmap2(NULL, 1247388, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa7e01000 mmap2(0xa7f28000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x127) = 0xa7f28000 mmap2(0xa7f2f000, 10396, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa7f2f000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7e00000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7dff000 mprotect(0xa7f28000, 20480, PROT_READ) = 0 set_thread_area({entry_number:-1 -> 6, base_addr:0xa7dff6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 munmap(0xa7f44000, 23128) = 0 set_tid_address(0xa7dff708) = 32025 rt_sigaction(SIGRTMIN, {0xa7f364c0, [], SA_SIGINFO}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0xa7f36420, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 uname({sys="Linux", node="itrains", ...}) = 0 tgkill(32025, 32025, SIGQUIT) = 0 --- SIGQUIT (Quit) @ 0 (0) --- +++ killed by SIGQUIT +++ Process 32025 detached $ strace ./test3 execve("./test3", ["./test3"], [/* 24 vars */]) = 0 uname({sys="Linux", node="itrains", ...}) = 0 brk(0) = 0x80b2000 brk(0x80d3000) = 0x80d3000 getpid() = 32027 kill(32027, SIGQUIT) = 0 --- SIGQUIT (Quit) @ 0 (0) --- +++ killed by SIGQUIT +++ Process 32027 detached $ strace ./test4 execve("./test4", ["./test4"], [/* 24 vars */]) = 0 uname({sys="Linux", node="itrains", ...}) = 0 brk(0) = 0x804a000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7fbc000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=23128, ...}) = 0 mmap2(NULL, 23128, PROT_READ, MAP_PRIVATE, 3, 0) = 0xa7fb6000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240H\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=89370, ...}) = 0 mmap2(NULL, 70104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa7fa4000 mmap2(0xa7fb2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe) = 0xa7fb2000 mmap2(0xa7fb4000, 4568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa7fb4000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240O\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=1241392, ...}) = 0 mmap2(NULL, 1247388, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa7e73000 mmap2(0xa7f9a000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x127) = 0xa7f9a000 mmap2(0xa7fa1000, 10396, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa7fa1000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7e72000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7e71000 mprotect(0xa7f9a000, 20480, PROT_READ) = 0 set_thread_area({entry_number:-1 -> 6, base_addr:0xa7e716c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 munmap(0xa7fb6000, 23128) = 0 set_tid_address(0xa7e71708) = 32029 rt_sigaction(SIGRTMIN, {0xa7fa84c0, [], SA_SIGINFO}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0xa7fa8420, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 uname({sys="Linux", node="itrains", ...}) = 0 tgkill(32029, 32029, SIGQUIT) = 0 --- SIGQUIT (Quit) @ 0 (0) --- +++ killed by SIGQUIT +++ Process 32029 detached -- System Information: Debian Release: 4.0 APT prefers testing APT policy: (999, 'testing') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.16-2-686 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Versions of packages libc6-dev depends on: ii libc6 2.3.6.ds1-13 GNU C Library: Shared libraries ii linux-kernel-headers 2.6.18-6 Linux Kernel Headers for developme Versions of packages libc6-dev recommends: ii gcc [c-compiler] 4:4.1.1-15 The GNU C compiler ii gcc-2.95 [c-compiler] 1:2.95.4-27 The GNU C compiler ii gcc-3.3 [c-compiler] 1:3.3.6-15 The GNU C compiler ii gcc-4.1 [c-compiler] 4.1.1-21 The GNU C compiler -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]