Lost when execve-ing the init.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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) \
 







[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux