From: Blaisorblade <bla...@ya...> - 2005-10-02 17:30:13
|
On Thursday 29 September 2005 18:16, Jeff Dike wrote: > If you are running UML/x86_64 and are seeing it crash before starting init, > I'd like you to do the following: I assume you've been able to reproduce this crash and see this patch fix it, right? I'm going to take it for -bs3, meanwhile, as soon as you answer on the attachment (I'd like it at least to compile). > - make sure that you have CONFIG_FRAME_POINTER disabled > - enable it and see that UML boots > - apply the patch below, disable CONFIG_FRAME_POINTER again, and > see if UML still boots > - report results back to me > Jeff > @@ -22,11 +32,14 @@ > > __asm__("movq %0, %%rax ; syscall": : "g" (__NR_getpid)); Why there's no "%rax" in the register clobber list, here and at the end? > __asm__("movq %%rax, %%rdi ; movq %0, %%rax ; movq %1, %%rsi ;" > - "syscall": : "g" (__NR_kill), "g" (SIGUSR1)); > - /* Two popqs to restore the stack to the state just before entering > - * the handler, one pops the return address, the other pops the frame > - * pointer. > + "syscall": : "g" (__NR_kill), "g" (SIGUSR1) : > + "%rdi", "%rax", "%rsi"); Here you're correctly informing GCC that your asm uses these regs. > + /* sys_sigreturn expects that the stack pointer will be 8 bytes into > + * the signal frame. So, we use the ucontext pointer, which we know > + * already, to get the signal frame pointer, and add 8 to that. > */ > - __asm__("popq %%rax ; popq %%rax ; movq %0, %%rax ; syscall" : : "g" > - (__NR_rt_sigreturn)); > + __asm__("movq %0, %%rsp": : > + "g" ((unsigned long) container_of(uc, struct rt_sigframe, > + uc) + 8)); > + __asm__("movq %0, %%rax ; syscall" : : "g" (__NR_rt_sigreturn)); > } I've attached the addon with additional clobber, and with fixed tabs (i.e. hardtabs). Not compiled it (no time to reboot right now). -- Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!". Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894) http://www.user-mode-linux.org/~blaisorblade |