Hi,
I was trying a kernel I made and found that I got lost after it goes to
execve("/sbin/init") in init/main.c. I can ping the board which means the
board is alive. I tried to trace it down but got stuck with the following
code in "include/asm-mips/unistd.h" [ I believe it implements
the execve function since in the same file I have .....
static inline _syscall3(int,execve,const char *,file,char **,argv,char
**,envp)]
------------------------------------------------------------------------------
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
type name (atype a, btype b, ctype c) \
{ \
long __res, __err; \
__asm__ volatile ("move\t$4,%3\n\t" \
"move\t$5,%4\n\t" \
"move\t$6,%5\n\t" \
"li\t$2,%2\n\t" \
"syscall\n\t" \
"move\t%0, $2\n\t" \
"move\t%1, $7" \
: "=r" (__res), "=r" (__err) \
: "i" (__NR_##name),"r" ((long)(a)), \
"r" ((long)(b)), \
"r" ((long)(c)) \
: "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12",
\
"$13","$14","$15","$24"); \
if (__err == 0) \
return (type) __res; \
errno = __res; \
return -1; \
}
---------------------------------------------------------------------------
I guess...
After setting up the arguments its referencing (#defined ???) syscall. I
couldnt find the definition for "syscall". Could someone point me to the
right place (and help me get some sleep please ;). Also any idea about how
to debug this. (Can I set breakpoint in syscall3??). (Any idea why its not
going.. error in my irq setup??...)
Thanks a lot,
Muthu.
PS : what does this funny thing mean???
: "=r" (__res), "=r" (__err) \
: "i" (__NR_##name),"r" ((long)(a)), \
"r" ((long)(b)), \
"r" ((long)(c)) \
: "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12",
\
"$13","$14","$15","$24"); \
if (__err == 0) \
|