Changeset View
Changeset View
Standalone View
Standalone View
lib/libsys/aarch64/SYS.h
- This file was copied from lib/libc/aarch64/sys/syscall.S.
/*- | /*- | ||||
* Copyright (c) 2014 The FreeBSD Foundation | * Copyright (c) 2014 Andrew Turner | ||||
* Copyright (c) 2015 The FreeBSD Foundation | |||||
* All rights reserved. | * All rights reserved. | ||||
* | * | ||||
* This software was developed by Andrew Turner under | * This software was developed by Andrew Turner under | ||||
* sponsorship from the FreeBSD Foundation. | * sponsorship from the FreeBSD Foundation. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
* modification, are permitted provided that the following conditions | * modification, are permitted provided that the following conditions | ||||
* are met: | * are met: | ||||
Show All 9 Lines | |||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * 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 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | |||||
* $FreeBSD$ | |||||
*/ | */ | ||||
#include <sys/syscall.h> | |||||
#include <machine/asm.h> | #include <machine/asm.h> | ||||
__FBSDID("$FreeBSD$"); | |||||
#include "SYS.h" | #define _SYSCALL(name) \ | ||||
mov x8, SYS_ ## name; \ | |||||
svc 0 | |||||
RSYSCALL(syscall) | #define SYSCALL(name) \ | ||||
ENTRY(__sys_##name); \ | |||||
WEAK_REFERENCE(__sys_##name, name); \ | |||||
WEAK_REFERENCE(__sys_##name, _##name); \ | |||||
_SYSCALL(name); \ | |||||
ret; \ | |||||
END(__sys_##name) | |||||
/* | |||||
* Conditional jumps can only go up to one megabyte in either | |||||
* direction, and cerror can be located anywhere, so we have | |||||
* to jump around to use more capable unconditional branch | |||||
* instruction. | |||||
*/ | |||||
#define PSEUDO(name) \ | |||||
ENTRY(__sys_##name); \ | |||||
WEAK_REFERENCE(__sys_##name, _##name); \ | |||||
_SYSCALL(name); \ | |||||
b.cs 1f; \ | |||||
ret; \ | |||||
1: b cerror; \ | |||||
END(__sys_##name) | |||||
#define RSYSCALL(name) \ | |||||
ENTRY(__sys_##name); \ | |||||
WEAK_REFERENCE(__sys_##name, name); \ | |||||
WEAK_REFERENCE(__sys_##name, _##name); \ | |||||
_SYSCALL(name); \ | |||||
b.cs 1f; \ | |||||
ret; \ | |||||
1: b cerror; \ | |||||
END(__sys_##name) |