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 User-mode-linux-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user