[libc-commits] [libc] [libc] Force to inline syscall_impl on x86_64 (PR #178153)
via libc-commits
libc-commits at lists.llvm.org
Tue Jan 27 02:30:23 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Jakob Koschel (jakos-sec)
<details>
<summary>Changes</summary>
With currently only LIBC_INLINE, we just hint the compiler to inline the function which however in practice is not always the case.
This is in preparation for adding SHSTK support which requires the system call enabling it to be inlined into do_start().
---
Full diff: https://github.com/llvm/llvm-project/pull/178153.diff
1 Files Affected:
- (modified) libc/src/__support/OSUtil/linux/x86_64/syscall.h (+7-7)
``````````diff
diff --git a/libc/src/__support/OSUtil/linux/x86_64/syscall.h b/libc/src/__support/OSUtil/linux/x86_64/syscall.h
index ebd77980af6a4..d1c19b57ea517 100644
--- a/libc/src/__support/OSUtil/linux/x86_64/syscall.h
+++ b/libc/src/__support/OSUtil/linux/x86_64/syscall.h
@@ -16,7 +16,7 @@
namespace LIBC_NAMESPACE_DECL {
-LIBC_INLINE long syscall_impl(long __number) {
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number) {
long retcode;
LIBC_INLINE_ASM("syscall"
: "=a"(retcode)
@@ -25,7 +25,7 @@ LIBC_INLINE long syscall_impl(long __number) {
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1) {
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1) {
long retcode;
LIBC_INLINE_ASM("syscall"
: "=a"(retcode)
@@ -34,7 +34,7 @@ LIBC_INLINE long syscall_impl(long __number, long __arg1) {
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2) {
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2) {
long retcode;
LIBC_INLINE_ASM("syscall"
: "=a"(retcode)
@@ -43,7 +43,7 @@ LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2) {
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
long __arg3) {
long retcode;
LIBC_INLINE_ASM("syscall"
@@ -53,7 +53,7 @@ LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
long __arg3, long __arg4) {
long retcode;
register long r10 __asm__("r10") = __arg4;
@@ -65,7 +65,7 @@ LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
long __arg3, long __arg4, long __arg5) {
long retcode;
register long r10 __asm__("r10") = __arg4;
@@ -78,7 +78,7 @@ LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
return retcode;
}
-LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
+[[gnu::always_inline]] LIBC_INLINE long syscall_impl(long __number, long __arg1, long __arg2,
long __arg3, long __arg4, long __arg5,
long __arg6) {
long retcode;
``````````
</details>
https://github.com/llvm/llvm-project/pull/178153
More information about the libc-commits
mailing list