mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 03:25:54 -04:00
[libc] Add __attribute__((always_inline)) to x86_64 syscall functions.
Summary: Some syscalls like SYS_clone do not tolerate a return instruction after the syscall instruction. Marking the syscall functions with the `always_inline` attribute accommodates such syscalls as inlining eliminates the return instruction. Reviewers: abrachet, phosek Subscribers: MaskRay, tschuett, libc-commits Tags: #libc-project Differential Revision: https://reviews.llvm.org/D72102
This commit is contained in:
parent
ff554a9179
commit
6598af4a54
@ -1,4 +1,4 @@
|
|||||||
//===------------ inline implementation of x86_64 syscalls --------------*-===//
|
//===------------ inline implementation of x86_64 syscalls ----------------===//
|
||||||
//
|
//
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
namespace __llvm_libc {
|
namespace __llvm_libc {
|
||||||
|
|
||||||
inline long syscall(long __number) {
|
__attribute__((always_inline)) inline long syscall(long __number) {
|
||||||
long retcode;
|
long retcode;
|
||||||
LIBC_INLINE_ASM("syscall" :
|
LIBC_INLINE_ASM("syscall" :
|
||||||
"=a"(retcode) :
|
"=a"(retcode) :
|
||||||
@ -23,7 +23,7 @@ inline long syscall(long __number) {
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(long __number, long __arg1) {
|
__attribute__((always_inline)) inline long syscall(long __number, long __arg1) {
|
||||||
long retcode;
|
long retcode;
|
||||||
LIBC_INLINE_ASM("syscall" :
|
LIBC_INLINE_ASM("syscall" :
|
||||||
"=a"(retcode) :
|
"=a"(retcode) :
|
||||||
@ -32,7 +32,8 @@ inline long syscall(long __number, long __arg1) {
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(long __number, long __arg1, long __arg2) {
|
__attribute__((always_inline)) inline long syscall(
|
||||||
|
long __number, long __arg1, long __arg2) {
|
||||||
long retcode;
|
long retcode;
|
||||||
LIBC_INLINE_ASM("syscall" :
|
LIBC_INLINE_ASM("syscall" :
|
||||||
"=a"(retcode) :
|
"=a"(retcode) :
|
||||||
@ -41,7 +42,8 @@ inline long syscall(long __number, long __arg1, long __arg2) {
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(long __number, long __arg1, long __arg2, long __arg3) {
|
__attribute__((always_inline)) inline long syscall(
|
||||||
|
long __number, long __arg1, long __arg2, long __arg3) {
|
||||||
long retcode;
|
long retcode;
|
||||||
LIBC_INLINE_ASM("syscall" :
|
LIBC_INLINE_ASM("syscall" :
|
||||||
"=a"(retcode) :
|
"=a"(retcode) :
|
||||||
@ -50,7 +52,7 @@ inline long syscall(long __number, long __arg1, long __arg2, long __arg3) {
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(
|
__attribute__((always_inline)) inline long syscall(
|
||||||
long __number, long __arg1, long __arg2, long __arg3, long __arg4) {
|
long __number, long __arg1, long __arg2, long __arg3, long __arg4) {
|
||||||
long retcode;
|
long retcode;
|
||||||
register long r10 __asm__("r10") = __arg4;
|
register long r10 __asm__("r10") = __arg4;
|
||||||
@ -61,8 +63,9 @@ inline long syscall(
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(long __number, long __arg1, long __arg2, long __arg3,
|
__attribute__((always_inline)) inline long syscall(
|
||||||
long __arg4, long __arg5) {
|
long __number, long __arg1, long __arg2, long __arg3, long __arg4,
|
||||||
|
long __arg5) {
|
||||||
long retcode;
|
long retcode;
|
||||||
register long r10 __asm__("r10") = __arg4;
|
register long r10 __asm__("r10") = __arg4;
|
||||||
register long r8 __asm__("r8") = __arg5;
|
register long r8 __asm__("r8") = __arg5;
|
||||||
@ -74,8 +77,9 @@ inline long syscall(long __number, long __arg1, long __arg2, long __arg3,
|
|||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long syscall(long __number, long __arg1, long __arg2, long __arg3,
|
__attribute__((always_inline)) inline long syscall(
|
||||||
long __arg4, long __arg5, long __arg6) {
|
long __number, long __arg1, long __arg2, long __arg3, long __arg4,
|
||||||
|
long __arg5, long __arg6) {
|
||||||
long retcode;
|
long retcode;
|
||||||
register long r10 __asm__("r10") = __arg4;
|
register long r10 __asm__("r10") = __arg4;
|
||||||
register long r8 __asm__("r8") = __arg5;
|
register long r8 __asm__("r8") = __arg5;
|
||||||
|
Loading…
Reference in New Issue
Block a user