linux-mips
[Top] [All Lists]

mysterious page fault in _syscall3..

To: linux-mips@linux-mips.org
Subject: mysterious page fault in _syscall3..
From: "atul srivastava" <atulsrivastava9@rediffmail.com>
Date: 21 Nov 2002 13:33:07 -0000
Original-recipient: rfc822;linux-mips@linux-mips.org
Reply-to: "atul srivastava" <atulsrivastava9@rediffmail.com>
Sender: linux-mips-bounce@linux-mips.org
Hello,

on Mips idt with Rc323334 core i have following problem.

1.After boot when the shell is execved the sequence goes like this.

in init/main.c

execve -( macro expansion in _syscall3 in unistd. h)--> sys_execve --> do_execve

do_execve return success and i get a sensible register dump after do_execve(0 call in sys_execve() like,

$0 : 00000000 00000000 00000000 00000000
$4 : 00000000 00000000 00000000 00000000
$8 : 00000000 00000000 00000000 00000000
$12: 00000000 00000000 00000000 00000000
$16: 00000000 00000000 00000000 00000000
$20: 00000000 00000000 00000000 00000000
$24: 00000000 00000000
$28: 00000000 7fff7f80 00000000 00000000
epc   : 004000b0
Status: 0000ff13
Cause : 00000020

EPC 004000b0 is verified by objdump of /bin/sh
STATUS 0000ff13 imply user mode and CAUSE 00000020 indicate syscall exception..all fine.

2.but immediately after sys_execve returns the value, i get a sudden page fault producing a imposible register dump ( epc status and cause all zero)

Unable to handle kernel paging request at virtual address 0fc01788, epc == 00000000, ra == 00000000
Oops in fault.c:do_page_fault, line 225:
$0 : 00000000 00000000 00000000 00000000
$4 : 000072c0 800ef814 00000000 801fc000
$8 : 00000000 00000000 00000000 4c696e75
$12: 78000000 00000000 00000000 00000000
$16: 00000000 00000000 00000000 00000000
$20: 00000000 00000000 00000000 00000000
$24: 00000000 00000000
$28: 6e652900 00000000 00000000 00000000
epc   : 00000000
Status: 00000000
Cause : 00000000

this i guess when sys_execve returns , stack is corrupted somehow and regs(pointer to struct pt_regs) is no more correct.

though i haven't read fully the gcc info page and acquanited with nasty asm code of _syscall3 in unistd.h , but does execve enters sys_execve directly by macro expansion in _syscall3 ..or there are relevant steps in between.?

what kind of problem i am facing ?
is this problem with saving & restoring , corruption
or in _syscall3..?
any possibility of write buffer and pipeline hazard..?

I have tried with interrupts disabled in sys_execve just for checking prupose.. would taking support of BDI2000 kind of debuggers will be helpful?

Best Regards,
Atul



__________________________________________________________
Give your Company an email address like
ravi @ ravi-exports.com.  Sign up for Rediffmail Pro today!
Know more. http://www.rediffmailpro.com/signup/


<Prev in Thread] Current Thread [Next in Thread>