Running prelink(8) on a binary may cause it to segfault on LX. I
encountered this when converting a baremetal CentOS 6.5 instance into
an LX zone. I noticed that running ldd /bin/ls
crashed with a
segfault. The segfault happens early in the runtime, after the AS has
been setup and the first time that LX jumps into linux userland.
Here is truss output of ld after it has been prelink'd.
# /native/usr/bin/truss /lib64/ld-2.12.so --verify /bin/ls
execve("/lib64/ld-2.12.so", 0x7FFFFFEFF638, 0x7FFFFFEFF658) argc = 3
sysinfo(SI_MACHINE, "i86pc", 257) = 6
mmap(0x00000000, 56, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF440000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF410000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF400000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF3F0000
memcntl(0x7FFFFF44E000, 96976, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF3E0000
memcntl(0x7FFFFF4B6000, 74816, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
resolvepath("/native/lib/64/ld.so.1", "/native/lib/amd64/ld.so.1", 1023) = 25
resolvepath("/native/usr/lib/amd64/lx_brand.so.1", "/native/usr/lib/amd64/lx_brand.so.1", 1023) = 35
stat("/native/usr/lib/amd64/lx_brand.so.1", 0x7FFFFFEFF310) = 0
open("/var/ld/64/ld.config", O_RDONLY) = 3
fstat(3, 0x7FFFFFEFF070) = 0
mmap(0x00000000, 188, PROT_READ, MAP_SHARED, 3, 0) = 0x7FFFFF3D0000
close(3) = 0
stat("/native/lib/64/libc.so.1", 0x7FFFFFEFEA00) = 0
resolvepath("/native/lib/64/libc.so.1", "/native/lib/amd64/libc.so.1", 1023) = 27
open("/native/lib/64/libc.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0x7FFFFF3E0C68, 0x7FFFFFEFE55C, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF1F0000
memcntl(0x7FFFFF230000, 465608, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/native/lib/64/libmapmalloc.so.1", 0x7FFFFFEFEA00) Err#2 ENOENT
stat("/native/usr/lib/64/libmapmalloc.so.1", 0x7FFFFFEFEA00) = 0
resolvepath("/native/usr/lib/64/libmapmalloc.so.1", "/native/usr/lib/amd64/libmapmalloc.so.1", 1023) = 39
open("/native/usr/lib/64/libmapmalloc.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0x7FFFFF1F0B88, 0x7FFFFFEFE55C, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF1C0000
memcntl(0x7FFFFF1D0000, 5056, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/native/lib/64/librpcsvc.so.1", 0x7FFFFFEFE4E0) = 0
resolvepath("/native/lib/64/librpcsvc.so.1", "/native/lib/amd64/librpcsvc.so.1", 1023) = 32
open("/native/lib/64/librpcsvc.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0x7FFFFF1F0D38, 0x7FFFFFEFE03C, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF190000
memcntl(0x7FFFFF1A0000, 17680, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/native/lib/64/libnsl.so.1", 0x7FFFFFEFE4E0) = 0
resolvepath("/native/lib/64/libnsl.so.1", "/native/lib/amd64/libnsl.so.1", 1023) = 29
open("/native/lib/64/libnsl.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0x7FFFFF190B30, 0x7FFFFFEFE03C, 0x00000000) = 0
close(3) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF0D0000
memcntl(0x7FFFFF0E0000, 170816, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0x7FFFFF0C0000
getcontext(0x7FFFFFEFED60)
getrlimit(RLIMIT_STACK, 0x7FFFFFEFF0C0) = 0
getpid() = 44359 [44357]
lwp_private(0, 0, 0x7FFFFF0C2A40) = 0x00000000
setustack(0x7FFFFF0C2AE8)
lwp_cond_broadcast(0x7FFFFF1F01A8) = 0
lwp_cond_broadcast(0x7FFFFF1C01A8) = 0
sigfillset(0x7FFFFF3C9480) = 0
lwp_cond_broadcast(0x7FFFFF0D01A8) = 0
lwp_cond_broadcast(0x7FFFFF1901A8) = 0
lwp_cond_broadcast(0x7FFFFF3E01A8) = 0
sysconfig(_CONFIG_PAGESIZE) = 4096
fcntl(0, F_DUPFD, 0x00000000) = 3
lseek(0, 0, SEEK_CUR) = 17710
close(0) = 0
fcntl(3, F_DUP2FD, 0x00000000) = 0
close(3) = 0
fcntl(1, F_DUPFD, 0x00000000) = 3
close(1) = 0
fcntl(3, F_DUP2FD, 0x00000001) = 1
close(3) = 0
fcntl(2, F_DUPFD, 0x00000000) = 3
close(2) = 0
fcntl(3, F_DUP2FD, 0x00000002) = 2
close(3) = 0
zone_lookup(0x00000000) = 50
zone_getattr(50, 32768, 0x7FFFFF4FED40, 16) = 16
brand(1, 0x7FFFFFEFF5A0, 0x00000000, 0x0000000A, 0x00006F73, 0x00000000) = 0
brand(128, 0x00000001, 0x7FFFFFEFF4EC, 0x7FFFFFEFF4E8, 0x00000000, 0x00000000) = 0
uucopy(0x7FFFFFEFF4EC, 0x7FFFFF4FED54, 4) = 0
uucopy(0x7FFFFFEFF4E8, 0x7FFFFFEFF54C, 4) = 0
brand(3, 0x7FFFFFEFF570, 0x7FFFFFEFF4E8, 0x00000000, 0x00000000, 0x00000000) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72BD, 0x00000003, 0x7FFFFFEFF52C, 0x00000000) = 0
stat("/dev/null", 0x7FFFFFEFF4A0) = 0
stat("/dev/zero", 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E7293, 0x00000007, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
stat("/dev/random", 0x7FFFFFEFF4A0) = 0
stat("/dev/urandom", 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72C0, 0x00000003, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
stat("/dev/tty", 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72C3, 0x00000006, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
stat("/dev/console", 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72C9, 0x00000009, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72D2, 0x00000007, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
modctl(MODGETMAJBIND, 0x7FFFFF4E72DE, 0x00000004, 0x7FFFFFEFF52C, 0x7FFFFFEFF4A0) = 0
open("/native/usr/lib/brand/lx/amd64/lx_vdso.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0x7FFFFFEFF3B0, 0x7FFFFFEFF54C, 0x00000000) = 0
close(3) = 0
schedctl() = 0x7FFFFF0A2000
lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0xFFFFFFF7, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGWAITING, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFF7, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGLWP, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFF6, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGFREEZE, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFF4, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGTHAW, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFF0, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGCANCEL, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFF0, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGLOST, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFE0, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGXRES, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFFC0, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGJVM1, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFF80, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGJVM2, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFF00, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGINFO, 0x7FFFFFEFF3E0, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x7FBFFEFF, 0xFFFFFE00, 0x000001FF, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
sigaction(SIGHUP, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGINT, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGQUIT, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGILL, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGTRAP, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGABRT, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGBUS, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGFPE, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGKILL, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGUSR1, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGSEGV, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGUSR2, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGPIPE, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGALRM, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGTERM, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGEMT, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGCLD, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGCONT, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGSTOP, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGTSTP, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGTTIN, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGTTOU, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGURG, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGXCPU, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGXFSZ, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGVTALRM, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGPROF, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGWINCH, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGPOLL, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGPWR, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGSYS, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+1, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+2, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+3, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+4, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+5, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+6, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+7, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+8, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+9, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+10, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+11, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+12, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+13, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+14, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMIN+15, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-15, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-14, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-13, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-12, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-11, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-10, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-9, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-8, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-7, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-6, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-5, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-4, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-3, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-2, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX-1, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGRTMAX, 0x00000000, 0x7FFFFFEFF4F0) = 0
sigaction(SIGPWR, 0x7FFFFFEFF440, 0x00000000) = 0
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0x7FFFFF0A0000
getcontext(0x7FFFFF0A0040)
sysconfig(_CONFIG_STACK_PROT) = 3
mmap(0x00000000, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON, 4294967295, 0) = 0x7FFFFF05F000
brand(147, 0x7FFFFF09F000, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0
getcontext(0x7FFFFFEFF1F0)
brand(139, 0x7FFFFFEFF1F0, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFF200B00) = 0
Incurred fault #6, FLTBOUNDS %pc = 0x7FFFFF203C99
siginfo: SIGSEGV SEGV_MAPERR addr=0x7FCFFF200040
Received signal #11, SIGSEGV [default]
siginfo: SIGSEGV SEGV_MAPERR addr=0x7FCFFF200040