am c858b567
: Merge "AArch64: Add initial support for AArch64"
* commit 'c858b567ad20efa86652ffed7b7427a2c77709bd': AArch64: Add initial support for AArch64
This commit is contained in:
commit
1a92f73999
@ -506,6 +506,40 @@ libc_common_src_files += \
|
|||||||
|
|
||||||
endif # x86_64
|
endif # x86_64
|
||||||
|
|
||||||
|
ifeq ($(TARGET_ARCH), aarch64)
|
||||||
|
#TODO: Replace C stubs with optimised assembly
|
||||||
|
libc_common_src_files += \
|
||||||
|
bionic/memchr.c \
|
||||||
|
bionic/memcmp.c \
|
||||||
|
bionic/memcpy.c \
|
||||||
|
bionic/memmove.c \
|
||||||
|
bionic/memrchr.c \
|
||||||
|
bionic/memset.c \
|
||||||
|
bionic/strchr.cpp \
|
||||||
|
bionic/strnlen.c \
|
||||||
|
string/bcopy.c \
|
||||||
|
string/index.c \
|
||||||
|
string/memcmp16.c \
|
||||||
|
string/strcat.c \
|
||||||
|
string/strcmp.c \
|
||||||
|
string/strcpy.c \
|
||||||
|
string/strlcat.c \
|
||||||
|
string/strlcpy.c \
|
||||||
|
string/strlen.c \
|
||||||
|
string/strncat.c \
|
||||||
|
string/strncmp.c \
|
||||||
|
string/strncpy.c \
|
||||||
|
string/strrchr.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcscat.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcschr.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcscmp.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcscpy.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcslen.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wcsrchr.c \
|
||||||
|
upstream-freebsd/lib/libc/string/wmemcmp.c \
|
||||||
|
|
||||||
|
endif # aarch64
|
||||||
|
|
||||||
ifeq ($(TARGET_ARCH),arm)
|
ifeq ($(TARGET_ARCH),arm)
|
||||||
ifeq ($(strip $(TARGET_CPU_VARIANT)),)
|
ifeq ($(strip $(TARGET_CPU_VARIANT)),)
|
||||||
$(warning TARGET_ARCH is arm, but TARGET_CPU_VARIANT is not defined)
|
$(warning TARGET_ARCH is arm, but TARGET_CPU_VARIANT is not defined)
|
||||||
@ -628,7 +662,7 @@ libc_common_c_includes := \
|
|||||||
# which are needed to build all other objects (shared/static libs and
|
# which are needed to build all other objects (shared/static libs and
|
||||||
# executables)
|
# executables)
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
# ARM, MIPS, and x86 all need crtbegin_so/crtend_so.
|
# AArch64, ARM, MIPS, and x86 all need crtbegin_so/crtend_so.
|
||||||
#
|
#
|
||||||
# For x86, the .init section must point to a function that calls all
|
# For x86, the .init section must point to a function that calls all
|
||||||
# entries in the .ctors section. (on ARM this is done through the
|
# entries in the .ctors section. (on ARM this is done through the
|
||||||
@ -641,6 +675,10 @@ libc_common_c_includes := \
|
|||||||
libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin.c
|
libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin.c
|
||||||
libc_crt_target_crtbegin_so_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c
|
libc_crt_target_crtbegin_so_file := $(LOCAL_PATH)/arch-common/bionic/crtbegin_so.c
|
||||||
|
|
||||||
|
ifeq ($(TARGET_ARCH),aarch64)
|
||||||
|
libc_crt_target_so_cflags :=
|
||||||
|
libc_crt_target_crtbegin_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.c
|
||||||
|
endif
|
||||||
ifeq ($(TARGET_ARCH),arm)
|
ifeq ($(TARGET_ARCH),arm)
|
||||||
libc_crt_target_so_cflags :=
|
libc_crt_target_so_cflags :=
|
||||||
endif
|
endif
|
||||||
@ -1065,6 +1103,8 @@ include $(BUILD_SHARED_LIBRARY)
|
|||||||
# ========================================================
|
# ========================================================
|
||||||
# libc_malloc_debug_qemu.so
|
# libc_malloc_debug_qemu.so
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
#TODO: We do not build this library for now
|
||||||
|
ifneq ($(TARGET_ARCH),aarch64)
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_CFLAGS := \
|
LOCAL_CFLAGS := \
|
||||||
@ -1090,6 +1130,7 @@ LOCAL_MODULE_TAGS := eng debug
|
|||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
|
||||||
|
endif #!aarch64
|
||||||
endif #!user
|
endif #!user
|
||||||
|
|
||||||
|
|
||||||
|
14
libc/arch-aarch64/aarch64.mk
Normal file
14
libc/arch-aarch64/aarch64.mk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
_LIBC_ARCH_COMMON_SRC_FILES := \
|
||||||
|
arch-aarch64/bionic/__bionic_clone.S \
|
||||||
|
arch-aarch64/bionic/bzero_aarch64.c \
|
||||||
|
arch-aarch64/bionic/cacheflush_aarch64.c \
|
||||||
|
arch-aarch64/bionic/_exit_with_stack_teardown.S \
|
||||||
|
arch-aarch64/bionic/futex_aarch64.S \
|
||||||
|
arch-aarch64/bionic/__get_sp.S \
|
||||||
|
arch-aarch64/bionic/__rt_sigreturn.S \
|
||||||
|
arch-aarch64/bionic/_setjmp.S \
|
||||||
|
arch-aarch64/bionic/setjmp.S \
|
||||||
|
arch-aarch64/bionic/__set_tls.c \
|
||||||
|
arch-aarch64/bionic/sigsetjmp.S \
|
||||||
|
arch-aarch64/bionic/syscall.S \
|
||||||
|
arch-aarch64/bionic/vfork.S \
|
63
libc/arch-aarch64/bionic/__bionic_clone.S
Normal file
63
libc/arch-aarch64/bionic/__bionic_clone.S
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <private/bionic_asm.h>
|
||||||
|
|
||||||
|
// pid_t __bionic_clone(int flags, void* child_stack, pid_t* parent_tid, void* tls, pid_t* child_tid, int (*fn)(void*), void* arg);
|
||||||
|
|
||||||
|
ENTRY(__bionic_clone)
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
mov x29, sp
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
|
||||||
|
/* store thread pointer & args in child stack */
|
||||||
|
stp x5, x6, [x1, #-16]
|
||||||
|
|
||||||
|
/* sys_clone */
|
||||||
|
uxtw x0, w0
|
||||||
|
mov x8, __NR_clone
|
||||||
|
svc #0
|
||||||
|
|
||||||
|
/* check for child/parent */
|
||||||
|
cbz x0,1f
|
||||||
|
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* thread initialization - set the end of the frame record chain */
|
||||||
|
1:
|
||||||
|
mov x29, xzr
|
||||||
|
ldp x0, x1, [sp, #-16]
|
||||||
|
b __bionic_clone_entry
|
||||||
|
END(__bionic_clone)
|
34
libc/arch-aarch64/bionic/__get_sp.S
Normal file
34
libc/arch-aarch64/bionic/__get_sp.S
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
ENTRY(__get_sp)
|
||||||
|
mov x0, sp
|
||||||
|
ret
|
||||||
|
END(__get_sp)
|
35
libc/arch-aarch64/bionic/__rt_sigreturn.S
Normal file
35
libc/arch-aarch64/bionic/__rt_sigreturn.S
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
ENTRY_PRIVATE(__rt_sigreturn)
|
||||||
|
mov x8, __NR_rt_sigreturn
|
||||||
|
svc #0
|
||||||
|
END(__rt_sigreturn)
|
31
libc/arch-aarch64/bionic/__set_tls.c
Normal file
31
libc/arch-aarch64/bionic/__set_tls.c
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void __set_tls(void* tls) {
|
||||||
|
asm("msr tpidr_el0, %0" : : "r" (tls));
|
||||||
|
}
|
43
libc/arch-aarch64/bionic/_exit_with_stack_teardown.S
Normal file
43
libc/arch-aarch64/bionic/_exit_with_stack_teardown.S
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
// void _exit_with_stack_teardown(void* stackBase, size_t stackSize, int status)
|
||||||
|
ENTRY(_exit_with_stack_teardown)
|
||||||
|
mov w28, w2
|
||||||
|
mov w8, __NR_munmap
|
||||||
|
svc #0
|
||||||
|
// If munmap failed, we ignore the failure and exit anyway.
|
||||||
|
|
||||||
|
sxtw x0, w28
|
||||||
|
mov w8, __NR_exit
|
||||||
|
svc #0
|
||||||
|
// The exit syscall does not return.
|
||||||
|
END(_exit_with_stack_teardown)
|
111
libc/arch-aarch64/bionic/_setjmp.S
Normal file
111
libc/arch-aarch64/bionic/_setjmp.S
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
#include <machine/setjmp.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* C library - _setjmp, _longjmp
|
||||||
|
*
|
||||||
|
* _longjmp(jmp_buf state, int value)
|
||||||
|
* will generate a "return(v)" from the last call to _setjmp(state) by restoring
|
||||||
|
* registers from the stack. The previous signal state is NOT restored.
|
||||||
|
*
|
||||||
|
* NOTE: x0 return value
|
||||||
|
* x9-x15 temporary registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY(_setjmp)
|
||||||
|
/* store magic number */
|
||||||
|
ldr w9, .L_setjmp_magic
|
||||||
|
str w9, [x0, #(_JB_MAGIC * 4)]
|
||||||
|
|
||||||
|
/* store core registers */
|
||||||
|
mov x10, sp
|
||||||
|
stp x30, x10, [x0, #(_JB_CORE_BASE * 4 + 16 * 0)]
|
||||||
|
stp x28, x29, [x0, #(_JB_CORE_BASE * 4 + 16 * 1)]
|
||||||
|
stp x26, x27, [x0, #(_JB_CORE_BASE * 4 + 16 * 2)]
|
||||||
|
stp x24, x25, [x0, #(_JB_CORE_BASE * 4 + 16 * 3)]
|
||||||
|
stp x22, x23, [x0, #(_JB_CORE_BASE * 4 + 16 * 4)]
|
||||||
|
stp x20, x21, [x0, #(_JB_CORE_BASE * 4 + 16 * 5)]
|
||||||
|
str x19, [x0, #(_JB_CORE_BASE * 4 + 16 * 6)]
|
||||||
|
|
||||||
|
/* store floating point registers */
|
||||||
|
stp d14, d15, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 0)]
|
||||||
|
stp d12, d13, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 1)]
|
||||||
|
stp d10, d11, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 2)]
|
||||||
|
stp d8, d9, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 3)]
|
||||||
|
|
||||||
|
mov w0, wzr
|
||||||
|
ret
|
||||||
|
END(_setjmp)
|
||||||
|
|
||||||
|
.L_setjmp_magic:
|
||||||
|
.word _JB_MAGIC__SETJMP
|
||||||
|
|
||||||
|
ENTRY(_longjmp)
|
||||||
|
/* check magic */
|
||||||
|
ldr w9, .L_setjmp_magic
|
||||||
|
ldr w10, [x0, #(_JB_MAGIC * 4)]
|
||||||
|
cmp w9, w10
|
||||||
|
b.ne botch
|
||||||
|
|
||||||
|
/* restore core registers */
|
||||||
|
ldp x30, x10, [x0, #(_JB_CORE_BASE * 4 + 16 * 0)]
|
||||||
|
mov sp, x10
|
||||||
|
ldp x28, x29, [x0, #(_JB_CORE_BASE * 4 + 16 * 1)]
|
||||||
|
ldp x26, x27, [x0, #(_JB_CORE_BASE * 4 + 16 * 2)]
|
||||||
|
ldp x24, x25, [x0, #(_JB_CORE_BASE * 4 + 16 * 3)]
|
||||||
|
ldp x22, x23, [x0, #(_JB_CORE_BASE * 4 + 16 * 4)]
|
||||||
|
ldp x20, x21, [x0, #(_JB_CORE_BASE * 4 + 16 * 5)]
|
||||||
|
ldr x19, [x0, #(_JB_CORE_BASE * 4 + 16 * 6)]
|
||||||
|
|
||||||
|
/* restore floating point registers */
|
||||||
|
ldp d14, d15, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 0)]
|
||||||
|
ldp d12, d13, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 1)]
|
||||||
|
ldp d10, d11, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 2)]
|
||||||
|
ldp d8, d9, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 3)]
|
||||||
|
|
||||||
|
/* validate sp (sp mod 16 = 0) and lr (lr mod 4 = 0) */
|
||||||
|
tst x30, #3
|
||||||
|
b.ne botch
|
||||||
|
mov x10, sp
|
||||||
|
tst x10, #15
|
||||||
|
b.ne botch
|
||||||
|
|
||||||
|
/* set return value */
|
||||||
|
cmp w1, wzr
|
||||||
|
csinc w0, w1, wzr, ne
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* validation failed, die die die */
|
||||||
|
botch:
|
||||||
|
bl PIC_SYM(_C_LABEL(longjmperror), PLT)
|
||||||
|
bl PIC_SYM(_C_LABEL(abort), PLT)
|
||||||
|
b . - 8 /* Cannot get here */
|
||||||
|
END(_longjmp)
|
33
libc/arch-aarch64/bionic/bzero_aarch64.c
Normal file
33
libc/arch-aarch64/bionic/bzero_aarch64.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
void bzero(void* s, size_t n) {
|
||||||
|
memset(s, '\0', n);
|
||||||
|
}
|
33
libc/arch-aarch64/bionic/cacheflush_aarch64.c
Normal file
33
libc/arch-aarch64/bionic/cacheflush_aarch64.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO: We can implement a specialised cacheflush() */
|
||||||
|
int cacheflush (long start, long end, long flags __attribute__((unused))) {
|
||||||
|
__builtin___clear_cache((char*) start, (char*) end);
|
||||||
|
return 0;
|
||||||
|
}
|
69
libc/arch-aarch64/bionic/crtbegin.c
Normal file
69
libc/arch-aarch64/bionic/crtbegin.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../bionic/libc_init_common.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
__attribute__ ((section (".preinit_array")))
|
||||||
|
void (*__PREINIT_ARRAY__)(void) = (void (*)(void)) -1;
|
||||||
|
|
||||||
|
__attribute__ ((section (".init_array")))
|
||||||
|
void (*__INIT_ARRAY__)(void) = (void (*)(void)) -1;
|
||||||
|
|
||||||
|
__attribute__ ((section (".fini_array")))
|
||||||
|
void (*__FINI_ARRAY__)(void) = (void (*)(void)) -1;
|
||||||
|
|
||||||
|
|
||||||
|
__LIBC_HIDDEN__ void do_aarch64_start(void* raw_args) {
|
||||||
|
structors_array_t array;
|
||||||
|
array.preinit_array = &__PREINIT_ARRAY__;
|
||||||
|
array.init_array = &__INIT_ARRAY__;
|
||||||
|
array.fini_array = &__FINI_ARRAY__;
|
||||||
|
__libc_init(raw_args, NULL, &main, &array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Put the value of sp in x0 and call do_aarch64_init(). The latter will then
|
||||||
|
* then be able to access the stack as prepared by the kernel's execve system
|
||||||
|
* call (via the first argument).
|
||||||
|
*/
|
||||||
|
__asm__ (
|
||||||
|
" .text \n"
|
||||||
|
" .align 2 \n"
|
||||||
|
" .global _start \n"
|
||||||
|
" .hidden _start \n"
|
||||||
|
" .type _start, %function \n"
|
||||||
|
"_start: \n"
|
||||||
|
" add x0, sp, xzr \n"
|
||||||
|
" b do_aarch64_start \n"
|
||||||
|
" .size _start, .-_start \n"
|
||||||
|
);
|
||||||
|
|
||||||
|
#include "../../arch-common/bionic/__dso_handle.h"
|
||||||
|
#include "../../arch-common/bionic/atexit.h"
|
129
libc/arch-aarch64/bionic/futex_aarch64.S
Normal file
129
libc/arch-aarch64/bionic/futex_aarch64.S
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#define FUTEX_WAIT 0
|
||||||
|
#define FUTEX_WAKE 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Syscall interface for fast userspace locks
|
||||||
|
*
|
||||||
|
* int __futex_wait(volatile void *ftx, int val, const struct timespec *timeout);
|
||||||
|
* int __futex_wake(volatile void *ftx, int count);
|
||||||
|
* int __futex_syscall3(volatile void *ftx, int op, int val);
|
||||||
|
* int __futex_syscall4(volatile void *ftx, int op, int val, const struct timespec *timeout);
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY(__futex_syscall4)
|
||||||
|
/* create AArch64 PCS frame pointer */
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
mov x29, sp
|
||||||
|
|
||||||
|
/* store x8 */
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
|
||||||
|
/* syscall No. in x8 */
|
||||||
|
mov x8, __NR_futex
|
||||||
|
svc #0
|
||||||
|
|
||||||
|
/* restore x8 */
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
|
||||||
|
/* check if syscall returned successfully */
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
END(__futex_syscall4)
|
||||||
|
|
||||||
|
ENTRY(__futex_syscall3)
|
||||||
|
/* __futex_syscall4 but with fewer arguments */
|
||||||
|
b __futex_syscall4
|
||||||
|
END(__futex_syscall3)
|
||||||
|
|
||||||
|
ENTRY(__futex_wait)
|
||||||
|
/* create AArch64 PCS frame pointer */
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
mov x29, sp
|
||||||
|
|
||||||
|
/* store x8 */
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
|
||||||
|
/* arange arguments as expected in the kernel side */
|
||||||
|
mov x3, x2
|
||||||
|
mov w2, w1
|
||||||
|
mov w1, #FUTEX_WAIT
|
||||||
|
|
||||||
|
/* syscall No. in X8 */
|
||||||
|
mov x8, __NR_futex
|
||||||
|
svc #0
|
||||||
|
|
||||||
|
/* restore x8 */
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
|
||||||
|
/* check if syscall returned successfully */
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
END(__futex_wait)
|
||||||
|
|
||||||
|
ENTRY(__futex_wake)
|
||||||
|
/* create AArch64 PCS frame pointer */
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
mov x29, sp
|
||||||
|
|
||||||
|
/* store x8 */
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
|
||||||
|
/* arange arguments as expected in the kernel side */
|
||||||
|
mov w2, w1
|
||||||
|
mov w1, #FUTEX_WAIT
|
||||||
|
|
||||||
|
/* syscall No. in X8 */
|
||||||
|
mov x8, __NR_futex
|
||||||
|
svc #0
|
||||||
|
|
||||||
|
/* restore x8 */
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
|
||||||
|
/* check if syscall returned successfully */
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
END(__futex_wake)
|
123
libc/arch-aarch64/bionic/setjmp.S
Normal file
123
libc/arch-aarch64/bionic/setjmp.S
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
#include <machine/setjmp.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* C library - _setjmp, _longjmp
|
||||||
|
*
|
||||||
|
* _longjmp(jmp_buf state, int value)
|
||||||
|
* will generate a "return(v)" from the last call to _setjmp(state) by restoring
|
||||||
|
* registers from the stack. The previous signal state is NOT restored.
|
||||||
|
*
|
||||||
|
* NOTE: x0 return value
|
||||||
|
* x9-x15 temporary registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY(setjmp)
|
||||||
|
/* block all signals an retrieve signal mask */
|
||||||
|
stp x0, x30, [sp, #-16]!
|
||||||
|
|
||||||
|
mov x0, xzr
|
||||||
|
bl PIC_SYM(_C_LABEL(sigblock), PLT)
|
||||||
|
mov w1, w0
|
||||||
|
|
||||||
|
ldp x0, x30, [sp], #16
|
||||||
|
|
||||||
|
/* store signal mask */
|
||||||
|
str w1, [x0, #(_JB_SIGMASK *4)]
|
||||||
|
|
||||||
|
/* store magic number */
|
||||||
|
ldr w9, .L_setjmp_magic
|
||||||
|
str w9, [x0, #(_JB_MAGIC * 4)]
|
||||||
|
|
||||||
|
/* store core registers */
|
||||||
|
mov x10, sp
|
||||||
|
stp x30, x10, [x0, #(_JB_CORE_BASE * 4 + 16 * 0)]
|
||||||
|
stp x28, x29, [x0, #(_JB_CORE_BASE * 4 + 16 * 1)]
|
||||||
|
stp x26, x27, [x0, #(_JB_CORE_BASE * 4 + 16 * 2)]
|
||||||
|
stp x24, x25, [x0, #(_JB_CORE_BASE * 4 + 16 * 3)]
|
||||||
|
stp x22, x23, [x0, #(_JB_CORE_BASE * 4 + 16 * 4)]
|
||||||
|
stp x20, x21, [x0, #(_JB_CORE_BASE * 4 + 16 * 5)]
|
||||||
|
str x19, [x0, #(_JB_CORE_BASE * 4 + 16 * 6)]
|
||||||
|
|
||||||
|
/* store floating point registers */
|
||||||
|
stp d14, d15, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 0)]
|
||||||
|
stp d12, d13, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 1)]
|
||||||
|
stp d10, d11, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 2)]
|
||||||
|
stp d8, d9, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 3)]
|
||||||
|
|
||||||
|
mov w0, wzr
|
||||||
|
ret
|
||||||
|
END(setjmp)
|
||||||
|
|
||||||
|
.L_setjmp_magic:
|
||||||
|
.word _JB_MAGIC__SETJMP
|
||||||
|
|
||||||
|
ENTRY(longjmp)
|
||||||
|
/* check magic */
|
||||||
|
ldr w9, .L_setjmp_magic
|
||||||
|
ldr w10, [x0, #(_JB_MAGIC * 4)]
|
||||||
|
cmp w9, w10
|
||||||
|
b.ne botch
|
||||||
|
|
||||||
|
/* restore core registers */
|
||||||
|
ldp x30, x10, [x0, #(_JB_CORE_BASE * 4 + 16 * 0)]
|
||||||
|
mov sp, x10
|
||||||
|
ldp x28, x29, [x0, #(_JB_CORE_BASE * 4 + 16 * 1)]
|
||||||
|
ldp x26, x27, [x0, #(_JB_CORE_BASE * 4 + 16 * 2)]
|
||||||
|
ldp x24, x25, [x0, #(_JB_CORE_BASE * 4 + 16 * 3)]
|
||||||
|
ldp x22, x23, [x0, #(_JB_CORE_BASE * 4 + 16 * 4)]
|
||||||
|
ldp x20, x21, [x0, #(_JB_CORE_BASE * 4 + 16 * 5)]
|
||||||
|
ldr x19, [x0, #(_JB_CORE_BASE * 4 + 16 * 6)]
|
||||||
|
|
||||||
|
/* restore floating point registers */
|
||||||
|
ldp d14, d15, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 0)]
|
||||||
|
ldp d12, d13, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 1)]
|
||||||
|
ldp d10, d11, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 2)]
|
||||||
|
ldp d8, d9, [x0, #(_JB_FLOAT_BASE * 4 + 16 * 3)]
|
||||||
|
|
||||||
|
/* validate sp (sp mod 16 = 0) and lr (lr mod 4 = 0) */
|
||||||
|
tst x30, #3
|
||||||
|
b.ne botch
|
||||||
|
mov x10, sp
|
||||||
|
tst x10, #15
|
||||||
|
b.ne botch
|
||||||
|
|
||||||
|
/* set return value */
|
||||||
|
cmp w1, wzr
|
||||||
|
csinc w0, w1, wzr, ne
|
||||||
|
ret
|
||||||
|
|
||||||
|
/* validation failed, die die die */
|
||||||
|
botch:
|
||||||
|
bl PIC_SYM(_C_LABEL(longjmperror), PLT)
|
||||||
|
bl PIC_SYM(_C_LABEL(abort), PLT)
|
||||||
|
b . - 8 /* Cannot get here */
|
||||||
|
END(longjmp)
|
51
libc/arch-aarch64/bionic/sigsetjmp.S
Normal file
51
libc/arch-aarch64/bionic/sigsetjmp.S
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
#include <machine/setjmp.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* int sigsetjmp(sigjmp_buf env, int savesigs);
|
||||||
|
* void siglongjmp(sigjmp_buf env, int val);
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY(sigsetjmp)
|
||||||
|
cbz w1, PIC_SYM(_C_LABEL(_setjmp), PLT)
|
||||||
|
b PIC_SYM(_C_LABEL(setjmp), PLT)
|
||||||
|
END(sigsetjmp)
|
||||||
|
|
||||||
|
.L_setjmp_magic:
|
||||||
|
.word _JB_MAGIC__SETJMP
|
||||||
|
|
||||||
|
ENTRY(siglongjmp)
|
||||||
|
ldr w2, .L_setjmp_magic
|
||||||
|
ldr w3, [x0]
|
||||||
|
cmp w2, w3
|
||||||
|
b.eq PIC_SYM(_C_LABEL(_longjmp), PLT)
|
||||||
|
b PIC_SYM(_C_LABEL(longjmp), PLT)
|
||||||
|
END(siglongjmp)
|
61
libc/arch-aarch64/bionic/syscall.S
Normal file
61
libc/arch-aarch64/bionic/syscall.S
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
ENTRY(syscall)
|
||||||
|
/* create AAPCS frame pointer */
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
mov x29, sp
|
||||||
|
|
||||||
|
/* store x8 */
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
|
||||||
|
/* Move syscall No. from x0 to x8 */
|
||||||
|
mov x8, x0
|
||||||
|
/* Move syscall parameters from x1 thru x6 to x0 thru x5 */
|
||||||
|
mov x0, x1
|
||||||
|
mov x1, x2
|
||||||
|
mov x2, x3
|
||||||
|
mov x3, x4
|
||||||
|
mov x4, x5
|
||||||
|
mov x5, x6
|
||||||
|
svc #0
|
||||||
|
|
||||||
|
/* restore x8 */
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
|
||||||
|
/* check if syscall returned successfully */
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
END(syscall)
|
52
libc/arch-aarch64/bionic/vfork.S
Normal file
52
libc/arch-aarch64/bionic/vfork.S
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
ENTRY(vfork)
|
||||||
|
mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */
|
||||||
|
mov x1, xzr
|
||||||
|
mov x2, xzr
|
||||||
|
mov x3, xzr
|
||||||
|
mov x4, xzr
|
||||||
|
|
||||||
|
str x8, [sp, #-16]!
|
||||||
|
mov x8, __NR_clone
|
||||||
|
|
||||||
|
svc #0
|
||||||
|
ldr x8, [sp], #16
|
||||||
|
|
||||||
|
/* check if syscall returned successfully */
|
||||||
|
cmn x0, #(MAX_ERRNO + 1)
|
||||||
|
cneg x0, x0, hi
|
||||||
|
b.hi __set_errno
|
||||||
|
|
||||||
|
ret
|
||||||
|
END(vfork)
|
111
libc/arch-aarch64/include/machine/_types.h
Normal file
111
libc/arch-aarch64/include/machine/_types.h
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* $OpenBSD: _types.h,v 1.3 2006/02/14 18:12:58 miod Exp $ */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1990, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||||
|
*
|
||||||
|
* @(#)types.h 8.3 (Berkeley) 1/5/94
|
||||||
|
* @(#)ansi.h 8.2 (Berkeley) 1/4/94
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64__TYPES_H_
|
||||||
|
#define _AARCH64__TYPES_H_
|
||||||
|
|
||||||
|
/* 7.18.1.1 Exact-width integer types */
|
||||||
|
typedef __signed char __int8_t;
|
||||||
|
typedef unsigned char __uint8_t;
|
||||||
|
typedef short __int16_t;
|
||||||
|
typedef unsigned short __uint16_t;
|
||||||
|
typedef int __int32_t;
|
||||||
|
typedef unsigned int __uint32_t;
|
||||||
|
typedef long __int64_t;
|
||||||
|
typedef unsigned long __uint64_t;
|
||||||
|
|
||||||
|
/* 7.18.1.2 Minimum-width integer types */
|
||||||
|
typedef __int8_t __int_least8_t;
|
||||||
|
typedef __uint8_t __uint_least8_t;
|
||||||
|
typedef __int16_t __int_least16_t;
|
||||||
|
typedef __uint16_t __uint_least16_t;
|
||||||
|
typedef __int32_t __int_least32_t;
|
||||||
|
typedef __uint32_t __uint_least32_t;
|
||||||
|
typedef __int64_t __int_least64_t;
|
||||||
|
typedef __uint64_t __uint_least64_t;
|
||||||
|
|
||||||
|
/* 7.18.1.3 Fastest minimum-width integer types */
|
||||||
|
typedef __int32_t __int_fast8_t;
|
||||||
|
typedef __uint32_t __uint_fast8_t;
|
||||||
|
typedef __int32_t __int_fast16_t;
|
||||||
|
typedef __uint32_t __uint_fast16_t;
|
||||||
|
typedef __int32_t __int_fast32_t;
|
||||||
|
typedef __uint32_t __uint_fast32_t;
|
||||||
|
typedef __int64_t __int_fast64_t;
|
||||||
|
typedef __uint64_t __uint_fast64_t;
|
||||||
|
|
||||||
|
/* 7.18.1.4 Integer types capable of holding object pointers */
|
||||||
|
typedef int __intptr_t;
|
||||||
|
typedef unsigned int __uintptr_t;
|
||||||
|
|
||||||
|
/* 7.18.1.5 Greatest-width integer types */
|
||||||
|
typedef __int64_t __intmax_t;
|
||||||
|
typedef __uint64_t __uintmax_t;
|
||||||
|
|
||||||
|
/* Register size */
|
||||||
|
typedef __int64_t __register_t;
|
||||||
|
|
||||||
|
/* VM system types */
|
||||||
|
typedef unsigned long __vaddr_t;
|
||||||
|
typedef unsigned long __paddr_t;
|
||||||
|
typedef unsigned long __vsize_t;
|
||||||
|
typedef unsigned long __psize_t;
|
||||||
|
|
||||||
|
/* Standard system types */
|
||||||
|
typedef long __clock_t;
|
||||||
|
typedef int __clockid_t;
|
||||||
|
typedef double __double_t;
|
||||||
|
typedef float __float_t;
|
||||||
|
typedef long __ptrdiff_t;
|
||||||
|
typedef long __time_t;
|
||||||
|
typedef int __timer_t;
|
||||||
|
#if defined(__GNUC__) && __GNUC__ >= 3
|
||||||
|
typedef __builtin_va_list __va_list;
|
||||||
|
#else
|
||||||
|
typedef char * __va_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Wide character support types */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
typedef int __wchar_t;
|
||||||
|
#endif
|
||||||
|
typedef int __wint_t;
|
||||||
|
typedef int __rune_t;
|
||||||
|
typedef void * __wctrans_t;
|
||||||
|
typedef void * __wctype_t;
|
||||||
|
|
||||||
|
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||||
|
|
||||||
|
#endif /* _AARCH64__TYPES_H_ */
|
||||||
|
|
128
libc/arch-aarch64/include/machine/asm.h
Normal file
128
libc/arch-aarch64/include/machine/asm.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/* $OpenBSD: asm.h,v 1.1 2004/02/01 05:09:49 drahn Exp $ */
|
||||||
|
/* $NetBSD: asm.h,v 1.4 2001/07/16 05:43:32 matt Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* William Jolitz.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||||
|
*
|
||||||
|
* from: @(#)asm.h 5.5 (Berkeley) 5/7/91
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64_ASM_H_
|
||||||
|
#define _AARCH64_ASM_H_
|
||||||
|
|
||||||
|
/* TODO: Add cfi directives for creating/restoring FP */
|
||||||
|
#ifdef __ELF__
|
||||||
|
# define _C_LABEL(x) x
|
||||||
|
#else
|
||||||
|
# ifdef __STDC__
|
||||||
|
# define _C_LABEL(x) _ ## x
|
||||||
|
# else
|
||||||
|
# define _C_LABEL(x) _/**/x
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#define _ASM_LABEL(x) x
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
# define __CONCAT(x,y) x ## y
|
||||||
|
# define __STRING(x) #x
|
||||||
|
#else
|
||||||
|
# define __CONCAT(x,y) x/**/y
|
||||||
|
# define __STRING(x) "x"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ALIGN_TEXT
|
||||||
|
# define _ALIGN_TEXT .align 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _ASM_TYPE_FUNCTION %function
|
||||||
|
#define _ASM_TYPE_OBJECT %object
|
||||||
|
#define _ENTRY(x) \
|
||||||
|
.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .cfi_startproc
|
||||||
|
|
||||||
|
#define _ASM_SIZE(x) .size x, .-x;
|
||||||
|
|
||||||
|
#define _END(x) \
|
||||||
|
.cfi_endproc; \
|
||||||
|
_ASM_SIZE(x)
|
||||||
|
|
||||||
|
#define ENTRY(y) _ENTRY(_C_LABEL(y));
|
||||||
|
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
|
||||||
|
#define END(y) _END(_C_LABEL(y))
|
||||||
|
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
|
||||||
|
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
|
||||||
|
#define ASEND(y) _END(_ASM_LABEL(y))
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
#define ENTRY_PRIVATE(y) ENTRY(y); .hidden _C_LABEL(y)
|
||||||
|
#else
|
||||||
|
#define ENTRY_PRIVATE(y) ENTRY(y)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ASMSTR .asciz
|
||||||
|
|
||||||
|
#if defined(__ELF__) && defined(PIC)
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define PIC_SYM(x,y) x ## ( ## y ## )
|
||||||
|
#else
|
||||||
|
#define PIC_SYM(x,y) x/**/(/**/y/**/)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define PIC_SYM(x,y) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
#define RCSID(x) .section ".ident"; .asciz x
|
||||||
|
#else
|
||||||
|
#define RCSID(x) .text; .asciz x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
#define WEAK_ALIAS(alias,sym) \
|
||||||
|
.weak alias; \
|
||||||
|
alias = sym
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define WARN_REFERENCES(sym,msg) \
|
||||||
|
.stabs msg ## ,30,0,0,0 ; \
|
||||||
|
.stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0
|
||||||
|
#elif defined(__ELF__)
|
||||||
|
#define WARN_REFERENCES(sym,msg) \
|
||||||
|
.stabs msg,30,0,0,0 ; \
|
||||||
|
.stabs __STRING(sym),1,0,0,0
|
||||||
|
#else
|
||||||
|
#define WARN_REFERENCES(sym,msg) \
|
||||||
|
.stabs msg,30,0,0,0 ; \
|
||||||
|
.stabs __STRING(_/**/sym),1,0,0,0
|
||||||
|
#endif /* __STDC__ */
|
||||||
|
|
||||||
|
#endif /* _AARCH64_ASM_H_ */
|
||||||
|
|
105
libc/arch-aarch64/include/machine/elf_machdep.h
Normal file
105
libc/arch-aarch64/include/machine/elf_machdep.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64_ELF_MACHDEP_H_
|
||||||
|
#define _AARCH64_ELF_MACHDEP_H_
|
||||||
|
|
||||||
|
#if defined(__AARCH64EB__)
|
||||||
|
#define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB
|
||||||
|
#else
|
||||||
|
#define ELF64_MACHDEP_ENDIANNESS ELFDATA2LSB
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ELF64_MACHDEP_ID_CASES \
|
||||||
|
case EM_AARCH64: \
|
||||||
|
break;
|
||||||
|
|
||||||
|
#define ELF64_MACHDEP_ID EM_AARCH64
|
||||||
|
|
||||||
|
#define ARCH_ELFSIZE 64 /* MD native binary size */
|
||||||
|
|
||||||
|
/* Null relocations */
|
||||||
|
#define R_ARM_NONE 0
|
||||||
|
#define R_AARCH64_NONE 256
|
||||||
|
|
||||||
|
/* Static Data relocations */
|
||||||
|
#define R_AARCH64_ABS64 257
|
||||||
|
#define R_AARCH64_ABS32 258
|
||||||
|
#define R_AARCH64_ABS16 259
|
||||||
|
#define R_AARCH64_PREL64 260
|
||||||
|
#define R_AARCH64_PREL32 261
|
||||||
|
#define R_AARCH64_PREL16 262
|
||||||
|
|
||||||
|
#define R_AARCH64_MOVW_UABS_G0 263
|
||||||
|
#define R_AARCH64_MOVW_UABS_G0_NC 264
|
||||||
|
#define R_AARCH64_MOVW_UABS_G1 265
|
||||||
|
#define R_AARCH64_MOVW_UABS_G1_NC 266
|
||||||
|
#define R_AARCH64_MOVW_UABS_G2 267
|
||||||
|
#define R_AARCH64_MOVW_UABS_G2_NC 268
|
||||||
|
#define R_AARCH64_MOVW_UABS_G3 269
|
||||||
|
#define R_AARCH64_MOVW_SABS_G0 270
|
||||||
|
#define R_AARCH64_MOVW_SABS_G1 271
|
||||||
|
#define R_AARCH64_MOVW_SABS_G2 272
|
||||||
|
|
||||||
|
/* PC-relative addresses */
|
||||||
|
#define R_AARCH64_LD_PREL_LO19 273
|
||||||
|
#define R_AARCH64_ADR_PREL_LO21 274
|
||||||
|
#define R_AARCH64_ADR_PREL_PG_HI21 275
|
||||||
|
#define R_AARCH64_ADR_PREL_PG_HI21_NC 276
|
||||||
|
#define R_AARCH64_ADD_ABS_LO12_NC 277
|
||||||
|
#define R_AARCH64_LDST8_ABS_LO12_NC 278
|
||||||
|
|
||||||
|
/* Control-flow relocations */
|
||||||
|
#define R_AARCH64_TSTBR14 279
|
||||||
|
#define R_AARCH64_CONDBR19 280
|
||||||
|
#define R_AARCH64_JUMP26 282
|
||||||
|
#define R_AARCH64_CALL26 283
|
||||||
|
#define R_AARCH64_LDST16_ABS_LO12_NC 284
|
||||||
|
#define R_AARCH64_LDST32_ABS_LO12_NC 285
|
||||||
|
#define R_AARCH64_LDST64_ABS_LO12_NC 286
|
||||||
|
#define R_AARCH64_LDST128_ABS_LO12_NC 299
|
||||||
|
|
||||||
|
#define R_AARCH64_MOVW_PREL_G0 287
|
||||||
|
#define R_AARCH64_MOVW_PREL_G0_NC 288
|
||||||
|
#define R_AARCH64_MOVW_PREL_G1 289
|
||||||
|
#define R_AARCH64_MOVW_PREL_G1_NC 290
|
||||||
|
#define R_AARCH64_MOVW_PREL_G2 291
|
||||||
|
#define R_AARCH64_MOVW_PREL_G2_NC 292
|
||||||
|
#define R_AARCH64_MOVW_PREL_G3 293
|
||||||
|
|
||||||
|
/* Dynamic relocations */
|
||||||
|
#define R_AARCH64_COPY 1024
|
||||||
|
#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */
|
||||||
|
#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */
|
||||||
|
#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */
|
||||||
|
#define R_AARCH64_TLS_TPREL64 1030
|
||||||
|
#define R_AARCH64_TLS_DTPREL32 1031
|
||||||
|
|
||||||
|
#define R_TYPE(name) __CONCAT(R_AARCH64_,name)
|
||||||
|
|
||||||
|
#endif /* _AARCH64_ELF_MACHDEP_H_ */
|
58
libc/arch-aarch64/include/machine/endian.h
Normal file
58
libc/arch-aarch64/include/machine/endian.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64_ENDIAN_H_
|
||||||
|
#define _AARCH64_ENDIAN_H_
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/endian.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
|
||||||
|
#define __swap16md(x) ({ \
|
||||||
|
register u_int16_t _x = (x); \
|
||||||
|
__asm volatile ("rev16 %0, %0" : "+r" (_x)); \
|
||||||
|
_x; \
|
||||||
|
})
|
||||||
|
|
||||||
|
/* Use GCC builtins */
|
||||||
|
#define __swap32md(x) __builtin_bswap32(x)
|
||||||
|
#define __swap64md(x) __builtin_bswap64(x)
|
||||||
|
|
||||||
|
/* Tell sys/endian.h we have MD variants of the swap macros. */
|
||||||
|
#define MD_SWAP
|
||||||
|
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
#if defined(__AARCH64EB__)
|
||||||
|
#define _BYTE_ORDER _BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _AARCH64_ENDIAN_H_ */
|
50
libc/arch-aarch64/include/machine/exec.h
Normal file
50
libc/arch-aarch64/include/machine/exec.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* $OpenBSD: exec.h,v 1.9 2003/04/17 03:42:14 drahn Exp $ */
|
||||||
|
/* $NetBSD: exec.h,v 1.6 1994/10/27 04:16:05 cgd Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993 Christopher G. Demetriou
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64_EXEC_H_
|
||||||
|
#define _AARCH64_EXEC_H_
|
||||||
|
|
||||||
|
#define __LDPGSZ 4096
|
||||||
|
|
||||||
|
#define NATIVE_EXEC_ELF
|
||||||
|
|
||||||
|
#define ARCH_ELFSIZE 64
|
||||||
|
|
||||||
|
#define ELF_TARG_CLASS ELFCLASS64 /* 64-bit objects */
|
||||||
|
#define ELF_TARG_DATA ELFDATA2LSB
|
||||||
|
#define ELF_TARG_MACH EM_AARCH64
|
||||||
|
|
||||||
|
#define _NLIST_DO_AOUT
|
||||||
|
#define _NLIST_DO_ELF
|
||||||
|
|
||||||
|
#define _KERN_DO_AOUT
|
||||||
|
#define _KERN_DO_ELF64
|
||||||
|
|
||||||
|
#endif /* _AARCH64_EXEC_H_ */
|
191
libc/arch-aarch64/include/machine/ieee.h
Normal file
191
libc/arch-aarch64/include/machine/ieee.h
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
/* $OpenBSD: ieee.h,v 1.1 2004/02/01 05:09:49 drahn Exp $ */
|
||||||
|
/* $NetBSD: ieee.h,v 1.2 2001/02/21 17:43:50 bjh21 Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1992, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This software was developed by the Computer Systems Engineering group
|
||||||
|
* at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
|
||||||
|
* contributed to Berkeley.
|
||||||
|
*
|
||||||
|
* All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Lawrence Berkeley Laboratory.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||||
|
*
|
||||||
|
* @(#)ieee.h 8.1 (Berkeley) 6/11/93
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ieee.h defines the machine-dependent layout of the machine's IEEE
|
||||||
|
* floating point.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the number of bits in each fraction and exponent.
|
||||||
|
*
|
||||||
|
* k k+1
|
||||||
|
* Note that 1.0 x 2 == 0.1 x 2 and that denorms are represented
|
||||||
|
*
|
||||||
|
* (-exp_bias+1)
|
||||||
|
* as fractions that look like 0.fffff x 2 . This means that
|
||||||
|
*
|
||||||
|
* -126
|
||||||
|
* the number 0.10000 x 2 , for instance, is the same as the normalized
|
||||||
|
*
|
||||||
|
* -127 -128
|
||||||
|
* float 1.0 x 2 . Thus, to represent 2 , we need one leading zero
|
||||||
|
*
|
||||||
|
* -129
|
||||||
|
* in the fraction; to represent 2 , we need two, and so on. This
|
||||||
|
*
|
||||||
|
* (-exp_bias-fracbits+1)
|
||||||
|
* implies that the smallest denormalized number is 2
|
||||||
|
*
|
||||||
|
* for whichever format we are talking about: for single precision, for
|
||||||
|
*
|
||||||
|
* -126 -149
|
||||||
|
* instance, we get .00000000000000000000001 x 2 , or 1.0 x 2 , and
|
||||||
|
*
|
||||||
|
* -149 == -127 - 23 + 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ARM has two sets of FP data formats. The FPA supports 32-bit, 64-bit
|
||||||
|
* and 96-bit IEEE formats, with the words in big-endian order. VFP supports
|
||||||
|
* 32-bin and 64-bit IEEE formats with the words in the CPU's native byte
|
||||||
|
* order.
|
||||||
|
*
|
||||||
|
* The FPA also has two packed decimal formats, but we ignore them here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SNG_EXPBITS 8
|
||||||
|
#define SNG_FRACBITS 23
|
||||||
|
|
||||||
|
#define DBL_EXPBITS 11
|
||||||
|
#define DBL_FRACBITS 52
|
||||||
|
|
||||||
|
#ifndef __VFP_FP__
|
||||||
|
#define E80_EXPBITS 15
|
||||||
|
#define E80_FRACBITS 64
|
||||||
|
|
||||||
|
#define EXT_EXPBITS 15
|
||||||
|
#define EXT_FRACBITS 112
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct ieee_single {
|
||||||
|
u_int sng_frac:23;
|
||||||
|
u_int sng_exponent:8;
|
||||||
|
u_int sng_sign:1;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __VFP_FP__
|
||||||
|
struct ieee_double {
|
||||||
|
#ifdef __AARCH64EB__
|
||||||
|
u_int dbl_sign:1;
|
||||||
|
u_int dbl_exp:11;
|
||||||
|
u_int dbl_frach:20;
|
||||||
|
u_int dbl_fracl;
|
||||||
|
#else /* !__AARCH64EB__ */
|
||||||
|
u_int dbl_fracl;
|
||||||
|
u_int dbl_frach:20;
|
||||||
|
u_int dbl_exp:11;
|
||||||
|
u_int dbl_sign:1;
|
||||||
|
#endif /* !__AARCH64EB__ */
|
||||||
|
};
|
||||||
|
#else /* !__VFP_FP__ */
|
||||||
|
struct ieee_double {
|
||||||
|
u_int dbl_frach:20;
|
||||||
|
u_int dbl_exp:11;
|
||||||
|
u_int dbl_sign:1;
|
||||||
|
u_int dbl_fracl;
|
||||||
|
};
|
||||||
|
|
||||||
|
union ieee_double_u {
|
||||||
|
double dblu_d;
|
||||||
|
struct ieee_double dblu_dbl;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct ieee_e80 {
|
||||||
|
u_int e80_exp:15;
|
||||||
|
u_int e80_zero:16;
|
||||||
|
u_int e80_sign:1;
|
||||||
|
u_int e80_frach:31;
|
||||||
|
u_int e80_j:1;
|
||||||
|
u_int e80_fracl;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ieee_ext {
|
||||||
|
u_int ext_frach:16;
|
||||||
|
u_int ext_exp:15;
|
||||||
|
u_int ext_sign:1;
|
||||||
|
u_int ext_frachm;
|
||||||
|
u_int ext_fraclm;
|
||||||
|
u_int ext_fracl;
|
||||||
|
};
|
||||||
|
#endif /* !__VFP_FP__ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Floats whose exponent is in [1..INFNAN) (of whatever type) are
|
||||||
|
* `normal'. Floats whose exponent is INFNAN are either Inf or NaN.
|
||||||
|
* Floats whose exponent is zero are either zero (iff all fraction
|
||||||
|
* bits are zero) or subnormal values.
|
||||||
|
*
|
||||||
|
* A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
|
||||||
|
* high fraction; if the bit is set, it is a `quiet NaN'.
|
||||||
|
*/
|
||||||
|
#define SNG_EXP_INFNAN 255
|
||||||
|
#define DBL_EXP_INFNAN 2047
|
||||||
|
#ifndef __VFP_FP__
|
||||||
|
#define E80_EXP_INFNAN 32767
|
||||||
|
#define EXT_EXP_INFNAN 32767
|
||||||
|
#endif /* !__VFP_FP__ */
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define SNG_QUIETNAN (1 << 22)
|
||||||
|
#define DBL_QUIETNAN (1 << 19)
|
||||||
|
#ifndef __VFP_FP__
|
||||||
|
#define E80_QUIETNAN (1 << 15)
|
||||||
|
#define EXT_QUIETNAN (1 << 15)
|
||||||
|
#endif /* !__VFP_FP__ */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exponent biases.
|
||||||
|
*/
|
||||||
|
#define SNG_EXP_BIAS 127
|
||||||
|
#define DBL_EXP_BIAS 1023
|
||||||
|
#ifndef __VFP_FP__
|
||||||
|
#define E80_EXP_BIAS 16383
|
||||||
|
#define EXT_EXP_BIAS 16383
|
||||||
|
#endif /* !__VFP_FP__ */
|
44
libc/arch-aarch64/include/machine/kernel.h
Normal file
44
libc/arch-aarch64/include/machine/kernel.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ARCH_AARCH64_KERNEL_H
|
||||||
|
#define _ARCH_AARCH64_KERNEL_H
|
||||||
|
|
||||||
|
/* this file contains kernel-specific definitions that were optimized out of
|
||||||
|
our processed kernel headers, but still useful nonetheless... */
|
||||||
|
|
||||||
|
typedef unsigned long __kernel_blkcnt_t;
|
||||||
|
typedef unsigned long __kernel_blksize_t;
|
||||||
|
|
||||||
|
/* these aren't really defined by the kernel headers though... */
|
||||||
|
typedef unsigned long __kernel_fsblkcnt_t;
|
||||||
|
typedef unsigned long __kernel_fsfilcnt_t;
|
||||||
|
typedef unsigned int __kernel_id_t;
|
||||||
|
|
||||||
|
#endif /* _ARCH_ARM_KERNEL_H */
|
||||||
|
|
62
libc/arch-aarch64/include/machine/limits.h
Normal file
62
libc/arch-aarch64/include/machine/limits.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/* $OpenBSD: limits.h,v 1.3 2006/01/06 22:48:46 millert Exp $ */
|
||||||
|
/* $NetBSD: limits.h,v 1.4 2003/04/28 23:16:18 bjh21 Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1988 The Regents of the University of California.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||||
|
*
|
||||||
|
* from: @(#)limits.h 7.2 (Berkeley) 6/28/90
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _AARCH64_LIMITS_H_
|
||||||
|
#define _AARCH64_LIMITS_H_
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#define MB_LEN_MAX 1 /* no multibyte characters */
|
||||||
|
|
||||||
|
#define LONGLONG_BIT 64
|
||||||
|
#define LONGLONG_MIN (-9223372036854775807LL-1)
|
||||||
|
#define LONGLONG_MAX 9223372036854775807LL
|
||||||
|
#define ULONGLONG_MAX 18446744073709551615ULL
|
||||||
|
|
||||||
|
#ifndef SIZE_MAX
|
||||||
|
#define SIZE_MAX ULONGLONG_MAX /* max value for a size_t */
|
||||||
|
#endif
|
||||||
|
#ifndef SSIZE_MAX
|
||||||
|
#define SSIZE_MAX LONGLONG_MAX /* max value for a ssize_t */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#define SIZE_T_MAX ULONG_MAX /* max value for a size_t (historic) */
|
||||||
|
|
||||||
|
#define UQUAD_MAX 0xffffffffffffffffULL /* max unsigned quad */
|
||||||
|
#define QUAD_MAX 0x7fffffffffffffffLL /* max signed quad */
|
||||||
|
#define QUAD_MIN (-0x7fffffffffffffffLL-1) /* min signed quad */
|
||||||
|
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
#endif /* _AARCH64_LIMITS_H_ */
|
73
libc/arch-aarch64/include/machine/setjmp.h
Normal file
73
libc/arch-aarch64/include/machine/setjmp.h
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * 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 COPYRIGHT HOLDERS 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
|
||||||
|
* COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* machine/setjmp.h: machine dependent setjmp-related information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* _JBLEN is the size of a jmp_buf in longs(64bit on AArch64) */
|
||||||
|
#define _JBLEN 32
|
||||||
|
|
||||||
|
/* According to AARCH64 PCS document we need to save the following
|
||||||
|
* registers:
|
||||||
|
*
|
||||||
|
* Core x19 - x30, sp (see section 5.1.1)
|
||||||
|
* VFP d8 - d15 (see section 5.1.2)
|
||||||
|
*
|
||||||
|
* NOTE: All the registers saved here will have 64bit vales (except FPSR).
|
||||||
|
* AAPCS mandates that the higher part of q registers does not need to
|
||||||
|
* be saveved by the callee.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* The structure of jmp_buf for AArch64:
|
||||||
|
*
|
||||||
|
* NOTE: _JBLEN is the size of jmp_buf in longs(64bit on AArch64)! The table
|
||||||
|
* below computes the offsets in words(32bit).
|
||||||
|
*
|
||||||
|
* word name description
|
||||||
|
* 0 magic magic number
|
||||||
|
* 1 sigmask signal mask (not used with _setjmp / _longjmp)
|
||||||
|
* 2 core_base base of core registers (x19-x30, sp)
|
||||||
|
* 28 float_base base of float registers (d8-d15)
|
||||||
|
* 44 reserved reserved entries (room to grow)
|
||||||
|
* 64
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: The instructions that load/store core/vfp registers expect 8-byte
|
||||||
|
* alignment. Contrary to the previous setjmp header for ARM we do not
|
||||||
|
* need to save status/control registers for VFP (it is not a
|
||||||
|
* requirement for setjmp).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _JB_MAGIC 0
|
||||||
|
#define _JB_SIGMASK (_JB_MAGIC+1)
|
||||||
|
#define _JB_CORE_BASE (_JB_SIGMASK+1)
|
||||||
|
#define _JB_FLOAT_BASE (_JB_CORE_BASE + (31-19+1)*2)
|
||||||
|
|
||||||
|
#define _JB_MAGIC__SETJMP 0x53657200
|
||||||
|
#define _JB_MAGIC_SETJMP 0x53657201
|
@ -30,5 +30,9 @@
|
|||||||
#ifndef CRT_LEGACY_WORKAROUND
|
#ifndef CRT_LEGACY_WORKAROUND
|
||||||
__attribute__ ((visibility ("hidden")))
|
__attribute__ ((visibility ("hidden")))
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __aarch64__
|
||||||
|
__attribute__ ((section (".data")))
|
||||||
|
#else
|
||||||
__attribute__ ((section (".bss")))
|
__attribute__ ((section (".bss")))
|
||||||
|
#endif
|
||||||
void *__dso_handle = (void *) 0;
|
void *__dso_handle = (void *) 0;
|
||||||
|
@ -29,4 +29,8 @@
|
|||||||
|
|
||||||
__attribute__ ((visibility ("hidden")))
|
__attribute__ ((visibility ("hidden")))
|
||||||
__attribute__ ((section (".data")))
|
__attribute__ ((section (".data")))
|
||||||
|
#ifdef __aarch64__
|
||||||
|
void *__dso_handle = (void *) 0;
|
||||||
|
#else
|
||||||
void *__dso_handle = &__dso_handle;
|
void *__dso_handle = &__dso_handle;
|
||||||
|
#endif
|
||||||
|
@ -29,11 +29,10 @@
|
|||||||
#ifndef __BIONIC_PRIVATE_GET_TLS_H_
|
#ifndef __BIONIC_PRIVATE_GET_TLS_H_
|
||||||
#define __BIONIC_PRIVATE_GET_TLS_H_
|
#define __BIONIC_PRIVATE_GET_TLS_H_
|
||||||
|
|
||||||
#if defined(__arm__)
|
#if defined(__aarch64__)
|
||||||
# define __get_tls() \
|
# define __get_tls() ({ void** __val; __asm__("mrs %0, tpidr_el0" : "=r"(__val)); __val; })
|
||||||
({ void** __val; \
|
#elif defined(__arm__)
|
||||||
__asm__("mrc p15, 0, %0, c13, c0, 3" : "=r"(__val)); \
|
# define __get_tls() ({ void** __val; __asm__("mrc p15, 0, %0, c13, c0, 3" : "=r"(__val)); __val; })
|
||||||
__val; })
|
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
# define __get_tls() \
|
# define __get_tls() \
|
||||||
/* On mips32r1, this goes via a kernel illegal instruction trap that's optimized for v1. */ \
|
/* On mips32r1, this goes via a kernel illegal instruction trap that's optimized for v1. */ \
|
||||||
@ -44,15 +43,9 @@
|
|||||||
".set pop\n" : "=r"(__val)); \
|
".set pop\n" : "=r"(__val)); \
|
||||||
__val; })
|
__val; })
|
||||||
#elif defined(__i386__)
|
#elif defined(__i386__)
|
||||||
# define __get_tls() \
|
# define __get_tls() ({ void** __val; __asm__("movl %%gs:0, %0" : "=r"(__val)); __val; })
|
||||||
({ void** __val; \
|
|
||||||
__asm__("movl %%gs:0, %0" : "=r"(__val)); \
|
|
||||||
__val; })
|
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__x86_64__)
|
||||||
# define __get_tls() \
|
# define __get_tls() ({ void** __val; __asm__("mov %%fs:0, %0" : "=r"(__val)); __val; })
|
||||||
({ void** __val; \
|
|
||||||
__asm__("mov %%fs:0, %0" : "=r"(__val)); \
|
|
||||||
__val; })
|
|
||||||
#else
|
#else
|
||||||
#error unsupported architecture
|
#error unsupported architecture
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user