musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src/internal/defsysinfo.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2019年04月10日 17:10:36 -0400
committerRich Felker <dalias@aerifal.cx>2019年04月10日 17:10:36 -0400
commit22e5bbd0deadcbd767864bd714e890b70e1fe1df (patch)
tree4482da4b24c0e08b29769dad08bf800207db1227 /src/internal/defsysinfo.c
parente97681d6f2c44bf5fa9ecdd30607cb63c780062e (diff)
downloadmusl-22e5bbd0deadcbd767864bd714e890b70e1fe1df.tar.gz
overhaul i386 syscall mechanism not to depend on external asm source
this is the first part of a series of patches intended to make __syscall fully self-contained in the object file produced using syscall.h, which will make it possible for crt1 code to perform syscalls. the (confusingly named) i386 __vsyscall mechanism, which this commit removes, was introduced before the presence of a valid thread pointer was mandatory; back then the thread pointer was setup lazily only if threads were used. the intent was to be able to perform syscalls using the kernel's fast entry point in the VDSO, which can use the sysenter (Intel) or syscall (AMD) instruction instead of int 128,ドル but without inlining an access to the __syscall global at the point of each syscall, which would incur a significant size cost from PIC setup everywhere. the mechanism also shuffled registers/calling convention around to avoid spills of call-saved registers, and to avoid allocating ebx or ebp via asm constraints, since there are plenty of broken-but-supported compiler versions which are incapable of allocating ebx with -fPIC or ebp with -fno-omit-frame-pointer. the new mechanism preserves the properties of avoiding spills and avoiding allocation of ebx/ebp in constraints, but does it inline, using some fairly simple register shuffling, and uses a field of the thread structure rather than global data for the vdso-provided syscall code address. for now, the external __syscall function is refactored not to use the old __vsyscall so it can be kept, but the intent is to remove it too.
Diffstat (limited to 'src/internal/defsysinfo.c')
-rw-r--r--src/internal/defsysinfo.c 3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/internal/defsysinfo.c b/src/internal/defsysinfo.c
new file mode 100644
index 00000000..6d4117db
--- /dev/null
+++ b/src/internal/defsysinfo.c
@@ -0,0 +1,3 @@
+#include "libc.h"
+
+size_t __sysinfo;
generated by cgit v1.2.1 (git 2.18.0) at 2025年09月28日 20:40:55 +0000

AltStyle によって変換されたページ (->オリジナル) /