blob: bda234e1aa01326ab64f169f98605d511664f988 [file] [log] [blame]
// Assembly code for making x86 syscalls.
//
// On x86 we use the "fastcall" convention which passes the first two
// arguments in ecx and edx. Outline.rs reorders the arguments to put
// a1 and a2 in those registers so they we don't have to move them to
// set up the kernel convention.
//
// "fastcall" expects callee to pop argument stack space, so we use
// `ret imm` instructions to clean up the stack. We don't need callee
// cleanup per se, it just comes along with using "fastcall".
.file "x86.s"
.intel_syntax noprefix
.section .text.rustix_indirect_syscall0_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall0_nr_last_fastcall
.hidden rustix_indirect_syscall0_nr_last_fastcall
.type rustix_indirect_syscall0_nr_last_fastcall, @function
rustix_indirect_syscall0_nr_last_fastcall:
.cfi_startproc
mov eax,ecx
call edx
ret
.cfi_endproc
.size rustix_indirect_syscall0_nr_last_fastcall, .-rustix_indirect_syscall0_nr_last_fastcall
.section .text.rustix_indirect_syscall1_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall1_nr_last_fastcall
.hidden rustix_indirect_syscall1_nr_last_fastcall
.type rustix_indirect_syscall1_nr_last_fastcall, @function
rustix_indirect_syscall1_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov ebx,ecx
mov eax,edx
call DWORD PTR [esp+0x8]
pop ebx
.cfi_def_cfa_offset 4
ret 0x4
.cfi_endproc
.size rustix_indirect_syscall1_nr_last_fastcall, .-rustix_indirect_syscall1_nr_last_fastcall
.section .text.rustix_indirect_syscall1_noreturn_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall1_noreturn_nr_last_fastcall
.hidden rustix_indirect_syscall1_noreturn_nr_last_fastcall
.type rustix_indirect_syscall1_noreturn_nr_last_fastcall, @function
rustix_indirect_syscall1_noreturn_nr_last_fastcall:
.cfi_startproc
mov ebx,ecx
mov eax,edx
call DWORD PTR [esp+0x4]
ud2
.cfi_endproc
.size rustix_indirect_syscall1_noreturn_nr_last_fastcall, .-rustix_indirect_syscall1_noreturn_nr_last_fastcall
.section .text.rustix_indirect_syscall2_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall2_nr_last_fastcall
.hidden rustix_indirect_syscall2_nr_last_fastcall
.type rustix_indirect_syscall2_nr_last_fastcall, @function
rustix_indirect_syscall2_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov ebx,edx
mov eax,DWORD PTR [esp+0x8]
call DWORD PTR [esp+0xc]
pop ebx
.cfi_def_cfa_offset 4
ret 0x8
.cfi_endproc
.size rustix_indirect_syscall2_nr_last_fastcall, .-rustix_indirect_syscall2_nr_last_fastcall
.section .text.rustix_indirect_syscall3_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall3_nr_last_fastcall
.hidden rustix_indirect_syscall3_nr_last_fastcall
.type rustix_indirect_syscall3_nr_last_fastcall, @function
rustix_indirect_syscall3_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0x8]
mov eax,DWORD PTR [esp+0xc]
call DWORD PTR [esp+0x10]
pop ebx
.cfi_def_cfa_offset 4
ret 0xc
.cfi_endproc
.size rustix_indirect_syscall3_nr_last_fastcall, .-rustix_indirect_syscall3_nr_last_fastcall
.section .text.rustix_indirect_syscall4_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall4_nr_last_fastcall
.hidden rustix_indirect_syscall4_nr_last_fastcall
.type rustix_indirect_syscall4_nr_last_fastcall, @function
rustix_indirect_syscall4_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
push esi
.cfi_def_cfa_offset 12
.cfi_offset esi, -12
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0xc]
mov esi,DWORD PTR [esp+0x10]
mov eax,DWORD PTR [esp+0x14]
call DWORD PTR [esp+0x18]
pop esi
.cfi_def_cfa_offset 8
pop ebx
.cfi_def_cfa_offset 4
ret 0x10
.cfi_endproc
.size rustix_indirect_syscall4_nr_last_fastcall, .-rustix_indirect_syscall4_nr_last_fastcall
.section .text.rustix_indirect_syscall5_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall5_nr_last_fastcall
.hidden rustix_indirect_syscall5_nr_last_fastcall
.type rustix_indirect_syscall5_nr_last_fastcall, @function
rustix_indirect_syscall5_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
push esi
.cfi_def_cfa_offset 12
push edi
.cfi_def_cfa_offset 16
.cfi_offset edi, -16
.cfi_offset esi, -12
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0x10]
mov esi,DWORD PTR [esp+0x14]
mov edi,DWORD PTR [esp+0x18]
mov eax,DWORD PTR [esp+0x1c]
call DWORD PTR [esp+0x20]
pop edi
.cfi_def_cfa_offset 12
pop esi
.cfi_def_cfa_offset 8
pop ebx
.cfi_def_cfa_offset 4
ret 0x14
.cfi_endproc
.size rustix_indirect_syscall5_nr_last_fastcall, .-rustix_indirect_syscall5_nr_last_fastcall
.section .text.rustix_indirect_syscall6_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_indirect_syscall6_nr_last_fastcall
.hidden rustix_indirect_syscall6_nr_last_fastcall
.type rustix_indirect_syscall6_nr_last_fastcall, @function
rustix_indirect_syscall6_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
push esi
.cfi_def_cfa_offset 12
push edi
.cfi_def_cfa_offset 16
push ebp
.cfi_def_cfa_offset 20
.cfi_offset ebp, -20
.cfi_offset edi, -16
.cfi_offset esi, -12
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0x14]
mov esi,DWORD PTR [esp+0x18]
mov edi,DWORD PTR [esp+0x1c]
mov ebp,DWORD PTR [esp+0x20]
mov eax,DWORD PTR [esp+0x24]
call DWORD PTR [esp+0x28]
pop ebp
.cfi_def_cfa_offset 16
pop edi
.cfi_def_cfa_offset 12
pop esi
.cfi_def_cfa_offset 8
pop ebx
.cfi_def_cfa_offset 4
ret 0x18
.cfi_endproc
.size rustix_indirect_syscall6_nr_last_fastcall, .-rustix_indirect_syscall6_nr_last_fastcall
.section .text.rustix_syscall0_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall0_nr_last_fastcall
.hidden rustix_syscall0_nr_last_fastcall
.type rustix_syscall0_nr_last_fastcall, @function
rustix_syscall0_nr_last_fastcall:
.cfi_startproc
mov eax,ecx
int 0x80
ret
.cfi_endproc
.size rustix_syscall0_nr_last_fastcall, .-rustix_syscall0_nr_last_fastcall
.section .text.rustix_syscall1_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall1_nr_last_fastcall
.hidden rustix_syscall1_nr_last_fastcall
.type rustix_syscall1_nr_last_fastcall, @function
rustix_syscall1_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov eax,edx
mov ebx,ecx
int 0x80
pop ebx
.cfi_def_cfa_offset 4
ret
.cfi_endproc
.size rustix_syscall1_nr_last_fastcall, .-rustix_syscall1_nr_last_fastcall
.section .text.rustix_syscall1_noreturn_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall1_noreturn_nr_last_fastcall
.hidden rustix_syscall1_noreturn_nr_last_fastcall
.type rustix_syscall1_noreturn_nr_last_fastcall, @function
rustix_syscall1_noreturn_nr_last_fastcall:
.cfi_startproc
mov eax,edx
mov ebx,ecx
int 0x80
ud2
.cfi_endproc
.size rustix_syscall1_noreturn_nr_last_fastcall, .-rustix_syscall1_noreturn_nr_last_fastcall
.section .text.rustix_syscall2_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall2_nr_last_fastcall
.hidden rustix_syscall2_nr_last_fastcall
.type rustix_syscall2_nr_last_fastcall, @function
rustix_syscall2_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov ebx,edx
mov eax,DWORD PTR [esp+0x8]
int 0x80
pop ebx
.cfi_def_cfa_offset 4
ret 0x4
.cfi_endproc
.size rustix_syscall2_nr_last_fastcall, .-rustix_syscall2_nr_last_fastcall
.section .text.rustix_syscall3_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall3_nr_last_fastcall
.hidden rustix_syscall3_nr_last_fastcall
.type rustix_syscall3_nr_last_fastcall, @function
rustix_syscall3_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0x8]
mov eax,DWORD PTR [esp+0xc]
int 0x80
pop ebx
.cfi_def_cfa_offset 4
ret 0x8
.cfi_endproc
.size rustix_syscall3_nr_last_fastcall, .-rustix_syscall3_nr_last_fastcall
.section .text.rustix_syscall4_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall4_nr_last_fastcall
.hidden rustix_syscall4_nr_last_fastcall
.type rustix_syscall4_nr_last_fastcall, @function
rustix_syscall4_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
push esi
.cfi_def_cfa_offset 12
.cfi_offset esi, -12
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0xc]
mov esi,DWORD PTR [esp+0x10]
mov eax,DWORD PTR [esp+0x14]
int 0x80
pop esi
.cfi_def_cfa_offset 8
pop ebx
.cfi_def_cfa_offset 4
ret 0xc
.cfi_endproc
.size rustix_syscall4_nr_last_fastcall, .-rustix_syscall4_nr_last_fastcall
.section .text.rustix_syscall5_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall5_nr_last_fastcall
.hidden rustix_syscall5_nr_last_fastcall
.type rustix_syscall5_nr_last_fastcall, @function
rustix_syscall5_nr_last_fastcall:
.cfi_startproc
push ebx
.cfi_def_cfa_offset 8
push edi
.cfi_def_cfa_offset 12
push esi
.cfi_def_cfa_offset 16
.cfi_offset esi, -16
.cfi_offset edi, -12
.cfi_offset ebx, -8
mov ebx,DWORD PTR [esp+0x10]
mov esi,DWORD PTR [esp+0x14]
mov edi,DWORD PTR [esp+0x18]
mov eax,DWORD PTR [esp+0x1c]
int 0x80
pop esi
.cfi_def_cfa_offset 12
pop edi
.cfi_def_cfa_offset 8
pop ebx
.cfi_def_cfa_offset 4
ret 0x10
.cfi_endproc
.size rustix_syscall5_nr_last_fastcall, .-rustix_syscall5_nr_last_fastcall
.section .text.rustix_syscall6_nr_last_fastcall,"ax",@progbits
.p2align 4
.weak rustix_syscall6_nr_last_fastcall
.hidden rustix_syscall6_nr_last_fastcall
.type rustix_syscall6_nr_last_fastcall, @function
rustix_syscall6_nr_last_fastcall:
.cfi_startproc
push ebp
.cfi_def_cfa_offset 8
push ebx
.cfi_def_cfa_offset 12
push edi
.cfi_def_cfa_offset 16
push esi
.cfi_def_cfa_offset 20
.cfi_offset esi, -20
.cfi_offset edi, -16
.cfi_offset ebx, -12
.cfi_offset ebp, -8
mov ebx,DWORD PTR [esp+0x14]
mov esi,DWORD PTR [esp+0x18]
mov edi,DWORD PTR [esp+0x1c]
mov ebp,DWORD PTR [esp+0x20]
mov eax,DWORD PTR [esp+0x24]
int 0x80
pop esi
.cfi_def_cfa_offset 16
pop edi
.cfi_def_cfa_offset 12
pop ebx
.cfi_def_cfa_offset 8
pop ebp
.cfi_def_cfa_offset 4
ret 0x14
.cfi_endproc
.size rustix_syscall6_nr_last_fastcall, .-rustix_syscall6_nr_last_fastcall
.section .text.rustix_int_0x80,"ax",@progbits
.p2align 4
.weak rustix_int_0x80
.hidden rustix_int_0x80
.type rustix_int_0x80, @function
rustix_int_0x80:
.cfi_startproc
int 0x80
ret
.cfi_endproc
.size rustix_int_0x80, .-rustix_int_0x80
.section .note.GNU-stack,"",@progbits