Cross Reference: linux_syscall.S
xref
: /
vbox
/
src
/
VBox
/
Devices
/
PC
/
ipxe
/
src
/
arch
/
i386
/
core
/
linux
/
linux_syscall.S
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
section
".data"
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
globl
linux_errno
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
linux_errno
: .
int
0
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
section
".text"
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
code32
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
globl
linux_syscall
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
type
linux_syscall
, @
function
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
linux_syscall
:
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
/* Save registers */
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
pushl
%
ebx
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
pushl
%
esi
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
pushl
%
edi
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
pushl
%
ebp
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
20
(%
esp
), %
eax
// C arg1 -> syscall number
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
24
(%
esp
), %
ebx
// C arg2 -> syscall arg1
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
28
(%
esp
), %
ecx
// C arg3 -> syscall arg2
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
32
(%
esp
), %
edx
// C arg4 -> syscall arg3
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
36
(%
esp
), %
esi
// C arg5 -> syscall arg4
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
40
(%
esp
), %
edi
// C arg6 -> syscall arg5
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
44
(%
esp
), %
ebp
// C arg7 -> syscall arg6
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
int
$
0x80
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
/* Restore registers */
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
popl
%
ebp
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
popl
%
edi
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
popl
%
esi
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
popl
%
ebx
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
cmpl
$-
4095
, %
eax
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
jae
1f
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
ret
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
1
:
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
negl
%
eax
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
%
eax
,
linux_errno
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
movl
$-
1
, %
eax
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
ret
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
a734c64bff58bda2fa48c2795453e092167b0ff7
vboxsync
.
size
linux_syscall
, . -
linux_syscall