Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 520238 - app-emulation/emul-linux-x86-xlibs-20140508 - segmentation fault in ? at ?
Summary: app-emulation/emul-linux-x86-xlibs-20140508 - segmentation fault in ? at ?
Status: RESOLVED NEEDINFO
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Library (show other bugs)
Hardware: AMD64 Linux
: Normal normal
Assignee: Gentoo Linux bug wranglers
URL: http://wiki.gentoo.org/wiki/Project:Q...
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-08-19 10:26 UTC by Benjamin Budai
Modified: 2014-08-23 14:41 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
emerge --info (emerge.info,5.09 KB, text/plain)
2014-08-19 10:26 UTC, Benjamin Budai
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Benjamin Budai 2014-08-19 10:26:23 UTC
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.
Comment 1 Jeroen Roovers (RETIRED) gentoo-dev 2014-08-19 18:21:15 UTC
Please post your `emerge -vpq app-emulation/emul-linux-x86-xlibs' output in a comment.
Comment 2 Benjamin Budai 2014-08-21 07:54:22 UTC
(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)"
Comment 3 Jeroen Roovers (RETIRED) gentoo-dev 2014-08-21 11:36:41 UTC
strace traces system calls and signals - it doesn't give any insight in segmentation faults. Please obtain a gdb backtrace instead.
Comment 4 Benjamin Budai 2014-08-21 12:16:42 UTC
(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.
Comment 5 Jeroen Roovers (RETIRED) gentoo-dev 2014-08-21 18:06:58 UTC
(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.
Comment 6 Benjamin Budai 2014-08-22 09:08:16 UTC
(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?
Comment 7 Benjamin Budai 2014-08-22 15:46:33 UTC
Rebuilding sys-libs/glibc-2.17 solved the issue. No more segfaults.
Comment 8 Jeroen Roovers (RETIRED) gentoo-dev 2014-08-23 14:41:10 UTC
Looks like bug #463918.