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

Reply via email to