Created attachment 383112 [details] emerge --info Programs linked against app-emulation/emul-linux-x86-xlibs fail to start with SIGSEGV. Notably Skype and Android SDK tools (ie. adb) on AMD64 exhibit this behaviour. There is a thread on Gentoo forums about this issue (http://forums.gentoo.org/viewtopic-t-967832-start-0.html) Easy way to reproduce: $ echo 'main(){}' | g++ -xc -o program -g -lX11 -m32 - ; ./program Segmentation fault Here is the strace output: execve("./program", ["./program"], [/* 61 vars */]) = 0 [ Process PID=28756 runs in 32 bit mode. ] brk(0) = 0x804b000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff771d000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=233178, ...}) = 0 mmap2(NULL, 233178, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff76e4000 close(3) = 0 open("/usr/lib32/libX11.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0pC\1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1264412, ...}) = 0 mmap2(NULL, 1268536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff75ae000 mmap2(0xf76e0000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x131000) = 0xfffffffff76e0000 close(3) = 0 open("/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/32/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\262\4\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=963060, ...}) = 0 mmap2(NULL, 992916, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff74bb000 mprotect(0xf75a1000, 4096, PROT_NONE) = 0 mmap2(0xf75a2000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe6000) = 0xfffffffff75a2000 mmap2(0xf75a7000, 26260, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfffffffff75a7000 close(3) = 0 open("/lib32/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`Y\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=267660, ...}) = 0 mmap2(NULL, 270480, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7478000 mmap2(0xf74b9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x40000) = 0xfffffffff74b9000 close(3) = 0 open("/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/32/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p$\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=108108, ...}) = 0 mmap2(NULL, 111120, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff745c000 mmap2(0xf7476000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19000) = 0xfffffffff7476000 close(3) = 0 open("/lib32/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\316\1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1776136, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff745b000 mmap2(NULL, 1784620, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff72a7000 mmap2(0xf7455000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1ad000) = 0xfffffffff7455000 mmap2(0xf7458000, 11052, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7458000 close(3) = 0 open("/usr/lib32/libxcb.so.1", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\210\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=136788, ...}) = 0 mmap2(NULL, 139740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7284000 mmap2(0xf72a5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20000) = 0xfffffffff72a5000 close(3) = 0 open("/lib32/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\f\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=13752, ...}) = 0 mmap2(NULL, 16504, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff727f000 mmap2(0xf7282000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0xfffffffff7282000 close(3) = 0 open("/usr/lib32/libXau.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\n\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=9480, ...}) = 0 mmap2(NULL, 12436, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff727b000 mmap2(0xf727d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0xfffffffff727d000 close(3) = 0 open("/usr/lib32/libXdmcp.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\17\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=21756, ...}) = 0 mmap2(NULL, 24700, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7274000 mmap2(0xf7279000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0xfffffffff7279000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7273000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7272000 set_thread_area(0xfffe1d20) = 0 mprotect(0xf7455000, 8192, PROT_READ) = 0 mprotect(0xf7279000, 4096, PROT_READ) = 0 mprotect(0xf727d000, 4096, PROT_READ) = 0 mprotect(0xf7282000, 4096, PROT_READ) = 0 mprotect(0xf72a5000, 4096, PROT_READ) = 0 mprotect(0xf7476000, 4096, PROT_READ) = 0 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x58d6} --- +++ killed by SIGSEGV +++ Segmentation fault And the gdb backtrace: Program received signal SIGSEGV, Segmentation fault. 0x000058d6 in ?? () (gdb) bt #0 0x000058d6 in ?? () #1 0xf7d54cc4 in ?? () #2 0xf7fdf0bb in ?? () from /lib/ld-linux.so.2 #3 0xf7ff16d0 in ?? () from /lib/ld-linux.so.2 #4 0xf7fe0c32 in ?? () from /lib/ld-linux.so.2 #5 0xf7fdd1f7 in ?? () from /lib/ld-linux.so.2 Expected behaviour: The program should terminate without segmentation fault. I'm not sure whether this is a problem with the emulation library or the toolchain as the linker instructions do affect the outcome: $ echo 'main(){}' | g++ -xc -o program -g -m32 - ; ./program <-- no segfault here, no libX11, libXau, libXdmcp, libxcb linked $ echo 'main(){}' | cc -xc -o program -g -lX11 -m32 - ; ./program <-- no segfault here, no libstdc++ linked I'm using gcc-4.7.3-r1.
Please post your `emerge -vpq app-emulation/emul-linux-x86-xlibs' output in a comment.
(In reply to Jeroen Roovers from comment #1) > Please post your `emerge -vpq app-emulation/emul-linux-x86-xlibs' output in > a comment. Here it is: [ebuild R ] app-emulation/emul-linux-x86-xlibs-20140508 USE="(development) opengl" ABI_X86="(-32)"
strace traces system calls and signals - it doesn't give any insight in segmentation faults. Please obtain a gdb backtrace instead.
(In reply to Jeroen Roovers from comment #3) > strace traces system calls and signals - it doesn't give any insight in > segmentation faults. Please obtain a gdb backtrace instead. Well, there _is_ a gdb backtrace in my initial report.
(In reply to Benjamin Budai from comment #4) > Well, there _is_ a gdb backtrace in my initial report. Yes, and it has question marks where the good bits should be.
(In reply to Jeroen Roovers from comment #5) > (In reply to Benjamin Budai from comment #4) > > Well, there _is_ a gdb backtrace in my initial report. > > Yes, and it has question marks where the good bits should be. That's true. I compiled and linked my program with -g, not stripped. The program blows in glibc (or kernel?) which is stripped. Should I rebuild glibc with splitdebug?
Rebuilding sys-libs/glibc-2.17 solved the issue. No more segfaults.
Looks like bug #463918.