Re: Stepping through entry.S

Randy.Dunlap (rddunlap@osdl.org)
Wed, 3 Apr 2002 09:29:28 -0800 (PST)


On Wed, 3 Apr 2002, Sridhar N wrote:

| Hello (recycled)

| I was trying to trace the handling of the system calls, and to step through
| the entry.S on i386 machine. I basically used this:
|
| srin_entryS_debug_mesg: #My addition
| .asciz "some relevant message\n"
| ALIGN
| tracesys: #haven't changed anything here..
| .
| .
| .
| jae tracesys_exit
| pushl $srin_entryS_debug_mesg #just this
| call SYMBOL_NAME(printk) # and this
| call *SYMBOL_NAME(sys_call_table)(,%eax,4)
| movl %eax,EAX(%esp) # save the return value
| tracesys_exit:
|
| Shouldn't this call printk everytime a system call is made or atleast crash
| the kernel if something is dead wrong ? ( It isn't .. everything seems normal
| as though the printk isn't there ) Also, how can i know the values in the
| specific registers in that file ? Specifically, whenever a system call is
| made, what registers store what values ? I'm using kernel 2.4.7 on a K6-2.

The tracesys: label (code) is only used if ptrace is enabled for
the task. Is it enabled? If not, you aren't executing this code
at all.

testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
jne tracesys

For the register interface, AFAIK, see the gcc docs, such as
Extensions to the C Language Family:
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html
and search for /regparm/ .
<quote>
regparm (number)
On the Intel 386, the regparm attribute causes the compiler to pass up
to number integer arguments in registers EAX, EDX, and ECX instead of
on the stack. Functions that take a variable number of arguments will
continue to be passed all of their arguments on the stack.
</quote>
Someone please correct or add to this. :)

-- 
~Randy

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/