| #include "uml-config.h" |
| |
| .globl syscall_stub |
| .section .__syscall_stub, "x" |
| syscall_stub: |
| syscall |
| /* We don't have 64-bit constants, so this constructs the address |
| * we need. |
| */ |
| movq $(UML_CONFIG_STUB_DATA >> 32), %rbx |
| salq $32, %rbx |
| movq $(UML_CONFIG_STUB_DATA & 0xffffffff), %rcx |
| or %rcx, %rbx |
| movq %rax, (%rbx) |
| int3 |
| |
| .globl batch_syscall_stub |
| batch_syscall_stub: |
| movq $(UML_CONFIG_STUB_DATA >> 32), %rbx |
| salq $32, %rbx |
| movq $(UML_CONFIG_STUB_DATA & 0xffffffff), %rcx |
| or %rcx, %rbx |
| movq %rbx, %rsp |
| again: pop %rax |
| cmpq $0, %rax |
| jz done |
| pop %rdi |
| pop %rsi |
| pop %rdx |
| pop %r10 |
| pop %r8 |
| pop %r9 |
| syscall |
| mov %rax, (%rbx) |
| jmp again |
| done: int3 |