int 0x40

From: Raman S (raman_s_@hotmail.com)
Date: Fri Jan 18 2002 - 11:26:29 EST


Hi,
  I relatively new to the kernel and am trying to understand how the linux
kernel handles interrupts. For this I attempted to
create an int 0x40 by adding a set_system_gate(64, &system_call) in traps.c.
I verfied by giving out print statements within set_system_gate that 64 is
being set during initialization (though it isnt a surprise that it is being
set). But when i give an int 0x40 in a user level assembly program I get
segmentation fault, (a SIGSEGV signal is sent to the process). I have tried
adding another function in entry.S called my_system_call and reproducing the
code in system_call with a jmp ret_from_sys_call at the end. Also tried
giving an empty C function for my_system_call all with the same result.

My assembly prints out hello world, from the linux assembly how to,
reproduced here
If i replace int 0x80 with my int 0x40 I end up with a segmentation fault.
Is there any thing other than set_system_gate and writing the my_system_call
handler, that i need to do to have a successful int 0x40? I had tried
   a) commenting out just the deference of the system handler function
within system_call (call *sys_call_table(0, %eax, 4) )
   b) using &system_call itself in set_system_gate
  but still the same situation.

Any suggestions will be appreciated.

Thanks
Raman

.data # section declaration

msg:
        .string "Hello, world!\n" # our dear string
        len = . - msg # length of our dear string

.text # section declaration

                        # we must export the entry point to the ELF linker or
    .global _start # loader. They conventionally recognize _start as their
                        # entry point. Use ld -e foo to override the default.

_start:

# write our string to stdout

        movl $len,%edx # third argument: message length
        movl $msg,%ecx # second argument: pointer to message to write
        movl $1,%ebx # first argument: file handle (stdout)
        movl $4,%eax # system call number (sys_write)
        int $0x80 # call kernel

# and exit

        movl $0,%ebx # first argument: exit code
        movl $1,%eax # system call number (sys_exit)
        int $0x80 # call kernel

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp.

-
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/



This archive was generated by hypermail 2b29 : Wed Jan 23 2002 - 21:00:27 EST