[libc-commits] [libc] Force to inline syscall_impl on x86_64 (PR #178153)
Jakob Koschel via libc-commits
libc-commits at lists.llvm.org
Tue Jan 27 02:27:30 PST 2026
https://github.com/jakos-sec created https://github.com/llvm/llvm-project/pull/178153
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().
>From fe1ae65305fb6137ccc1ce0bc33f032eeb7a0065 Mon Sep 17 00:00:00 2001
From: Jakob Koschel <jakobkoschel at google.com>
Date: Tue, 27 Jan 2026 10:22:50 +0000
Subject: [PATCH] Force to inline syscall_impl on x86_64
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().
---
libc/src/__support/OSUtil/linux/x86_64/syscall.h | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
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;
More information about the libc-commits
mailing list