I've done some more tests with 2.6.18.
* building a x86 kernel on amd64 results in a binary that crashes early
(see strace and gdb below)
* building it on x86 and copying it across works better, but there are
still some TLS issues I believe.
the compilers is gcc 4.1.1 in both cases.
> There are a couple of things to try:
> strace it
Here it is (sanitized bits that I don't want to show: fstab, etc)
execve("./kernel-3", ["./kernel-3", "noprocmm", "ubd0=./uml/root_fs"],
[/* 38 vars */]) = 0
[ Process PID=11744 runs in 32 bit mode. ]
brk(0) = 0x83fd000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xfffffffff7f1b000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
open("/lib/tls/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such
file or directory)
open("/lib/tls/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file
or directory)
open("/lib/tls/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file
or directory)
open("/lib/tls/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file
or directory)
open("/lib/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/libutil.so.1", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\21\0"...,
512) = 512
close(3) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(0x3, 0xffd82cd4) = 0
mmap2(NULL, 74532, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff7f08000
close(3) = 0
open("/lib32/libutil.so.1", 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\320\f\0"...,
512) = 512
fstat64(0x3, 0xffd82d48) = 0
mmap2(NULL, 12432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0)
= 0xfffffffff7f04000
mmap2(0xf7f06000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xfffffffff7f06000
close(3) = 0
open("/lib/tls/i686/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file
or directory)
open("/lib/tls/i686/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/tls/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/i686/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/i686/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\322\1"...,
512) = 512
close(3) = 0
open("/lib32/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\300Y\1"...,
512) = 512
fstat64(0x3, 0xffd82d2c) = 0
mmap2(NULL, 1160572, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3,
0) = 0xfffffffff7de8000
mmap2(0xf7efd000, 16384, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x114) = 0xfffffffff7efd000
mmap2(0xf7f01000, 9596, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7f01000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xfffffffff7de7000
set_thread_area(0xffd83228) = 0
mprotect(0xf7efd000, 8192, PROT_READ) = 0
mprotect(0xf7f35000, 4096, PROT_READ) = 0
munmap(0xf7f08000, 74532) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=-4286578688,
rlim_max=-580018080443779652}) = 0
brk(0) = 0x83fd000
brk(0x841e000) = 0x841e000
rt_sigaction(SIGINT, {0xc000000008082cb8, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [INT], NULL, 8) = 0
rt_sigaction(SIGTERM, {0xc000000008082cb8, [],
SA_RESTORER|SA_SIGINFO|0x3f400, (nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [TERM], NULL, 8) = 0
rt_sigaction(SIGHUP, {0xc000000008082cb8, [], 0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [HUP], NULL, 8) = 0
fstat64(0x1, 0xffd82e68) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo
...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0x1000) = 0xfffffffff7f1a000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0x1000) = 0xfffffffff7f19000
clone(child_stack=0xf7f19fd4, flags=|SIGCHLD) = 11745
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(11745, [{WIFSTOPPED(s) && WSTOPSIG(s) == SIGSTOP}], WSTOPPED) =
11745
ptrace(0x15 /* PTRACE_??? */, 11745, 0, 0x1) = 0
ptrace(PTRACE_SYSCALL, 11745, 0, SIG_0) = 0
waitpid(11745, [{WIFSTOPPED(s) && WSTOPSIG(s) == 133}], WSTOPPED) = 11745
--- SIGCHLD (Child exited) @ 0 (0) ---
ptrace(PTRACE_PEEKUSER, 11745, 8*RBX + 4, [0x2de100000014]) = 0
ptrace(PTRACE_POKEUSER, 11745, 8*RBX + 4, 0x40) = 0
ptrace(PTRACE_CONT, 11745, 0, SIG_0) = 0
waitpid(11745, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 11745
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xf7f19000, 4096) = 0
write(1, "Checking that ptrace can change "..., 57Checking that ptrace
can change system call numbers...OK
) = 57
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0x1000) = 0xfffffffff7f19000
clone(child_stack=0xf7f19fd4, flags=|SIGCHLD) = 11746
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(11746, [{WIFSTOPPED(s) && WSTOPSIG(s) == SIGSTOP}], WSTOPPED) =
11746
ptrace(0x1f /* PTRACE_??? */, 11746, 0, 0) = -1 EIO (Input/output error)
ptrace(PTRACE_CONT, 11746, 0, SIG_0) = 0
waitpid(11746, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 11746
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xf7f19000, 4096) = 0
write(1, "Checking syscall emulation patch"..., 54Checking syscall
emulation patch for ptrace...missing
) = 54
open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3
****************************
write(1, "Checking for tmpfs mount on /dev"..., 67Checking for tmpfs
mount on /dev/shm...nothing mounted on /dev/shm
) = 67
gettimeofday({3969238135051436, 594423718444269556}, NULL) = 0
getpid() = 11744
open("/tmp/vm_file-buoPOT", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 4
unlink("/tmp/vm_file-buoPOT") = 0
fchmod(4, 0777) = 0
_llseek(4, 4095, [4095], SEEK_SET) = 0
write(4, "\0", 1) = 1
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 4,
0x1000) = 0xfffffffff7f19000
write(1, "Checking PROT_EXEC mmap in /tmp/"..., 35Checking PROT_EXEC
mmap in /tmp/...) = 35
write(1, "OK\n", 3OK
) = 3
munmap(0xf7f19000, 4096) = 0
close(4) = 0
write(1, "Checking for the skas3 patch in "..., 42Checking for the skas3
patch in the host:
) = 42
access("/proc/mm", W_OK) = 0
write(1, " - /proc/mm...found but disable"..., 50 - /proc/mm...found
but disabled on command line
) = 50
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0x1000) = 0xfffffffff7f19000
clone(child_stack=0xf7f19fd4, flags=|SIGCHLD) = 11747
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(11747, [{WIFSTOPPED(s) && WSTOPSIG(s) == SIGSTOP}], WSTOPPED) =
11747
ptrace(0x34 /* PTRACE_??? */, 11747, 0, 0xffd83570) = 0
write(1, " - PTRACE_FAULTINFO...found\n", 29 - PTRACE_FAULTINFO...found
) = 29
ptrace(PTRACE_GETREGS, 11747, 0, 0x83b7ae0) = 0
ptrace(PTRACE_GETFPXREGS, 11747, 0, 0x83b7bc0) = 0
ptrace(PTRACE_CONT, 11747, 0, SIG_0) = 0
waitpid(11747, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 11747
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xf7f19000, 4096) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0x1000) = 0xfffffffff7f19000
clone(child_stack=0xf7f19fd4, flags=|SIGCHLD) = 11748
--- SIGCHLD (Child exited) @ 0 (0) ---
waitpid(11748, [{WIFSTOPPED(s) && WSTOPSIG(s) == SIGSTOP}], WSTOPPED) =
11748
ptrace(0x36 /* PTRACE_??? */, 11748, 0, 0xffd83570) = 40
write(1, " - PTRACE_LDT...found\n", 23 - PTRACE_LDT...found
) = 23
ptrace(PTRACE_CONT, 11748, 0, SIG_0) = 0
waitpid(11748, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 11748
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xf7f19000, 4096) = 0
write(1, "UML running in SKAS0 mode\n", 26UML running in SKAS0 mode
) = 26
uname({sys="Linux", node="localhost", ...}) = 0
open("/tmp/vm_file-E1Ez6x", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600) = 4
unlink("/tmp/vm_file-E1Ez6x") = 0
fchmod(4, 0777) = 0
_llseek(4, 33554431, [33554431], SEEK_SET) = 0
write(4, "\0", 1) = 1
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
mmap2(0x8c00000, 21266432, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED,
4, 0x1448000) = 0x8c00000
_llseek(4, 2670592, [2670592], SEEK_SET) = 0
write(4, "U\272x\0\0\0\271\374\367\377\277\211\320\211\345WVS\273"...,
4096) = 4096
mprotect(0x8352000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
rt_sigaction(SIGSEGV, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3f2a228,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [SEGV], NULL, 8) = 0
rt_sigaction(SIGTRAP, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [TRAP], NULL, 8) = 0
rt_sigaction(SIGFPE, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [FPE], NULL, 8) = 0
rt_sigaction(SIGILL, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [ILL], NULL, 8) = 0
rt_sigaction(SIGBUS, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [BUS], NULL, 8) = 0
rt_sigaction(SIGUSR2, {0x800000008083f63, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [USR2], NULL, 8) = 0
rt_sigaction(SIGHUP, {0x1000000000000001, [], 0}, {0xc000000008082cb8,
~[HUP INT QUIT ILL TRAP ABRT KILL USR2 PIPE STKFLT STOP TSTP WINCH RT_1
RT_2 RT_3 RT_4 RT_5 RT_6 RT_7 RT_8 RT_12 RT_13 RT_14 RT_18 RT_20 RT_21
RT_22 RT_23 RT_24 RT_25 RT_26 RT_27 RT_29 RT_30 RT_31], 0}, 8) = 0
rt_sigaction(SIGVTALRM, {0x1800000008083fa4, [],
SA_SIGINFO|SA_NOCLDWAIT|0x38}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [VTALRM], NULL, 8) = 0
rt_sigaction(SIGALRM, {0x1800000008083fa4, [],
SA_RESTORER|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_NOCLDSTOP|0x3e10bf8,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [ALRM], NULL, 8) = 0
rt_sigaction(SIGIO, {0x1800000008083f63, [],
SA_RESTORER|SA_STACK|SA_RESTART|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT|SA_SIGINFO|0x3d83400,
(nil)}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [IO], NULL, 8) = 0
rt_sigaction(SIGWINCH, {0x1000000000000001, [], 0}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGWINCH, {0x1800000008083f63, [], SA_NOCLDSTOP}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [WINCH], NULL, 8) = 0
sigaltstack({ss_sp=0x8350000, ss_flags=0x3ffc /* SS_??? */,
ss_size=591378926203843250}, NULL) = 0
rt_sigaction(SIGUSR1, {0x80000000806260c, [],
SA_NOCLDSTOP|SA_NOCLDWAIT|0x5b7ff8}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [USR1], NULL, 8) = 0
getpid() = 11744
kill(11744, SIGUSR1) = 0
--- SIGUSR1 (User defined signal 1) @ 0 (0) ---
rt_sigprocmask(SIG_UNBLOCK, [USR1], [USR1], 8) = 0
sigaltstack({ss_sp=0x200000000, ss_flags=0, ss_size=4429735114}, NULL) = 0
getpid() = 11744
open("~/.uml/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT
(No such file or directory)
getpid() = 11744
rt_sigprocmask(SIG_BLOCK, [PROF], [], 8) = 0
setitimer(ITIMER_VIRTUAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
setitimer(ITIMER_REAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
rt_sigaction(SIGALRM, {SIG_IGN}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [ALRM], NULL, 8) = 0
rt_sigaction(SIGVTALRM, {SIG_IGN}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [VTALRM], NULL, 8) = 0
rt_sigaction(SIGIO, {SIG_IGN}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [IO], NULL, 8) = 0
write(1, "\n", 1
) = 1
exit_group(1) = ?
Process 11744 detached
> gdb it, put a breakpoint on panic, run it, and see what happens.
(gdb) break panic
Breakpoint 1 at 0x808de78
(gdb) run
Starting program: /uml/uml-3/chroot/kernel-3 noprocmm ubd0=./uml/root_fs
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...missing
Checking for tmpfs mount on /dev/shm...nothing mounted on /dev/shm
Checking PROT_EXEC mmap in /tmp/...OK
Checking for the skas3 patch in the host:
- /proc/mm...found but disabled on command line
- PTRACE_FAULTINFO...found
- PTRACE_LDT...found
UML running in SKAS0 mode
Program received signal SIGUSR1, User defined signal 1.
0xffffe405 in __kernel_vsyscall ()
(gdb) bt
#0 0xffffe405 in __kernel_vsyscall ()
#1 0xf7e28c76 in kill () from /lib32/libc.so.6
#2 0x080834c3 in os_usr1_process ()
#3 0x080864c3 in start_idle_thread ()
#4 0x080628f8 in start_uml_skas ()
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
User-mode-linux-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user