57 lines
918 B
ArmAsm
Raw Normal View History

2026-01-21 18:59:54 +08:00
/* SPDX-License-Identifier: GPL-2.0 */
#include <as-layout.h>
.section .__syscall_stub, "ax"
.globl batch_syscall_stub
batch_syscall_stub:
2026-01-29 22:25:33 +08:00
/* %esp comes in as "top of page" */
mov %esp, %ecx
/* %esp has pointer to first operation */
add $8, %esp
2026-01-21 18:59:54 +08:00
again:
/* load length of additional data */
mov 0x0(%esp), %eax
/* if(length == 0) : end of list */
/* write possible 0 to header */
2026-01-29 22:25:33 +08:00
mov %eax, 0x4(%ecx)
2026-01-21 18:59:54 +08:00
cmpl $0, %eax
jz done
/* save current pointer */
2026-01-29 22:25:33 +08:00
mov %esp, 0x4(%ecx)
2026-01-21 18:59:54 +08:00
/* skip additional data */
add %eax, %esp
/* load syscall-# */
pop %eax
/* load syscall params */
pop %ebx
pop %ecx
pop %edx
pop %esi
pop %edi
pop %ebp
/* execute syscall */
int $0x80
2026-01-29 22:25:33 +08:00
/* restore top of page pointer in %ecx */
mov %esp, %ecx
andl $(~UM_KERN_PAGE_SIZE) + 1, %ecx
2026-01-21 18:59:54 +08:00
/* check return value */
pop %ebx
cmp %ebx, %eax
je again
done:
/* save return value */
2026-01-29 22:25:33 +08:00
mov %eax, (%ecx)
2026-01-21 18:59:54 +08:00
/* stop */
int3