Gdbserver syscall clobber
Daniel Jacobowitz
drow at false.org
Tue Jul 24 02:15:12 EST 2007
On Mon, Jul 23, 2007 at 11:06:13AM -0500, Bill Gatliff wrote:
> Daniel Jacobowitz wrote:
> > On Wed, Jul 18, 2007 at 12:59:42PM -0500, Bill Gatliff wrote:
> >
> >> Now, I'm a little rusty on PPC asm (I've been doing a lot of ARM
> >> lately), but it looks to me like the kernel is setting bit 0 in CR0
> >> (oris r10, r10, 0x1000) a.k.a LT, but the user side is looking at CR0
> >> (bnslr+) bit 3 a.k.a. SO. Or maybe the other way around, I'm not sure
> >> after reading Sections 1.2 and 2.1 of the Programming Environments manual.
> >>
> >
> > It's not checking for restart here - userspace isn't supposed to have to.
> > It's probably checking for error. Check for the bit of kernel code
> > that's supposed to back you up two instructions.
> >
> >
>
> I don't see it in this kernel. What I see is this after the call to the
> syscall handler:
Look around do_signal:
regs->nip -= 4; /* Back up & retry system call */
If your kernel has corrupted the register containing the syscall
number at this point, that would explain your problem. It will then
do the wrong syscall. I guess PPC only backs up one instruction.
--
Daniel Jacobowitz
CodeSourcery
More information about the Linuxppc-embedded
mailing list