Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Linux x86_64 are syscalls and int 0x80 related?

I know that in Linux x64 "syscall" and "int 0x80" assembler instructions generate an interrupt in software asking the kernel to do some work. They have different opcodes (0F 05 vs CD 80) and the former is faster.
It's not clear to me if there is any relationship between them: are they really independent? (i.e.: does "syscall" call "int 0x80"?) Thank you.

like image 703
Antonio Rizzo Avatar asked Apr 03 '15 21:04

Antonio Rizzo


2 Answers

The syscall (x86-64) and sysenter (x86-32) instructions are newer and faster, and so are used when available; but the int 0x80 mechanism is preserved for compatibility with old binaries. There is no semantic difference -- system call numbering is the same regardless of which instruction is used to transfer control into the kernel, and I think the arguments are all in the same places as well.

I have a dim recollection of there being a small number of system calls that could only be made using int 0x80 because of their unusual stack-related behavior (clone? execve? sigreturn?) but that might no longer be true.

like image 169
zwol Avatar answered Oct 16 '22 00:10

zwol


int 0x80 is rumored to be obsolete (since slow). BTW, you really want to use vdso(7)

AFAIK, both instructions are going inside the kernel, and each has some (short) sequence of kernel processing which ultimately jump into the syscall table.

like image 40
Basile Starynkevitch Avatar answered Oct 16 '22 00:10

Basile Starynkevitch