On 2025-09-15 09:11:15+0200, Benjamin Berg wrote:
From: Benjamin Berg benjamin.berg@intel.com
The registers.c file only contain the routines for floating point register access in ptrace mode and initial size detection. The file can be moved over to nolibc by replacing the ptrace libc call with a simple wrapper that does a direct syscall.
Signed-off-by: Benjamin Berg benjamin.berg@intel.com
arch/x86/um/os-Linux/Makefile | 5 ++++- arch/x86/um/os-Linux/registers.c | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/arch/x86/um/os-Linux/Makefile b/arch/x86/um/os-Linux/Makefile index 77a308aaa5ec..d37320430822 100644 --- a/arch/x86/um/os-Linux/Makefile +++ b/arch/x86/um/os-Linux/Makefile @@ -3,10 +3,13 @@ # Licensed under the GPL # -obj-y = registers.o mcontext.o +obj-y = mcontext.o obj-$(CONFIG_X86_32) += tls.o USER_OBJS := $(obj-y) +obj-y += registers.o +NOLIBC_OBJS := registers.o
include $(srctree)/arch/um/scripts/Makefile.rules diff --git a/arch/x86/um/os-Linux/registers.c b/arch/x86/um/os-Linux/registers.c index eb1cdadc8a61..55bce0d3f5d2 100644 --- a/arch/x86/um/os-Linux/registers.c +++ b/arch/x86/um/os-Linux/registers.c @@ -6,18 +6,20 @@ #include <errno.h>
Given that you are explicitly disabling errno support for nolibc, is this include necessary?
#include <stdlib.h> -#include <sys/ptrace.h> +#include <linux/ptrace.h> #ifdef __i386__ #include <sys/user.h> #endif #include <longjmp.h> #include <sysdep/ptrace_user.h> -#include <sys/uio.h> +#include <linux/uio.h>
It looks fairly trivial to add sys/uio.h to nolibc. Only 'struct iovec' (already provided by the UAPI) and readv()/writev() are necessary.
#include <asm/sigcontext.h> #include <linux/elf.h> #include <registers.h> #include <sys/mman.h> +#define my_ptrace(...) my_syscall4(__NR_ptrace, __VA_ARGS__)
Why not add sys/ptrace.h to nolibc and then use sys_ptrace()? In general I'm not a fan of the my_syscall() naming scheme and would like to change this in nolibc itself, so having fewer external users would be nice.
static unsigned long ptrace_regset; unsigned long host_fp_size;
(...)