HardenedBSD/sys/contrib/cloudabi/cloudabi_vdso_armv6_on_64bit.S
Ed Schouten 0a9cc964a1 Import the latest CloudABI definitions, v0.18.
In addition to some small style fixes to the ARMv6 vDSO, this release
includes a new vDSO that can be used for the execution of ARMv6/ARMv7
code on 64-bit platforms.

Just like for i686 on x86-64, this new vDSO is responsible for padding
arguments and return values to 64-bit values, so that the kernel can
easily forward system calls to the native system calls.

Obtained from:	https://github.com/NuxiNL/cloudabi
2017-11-21 20:46:21 +00:00

733 lines
14 KiB
ArmAsm

// Copyright (c) 2016 Nuxi (https://nuxi.nl/) and contributors.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// This file is automatically generated. Do not edit.
//
// Source: https://github.com/NuxiNL/cloudabi
#define ENTRY(name) \
.text; \
.p2align 2; \
.global name; \
.type name, %function; \
name:
#define END(name) .size name, . - name
ENTRY(cloudabi_sys_clock_res_get)
str r0, [sp, #-16]
str r1, [sp, #-20]
mov r0, #0
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
ldrcc r2, [sp, #-12]
strcc r2, [r1, #4]
bx lr
END(cloudabi_sys_clock_res_get)
ENTRY(cloudabi_sys_clock_time_get)
str r0, [sp, #-16]
str r2, [sp, #-8]
str r3, [sp, #-4]
mov r0, #1
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #0]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
ldrcc r2, [sp, #-12]
strcc r2, [r1, #4]
bx lr
END(cloudabi_sys_clock_time_get)
ENTRY(cloudabi_sys_condvar_signal)
str r0, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r1, [sp, #-16]
str r2, [sp, #-8]
mov r0, #2
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_condvar_signal)
ENTRY(cloudabi_sys_fd_close)
str r0, [sp, #-16]
mov r0, #3
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_fd_close)
ENTRY(cloudabi_sys_fd_create1)
str r0, [sp, #-16]
str r1, [sp, #-20]
mov r0, #4
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_create1)
ENTRY(cloudabi_sys_fd_create2)
str r0, [sp, #-16]
str r1, [sp, #-20]
str r2, [sp, #-24]
mov r0, #5
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
ldrcc r1, [sp, #-24]
ldrcc r2, [sp, #-8]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_create2)
ENTRY(cloudabi_sys_fd_datasync)
str r0, [sp, #-16]
mov r0, #6
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_fd_datasync)
ENTRY(cloudabi_sys_fd_dup)
str r0, [sp, #-16]
str r1, [sp, #-20]
mov r0, #7
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_dup)
ENTRY(cloudabi_sys_fd_pread)
str r0, [sp, #-32]
str r1, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r2, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
ldr r1, [sp, #4]
str r1, [sp, #-4]
mov r0, #8
sub r2, sp, #32
swi 0
ldrcc r1, [sp, #8]
ldrcc r2, [sp, #-32]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_pread)
ENTRY(cloudabi_sys_fd_pwrite)
str r0, [sp, #-32]
str r1, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r2, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
ldr r1, [sp, #4]
str r1, [sp, #-4]
mov r0, #9
sub r2, sp, #32
swi 0
ldrcc r1, [sp, #8]
ldrcc r2, [sp, #-32]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_pwrite)
ENTRY(cloudabi_sys_fd_read)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
str r0, [sp, #-4]
str r3, [sp, #-28]
mov r0, #10
sub r2, sp, #24
swi 0
ldrcc r1, [sp, #-28]
ldrcc r2, [sp, #-24]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_read)
ENTRY(cloudabi_sys_fd_replace)
str r0, [sp, #-16]
str r1, [sp, #-8]
mov r0, #11
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_fd_replace)
ENTRY(cloudabi_sys_fd_seek)
str r0, [sp, #-24]
str r2, [sp, #-16]
str r3, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
mov r0, #12
sub r2, sp, #24
swi 0
ldrcc r1, [sp, #4]
ldrcc r2, [sp, #-24]
strcc r2, [r1, #0]
ldrcc r2, [sp, #-20]
strcc r2, [r1, #4]
bx lr
END(cloudabi_sys_fd_seek)
ENTRY(cloudabi_sys_fd_stat_get)
str r0, [sp, #-16]
str r1, [sp, #-8]
mov r0, #0
str r0, [sp, #-4]
mov r0, #13
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_fd_stat_get)
ENTRY(cloudabi_sys_fd_stat_put)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
mov r0, #14
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_fd_stat_put)
ENTRY(cloudabi_sys_fd_sync)
str r0, [sp, #-16]
mov r0, #15
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_fd_sync)
ENTRY(cloudabi_sys_fd_write)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
str r0, [sp, #-4]
str r3, [sp, #-28]
mov r0, #16
sub r2, sp, #24
swi 0
ldrcc r1, [sp, #-28]
ldrcc r2, [sp, #-24]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_fd_write)
ENTRY(cloudabi_sys_file_advise)
str r0, [sp, #-32]
str r2, [sp, #-24]
str r3, [sp, #-20]
ldr r1, [sp, #0]
str r1, [sp, #-16]
ldr r1, [sp, #4]
str r1, [sp, #-12]
ldr r1, [sp, #8]
str r1, [sp, #-8]
mov r0, #17
sub r2, sp, #32
swi 0
bx lr
END(cloudabi_sys_file_advise)
ENTRY(cloudabi_sys_file_allocate)
str r0, [sp, #-24]
str r2, [sp, #-16]
str r3, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
ldr r1, [sp, #4]
str r1, [sp, #-4]
mov r0, #18
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_file_allocate)
ENTRY(cloudabi_sys_file_create)
str r0, [sp, #-32]
str r1, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r2, [sp, #-16]
str r0, [sp, #-12]
str r3, [sp, #-8]
mov r0, #19
sub r2, sp, #32
swi 0
bx lr
END(cloudabi_sys_file_create)
ENTRY(cloudabi_sys_file_link)
str r0, [sp, #-48]
str r1, [sp, #-44]
str r2, [sp, #-40]
mov r0, #0
str r0, [sp, #-36]
str r3, [sp, #-32]
str r0, [sp, #-28]
ldr r1, [sp, #0]
str r1, [sp, #-24]
ldr r1, [sp, #4]
str r1, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #8]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #20
sub r2, sp, #48
swi 0
bx lr
END(cloudabi_sys_file_link)
ENTRY(cloudabi_sys_file_open)
str r0, [sp, #-40]
str r1, [sp, #-36]
str r2, [sp, #-32]
mov r0, #0
str r0, [sp, #-28]
str r3, [sp, #-24]
str r0, [sp, #-20]
ldr r1, [sp, #0]
str r1, [sp, #-16]
ldr r1, [sp, #4]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #21
sub r2, sp, #40
swi 0
ldrcc r1, [sp, #8]
ldrcc r2, [sp, #-40]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_file_open)
ENTRY(cloudabi_sys_file_readdir)
str r0, [sp, #-32]
str r1, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r2, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
ldr r1, [sp, #4]
str r1, [sp, #-4]
mov r0, #22
sub r2, sp, #32
swi 0
ldrcc r1, [sp, #8]
ldrcc r2, [sp, #-32]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_file_readdir)
ENTRY(cloudabi_sys_file_readlink)
str r0, [sp, #-40]
str r1, [sp, #-32]
mov r0, #0
str r0, [sp, #-28]
str r2, [sp, #-24]
str r0, [sp, #-20]
str r3, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #23
sub r2, sp, #40
swi 0
ldrcc r1, [sp, #4]
ldrcc r2, [sp, #-40]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_file_readlink)
ENTRY(cloudabi_sys_file_rename)
str r0, [sp, #-48]
str r1, [sp, #-40]
mov r0, #0
str r0, [sp, #-36]
str r2, [sp, #-32]
str r0, [sp, #-28]
str r3, [sp, #-24]
ldr r1, [sp, #0]
str r1, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #4]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #24
sub r2, sp, #48
swi 0
bx lr
END(cloudabi_sys_file_rename)
ENTRY(cloudabi_sys_file_stat_fget)
str r0, [sp, #-16]
str r1, [sp, #-8]
mov r0, #0
str r0, [sp, #-4]
mov r0, #25
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_file_stat_fget)
ENTRY(cloudabi_sys_file_stat_fput)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
mov r0, #26
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_file_stat_fput)
ENTRY(cloudabi_sys_file_stat_get)
str r0, [sp, #-32]
str r1, [sp, #-28]
str r2, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r3, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #27
sub r2, sp, #32
swi 0
bx lr
END(cloudabi_sys_file_stat_get)
ENTRY(cloudabi_sys_file_stat_put)
str r0, [sp, #-40]
str r1, [sp, #-36]
str r2, [sp, #-32]
mov r0, #0
str r0, [sp, #-28]
str r3, [sp, #-24]
str r0, [sp, #-20]
ldr r1, [sp, #0]
str r1, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #4]
str r1, [sp, #-8]
mov r0, #28
sub r2, sp, #40
swi 0
bx lr
END(cloudabi_sys_file_stat_put)
ENTRY(cloudabi_sys_file_symlink)
str r0, [sp, #-40]
mov r0, #0
str r0, [sp, #-36]
str r1, [sp, #-32]
str r0, [sp, #-28]
str r2, [sp, #-24]
str r3, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #29
sub r2, sp, #40
swi 0
bx lr
END(cloudabi_sys_file_symlink)
ENTRY(cloudabi_sys_file_unlink)
str r0, [sp, #-32]
str r1, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r2, [sp, #-16]
str r0, [sp, #-12]
str r3, [sp, #-8]
mov r0, #30
sub r2, sp, #32
swi 0
bx lr
END(cloudabi_sys_file_unlink)
ENTRY(cloudabi_sys_lock_unlock)
str r0, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r1, [sp, #-8]
mov r0, #31
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_lock_unlock)
ENTRY(cloudabi_sys_mem_advise)
str r0, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r1, [sp, #-16]
str r0, [sp, #-12]
str r2, [sp, #-8]
mov r0, #32
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_mem_advise)
ENTRY(cloudabi_sys_mem_map)
str r0, [sp, #-48]
mov r0, #0
str r0, [sp, #-44]
str r1, [sp, #-40]
str r0, [sp, #-36]
str r2, [sp, #-32]
str r3, [sp, #-24]
ldr r1, [sp, #0]
str r1, [sp, #-16]
ldr r1, [sp, #8]
str r1, [sp, #-8]
ldr r1, [sp, #12]
str r1, [sp, #-4]
mov r0, #33
sub r2, sp, #48
swi 0
ldrcc r1, [sp, #16]
ldrcc r2, [sp, #-48]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_mem_map)
ENTRY(cloudabi_sys_mem_protect)
str r0, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r1, [sp, #-16]
str r0, [sp, #-12]
str r2, [sp, #-8]
mov r0, #34
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_mem_protect)
ENTRY(cloudabi_sys_mem_sync)
str r0, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r1, [sp, #-16]
str r0, [sp, #-12]
str r2, [sp, #-8]
mov r0, #35
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_mem_sync)
ENTRY(cloudabi_sys_mem_unmap)
str r0, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #36
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_mem_unmap)
ENTRY(cloudabi_sys_poll)
str r0, [sp, #-24]
mov r0, #0
str r0, [sp, #-20]
str r1, [sp, #-16]
str r0, [sp, #-12]
str r2, [sp, #-8]
str r0, [sp, #-4]
str r3, [sp, #-28]
mov r0, #37
sub r2, sp, #24
swi 0
ldrcc r1, [sp, #-28]
ldrcc r2, [sp, #-24]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_poll)
ENTRY(cloudabi_sys_proc_exec)
str r0, [sp, #-40]
str r1, [sp, #-32]
mov r0, #0
str r0, [sp, #-28]
str r2, [sp, #-24]
str r0, [sp, #-20]
str r3, [sp, #-16]
str r0, [sp, #-12]
ldr r1, [sp, #0]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #38
sub r2, sp, #40
swi 0
bx lr
END(cloudabi_sys_proc_exec)
ENTRY(cloudabi_sys_proc_exit)
str r0, [sp, #-16]
mov r0, #39
sub r2, sp, #16
swi 0
END(cloudabi_sys_proc_exit)
ENTRY(cloudabi_sys_proc_fork)
str r0, [sp, #-20]
str r1, [sp, #-24]
mov r0, #40
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
ldrcc r1, [sp, #-24]
ldrcc r2, [sp, #-8]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_proc_fork)
ENTRY(cloudabi_sys_proc_raise)
str r0, [sp, #-16]
mov r0, #41
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_proc_raise)
ENTRY(cloudabi_sys_random_get)
str r0, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r1, [sp, #-8]
str r0, [sp, #-4]
mov r0, #42
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_random_get)
ENTRY(cloudabi_sys_sock_recv)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
str r0, [sp, #-4]
mov r0, #43
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_sock_recv)
ENTRY(cloudabi_sys_sock_send)
str r0, [sp, #-24]
str r1, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r2, [sp, #-8]
str r0, [sp, #-4]
mov r0, #44
sub r2, sp, #24
swi 0
bx lr
END(cloudabi_sys_sock_send)
ENTRY(cloudabi_sys_sock_shutdown)
str r0, [sp, #-16]
str r1, [sp, #-8]
mov r0, #45
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_sock_shutdown)
ENTRY(cloudabi_sys_thread_create)
str r0, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r1, [sp, #-20]
mov r0, #46
sub r2, sp, #16
swi 0
ldrcc r1, [sp, #-20]
ldrcc r2, [sp, #-16]
strcc r2, [r1, #0]
bx lr
END(cloudabi_sys_thread_create)
ENTRY(cloudabi_sys_thread_exit)
str r0, [sp, #-16]
mov r0, #0
str r0, [sp, #-12]
str r1, [sp, #-8]
mov r0, #47
sub r2, sp, #16
swi 0
END(cloudabi_sys_thread_exit)
ENTRY(cloudabi_sys_thread_yield)
mov r0, #48
sub r2, sp, #16
swi 0
bx lr
END(cloudabi_sys_thread_yield)