From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED16630E0F6 for ; Sat, 31 Jan 2026 07:44:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845488; cv=none; b=EzYRK/yPXba6M4bkFMZyjpbziUDASbBjKAMeFsdBH82zc1hBw35kcYU1kk0QMoRWibOMEooT00hByuonN6wNXPmvGs6e+FkHWDUfBJaPOUa4AgIySqUXqvL02iHQmMT8CEVFNCqPN3hmdFbS/1aX3C4rUSH/Gm5NRWj3c0XwXeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845488; c=relaxed/simple; bh=K1HB1drOWj5j33NGKYCuiSya0F7BuXnyoBGH67Q5AGw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tkpVVdEUPVGHzInPY3bopnZ94nkhuOXnGSxXcW8zQiO+jOOFRmNtQcwuU5j9IDC5ayB7tc7uB/Tk2E7ozvPYLzUvyU9oF0XEoJOBTpXyRGZw0j0ESWrocRM+cDtW6SpQh/I+XW6WjkmfuwXT3x8tdCgJBI1lPg5npyn9KOb9IYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=l07ne8fd; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="l07ne8fd" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-82361bcbd8fso1709261b3a.0 for ; Fri, 30 Jan 2026 23:44:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845486; x=1770450286; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OvIzJVD0f/EAs0vOP9AMWUz0tgYOHLh4UNVtG/HHyO4=; b=l07ne8fdI0hSM7eLPYDDO0ApaPINAaV+ajiwieUnpKb+ygD4UHXsl8aQCPAI3QVpQx eznLibgJdJTxVkDY2Kcryqo37j19kJqo6zA9h3aAC7h3zNqEQar9f52ZiubDBXce7Lkf BhCAJQ6H76uIh3elYu29klAQd4N4MFhlq8Bto= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845486; x=1770450286; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OvIzJVD0f/EAs0vOP9AMWUz0tgYOHLh4UNVtG/HHyO4=; b=SeSPwdj3MWnGg92CERzPtlFi5Es6RtNoJguYmEv+mRvrHyhXtA+ewxEqT5Wf9zrmIi /LdrrDqQ/Oi7v2/GR9bE19dQiw/RVC//5fAQQ59x5YogYCf37D68cYeghiJj+FbmvQbW J/BAmjPM9TsTbQvl50IxOjWtu7zAIA4YpYH3hRJZSyfvzZSZ1Q0KHB+wUu9BnwJcYj/Z Jj8GlMzEZvGKaYy13TdRCvCfBTIhuCGWxokrMhRb834eqQsc/xQJ9XO4tPXZg2D8yaeI ADLS+EaRDeajIlOblil51l0unuJc5PopT2rT0mQBxqjurmFWijOj6XghL3o2Em8opjMf Dcaw== X-Forwarded-Encrypted: i=1; AJvYcCUiGrtodTEsrmgqKoZ8U1podkwDOTDX4FsaDevVYXEvWiN9sYHH7XBLfSwHxqc3vcI88G0t5qTiMXMA9MA=@vger.kernel.org X-Gm-Message-State: AOJu0YyvgEeqXwkvfLx5TFq8w3THemlGkSXis2ntIL+yJ6Pd1iXtcljj sQJMC9Yv3wzZM77Vg52zKbAtjE2amUvDsa1eaDYxSbPZVFNDSWEbVixwMQcENH8WT+U= X-Gm-Gg: AZuq6aK4y7Y+ZeDcUeXugc6J1sRQVuzBOumVmrRyeuAJukyMW+51XcpeN1SGeEH1e2t fg5hrH6knRiObzQBEF/DmiFHc2W3CMUkegm1VmgfWS+0fcKoeCUqKhmrM+vv8KxtA8B4x9nVj8Y ZQruo4qPHJGCCFkKR1l6rqw1L3SUdhba9n91xhp6Yjgm4g72GGXciblAFnVr5vj29xE3bFD+PuK CDP0xec34vAlAGSi3//YwkicaTQ4UjthJgEoxGUuWbhBrzx7jCLzOkf7UrC+NjRhDW99nnS+5pA F9bPAyfG4MLSVpzI6AErdfWXO6ZMBdtiWCiJOQschMgc0AXu4R4IEBG6B7R8W8S1O45GlY8qAq/ mkh0naXxUQo2cjUXv8tWzr1zqP0SE0KBXtt6DT2kghXs/doxlMYzjTWKG7jZVkWjj9PdmjUZD38 WVRGey1+O1nKBp2hfNOFnsyLHTtotzYqXIlNzG+vxfY0N/7Q4BmLlUoFww3dpVTirbUzAmO3IyF q/R X-Received: by 2002:a05:6a00:1808:b0:81f:852b:a91e with SMTP id d2e1a72fcca58-823ab96e83amr5403880b3a.59.1769845486250; Fri, 30 Jan 2026 23:44:46 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:45 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 1/9] elf: Add relocation types used by nolibc Date: Sat, 31 Jan 2026 16:44:32 +0900 Message-ID: <20260131074440.732588-2-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" nolibc based programs are gaining the ability to relocate themselves so that they can support PIE without needing a linker or special crt from the toolchain. Add the required relocation types. Signed-off-by: Daniel Palmer --- include/uapi/linux/elf-r.h | 27 +++++++++++++++++++++++++++ include/uapi/linux/elf.h | 1 + 2 files changed, 28 insertions(+) create mode 100644 include/uapi/linux/elf-r.h diff --git a/include/uapi/linux/elf-r.h b/include/uapi/linux/elf-r.h new file mode 100644 index 000000000000..a1dce23104a7 --- /dev/null +++ b/include/uapi/linux/elf-r.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _LINUX_ELF_R_H +#define _LINUX_ELF_R_H + +/* These constants define various ELF relocation types */ +#define R_386_RELATIVE 8 + +#define R_68K_RELATIVE 22 + +#define R_AARCH64_RELATIVE 1027 + +#define R_AMD64_RELATIVE 8 + +#define R_ARM_RELATIVE 23 + +#define R_LARCH_RELATIVE 3 + +#define R_PPC_RELATIVE 22 + +#define R_RISCV_RELATIVE 3 + +#define R_SH_RELATIVE 165 + +#define R_SPARC_NONE 0 +#define R_SPARC_RELATIVE 22 + +#endif /* _LINUX_ELF_R_H */ diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h index 819ded2d39de..3d18543d5460 100644 --- a/include/uapi/linux/elf.h +++ b/include/uapi/linux/elf.h @@ -4,6 +4,7 @@ =20 #include #include +#include =20 /* 32-bit ELF base types. */ typedef __u32 Elf32_Addr; --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67C713164DF for ; Sat, 31 Jan 2026 07:44:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845489; cv=none; b=BgKMvzVIW6FcC0jhOS0vxBXc8rmlkyEVf/PkEYDkvISV9EOSWjcSVD5Gp9e9GXcB5nlVerNW1nMpPEqddeC2LHAkMWx7X+EmIgUIMF1iWDZktKsPhsKFMAwlUFY45EbY2W5QfQE9yVHDNWhudnOnczjwEx83mXzlr7VaOEVckgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845489; c=relaxed/simple; bh=72UWWJ+8LmTwAyCkiwkg5mSxQXJgCQ69wZWVDETb+bI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sVm48Vi6Rp+rVCAAzPaHIiuUYisVpWo+rd5P3yGaig6krcBiGll8tImX9I7cWWRz7GW/KYBMEPNSl62r/m8Xrpvigny9+EHqo2UaGLwIU9affnSkVr4ktdJ4lPcAais78Vp7R4ciBuHdUGuqRDFf3QBavJdl3/GsHFBZblX3ZpU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=MVauphBx; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="MVauphBx" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-bc274b8b15bso1833423a12.1 for ; Fri, 30 Jan 2026 23:44:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845488; x=1770450288; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2d4KMj/9z0oQQ8YX8g7Bn6O96fvjyVSdgpmhxsPmDT0=; b=MVauphBxfr6JSHUNSHxv+asV6ywWmjWt7bFL4A8gWmPryEzp5ueZ/OhQHxSIsk5jta K7J7cI1H+ZJ8fEpwlxi3uf5sdF5ltTZhgqtPCXB3HCiCvMVsv6Q0bagVaiWJSENM/wAN 9M63TE9vNyRmT8DVS9uEbyQD0ujcoBCqvsJg0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845488; x=1770450288; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2d4KMj/9z0oQQ8YX8g7Bn6O96fvjyVSdgpmhxsPmDT0=; b=I4lWxTZ6waW2f6FFUpsSlvIyYRX6IFvWe0jIO7xWstPBK/0mBIIP1U1JrT3tDpykGN ozbF1nwZMNleYUOKSq8SIW8DouSaFHAG3e8dhTcNIZ2fGC6fjpp3Q66o8LyCBQgBhtly 98KRGz7C2AgJZmBrnrlf+5jSUlD2kvMu0ugByaADSeGN/8J0lr1M5gyPlw4zTJ0Zg8R7 i6Pq1YLKZv/uBxPRuUZ3tWob8+xkOM0AcBQvl/QmJYVHBd8nS6TZimgbgYbZ+kMArmVI ibguuoNn/N0GXaPy2nrB6sCzgF3Bn4P//vuvic9gJPnVjLANWcibs0wKQ050gkqHNCCw i+Zw== X-Forwarded-Encrypted: i=1; AJvYcCX24WT6ORJB3QYxcXYC468xCzeb4p81PpIsSAUDHntwW+D0D2rAVjABeFM+OiciXeUeVmIlHYIc0hmkZFI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxl6+Sjp0YDl9T9l0Z1zNePsRp4EnaL2nhtQA2h02tgiAe3RAgo Nvu7+l3AvJl4JK/W6O4hOm7q6ZQsJcM8QCjuQv74Doeln8RC/n+yvg4AVFgWDH1ivi8= X-Gm-Gg: AZuq6aJkbXOndcGyOQxCyLCijz4QcLEifHPile/tFqZAWbwMb12bFcIC/CE0z2EmTqz WDvPD05IZZyyBUzGLDDw5wSrjuGZqAI35YpH9Kf4h+VheLsZ2MsrmK1p24HzdwhG9DtQ0+vQKc0 vitUzyYwLcaBJD+a1q7xWi2vC8R1B6BuYsCS8a5kshjWoXsxA/5Ubb03do0uM7kuBM034cLSIB1 fqBF6Nt7xKegtpwMwNwaOtHKmTGxK0iG7WigucfYwGqCyQ/ttA9gjxgzEDIGHgUErqD8LH83DOR WfYT/LC8NRZRCjMcSpSgAOtU2iJDlUHphBEUNbuyReft6UrJYc1XOu3GJt488LMkd8+Oma+MC/1 fxBRQE9RynPa61w0q0mXnuRGJepEhr3fAvE7ctN1pcUJxRMjBDarw6IxbC8spZ4XbBQP5U+53qK FxbMKmDz+W/CyLIom+DH2Vovp16j5wIzRzOboeGf9XyKrh8JSGNfWXkiRRRLcHpJxSygMMJqhCL E/O X-Received: by 2002:a05:6a20:258b:b0:34f:ec32:6a3c with SMTP id adf61e73a8af0-392e005b44fmr5498766637.28.1769845487708; Fri, 30 Jan 2026 23:44:47 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:47 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 2/9] tools/nolibc: crt: Split _start_c() into stack-only and normal part Date: Sat, 31 Jan 2026 16:44:33 +0900 Message-ID: <20260131074440.732588-3-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" To prepare for nolibc programs being able to relocate themselves we need to split _start_c() into two parts: - One part that only uses the stack so there are no accesses via the GOT etc that isn't setup yet. Note that on m68k at least this also means forcing the stackprotector off because accessing the stack protector canary is done via the GOT. - Another part that is called after we have done relocation so it is safe to access global variables etc that might use the GOT etc. Signed-off-by: Daniel Palmer --- tools/include/nolibc/crt.h | 57 +++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/tools/include/nolibc/crt.h b/tools/include/nolibc/crt.h index d9262998dae9..899062c00fb7 100644 --- a/tools/include/nolibc/crt.h +++ b/tools/include/nolibc/crt.h @@ -27,26 +27,51 @@ extern void (*const __init_array_end[])(int, char **, c= har**) __attribute__((wea extern void (*const __fini_array_start[])(void) __attribute__((weak)); extern void (*const __fini_array_end[])(void) __attribute__((weak)); =20 -void _start_c(long *sp); -__attribute__((weak,used)) +void __start_c(long argc, char **argv, char **envp, const unsigned long *a= uxv); +__attribute__((weak, used)) #if __nolibc_has_feature(undefined_behavior_sanitizer) __attribute__((no_sanitize("function"))) #endif -void _start_c(long *sp) +void __no_stack_protector __start_c(long argc, char **argv, char **envp, c= onst unsigned long *auxv) { - long argc; - char **argv; - char **envp; - int exitcode; void (* const *ctor_func)(int, char **, char **); void (* const *dtor_func)(void); - const unsigned long *auxv; /* silence potential warning: conflicting types for 'main' */ int _nolibc_main(int, char **, char **) __asm__ ("main"); + int exitcode; =20 /* initialize stack protector */ __stack_chk_init(); =20 + environ =3D envp; + _auxv =3D auxv; + + for (ctor_func =3D __preinit_array_start; ctor_func < __preinit_array_end= ; ctor_func++) + (*ctor_func)(argc, argv, envp); + for (ctor_func =3D __init_array_start; ctor_func < __init_array_end; ctor= _func++) + (*ctor_func)(argc, argv, envp); + + /* go to application */ + exitcode =3D _nolibc_main(argc, argv, envp); + + for (dtor_func =3D __fini_array_end; dtor_func > __fini_array_start;) + (*--dtor_func)(); + + exit(exitcode); +} + +void _start_c(long *sp); +__attribute__((weak, used)) +#if __nolibc_has_feature(undefined_behavior_sanitizer) + __attribute__((no_sanitize("function"))) +#endif +void __no_stack_protector _start_c(long *sp) +{ + long argc; + char **argv; + char **envp; + const unsigned long *auxv; + /* * sp : argc <-- argument count, required by main() * argv: argv[0] <-- argument vector, required by main() @@ -69,25 +94,13 @@ void _start_c(long *sp) argv =3D (void *)(sp + 1); =20 /* find environ */ - environ =3D envp =3D argv + argc + 1; + envp =3D argv + argc + 1; =20 /* find _auxv */ for (auxv =3D (void *)envp; *auxv++;) ; - _auxv =3D auxv; =20 - for (ctor_func =3D __preinit_array_start; ctor_func < __preinit_array_end= ; ctor_func++) - (*ctor_func)(argc, argv, envp); - for (ctor_func =3D __init_array_start; ctor_func < __init_array_end; ctor= _func++) - (*ctor_func)(argc, argv, envp); - - /* go to application */ - exitcode =3D _nolibc_main(argc, argv, envp); - - for (dtor_func =3D __fini_array_end; dtor_func > __fini_array_start;) - (*--dtor_func)(); - - exit(exitcode); + __start_c(argc, argv, envp, auxv); } =20 #endif /* NOLIBC_NO_RUNTIME */ --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 176A133BBC5 for ; Sat, 31 Jan 2026 07:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845491; cv=none; b=VcLqWEPmxwnCnWc7FrEnPJlgPUOwyJxwgj3uhUWtP8sc1iaVukPCymYZReZLNaNcKUQh/67dmLdIWuH8rO7VnQB/E5eSIspakyRYCD+ZiPXhJAEvsFVJd13+eDoimuTwej1YZSPD7UGKkiugr2mSMhlUYHqzSSt46Ixk/xJFqlM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845491; c=relaxed/simple; bh=mgKFzv8GyQWv+DM+glA4YkSuf52sB+vH3aeiG7Kk/pw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RB4mRCgees0W6V346TATegM2V6WthemiIYWjXRF4RswzSKOvvdKmVjZ3/egnwxuj8xU/SJa24ZzOT8CHPWXnO7oH0R6ZwDSVTWwudGwxRqkoHAM8X5jFE39QaRDpSg2wBJuel9uMO2LsfneX0+YdDHV4ZyvRE9NtzuXdM7f2LR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=TDEagTz5; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="TDEagTz5" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-c5e051a47ddso1622078a12.1 for ; Fri, 30 Jan 2026 23:44:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845489; x=1770450289; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1edsEnhpG6Bk5mALRqZqGFyuqmJB3nWoL6pBChctvlI=; b=TDEagTz5/JNETm6HZ3TgmKGnKV8nqk/Lbh2T8YBQ8hWPgz/lLxbeCHSiw6pADCMP6U B4I9VN/MIOlNFfCz48xZiXrz6l01e96avxjR7sKj0J2zV84hyUhvLHBFdqj55oP+hH/w AJ2TJ852UP0/0kw+w268zAJuQCkD0kEmZppbY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845489; x=1770450289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1edsEnhpG6Bk5mALRqZqGFyuqmJB3nWoL6pBChctvlI=; b=tiAOh9k+4SNrG8j8HTRdT9ZYuS3EviqmGYdjENP+7wtB1QbLBhMYUxQyajiyBtd17J 2gsZzlo47FY4P72w1QJEbpO4NABM/qYK0X/ou0u6Ucku2x3hfDkpcwAPaz3N0osCkK7j O2Ii6l4gI4SLh+GEJQrgNx09s9I8xvLRU97uxGBhxKpQfAbhr+zYZHhWk4Fv4MO1BaEe oCitIarbxOvCGBOgGSWhL8GSf3AAkx6s7PWfIKAiD+eOTHTrj8Pk9X6T4ym+l+eVZ93j Bjbi8L9lNdSjRHJY1oAx+mzQNlNMUYIPtxZlafmwiCfs22gvxxBPdYN1MyAzgs4ohauV S77g== X-Forwarded-Encrypted: i=1; AJvYcCUBtQzLbVc/qzoANx/29Z2FA5NpoieltE98huIlpDzId9I1z6/2KCCzo0AoE/H4fIDsQKEunBWutlGIMx8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7oQu2kgyFek4OuvYXNM+8YqFBKWXOLYJAP1Gk0jd5umGb6cfO 8m4UgxOMJBfRZHeBsvZ63zd+WQUsq3krTDZQfnC7pBXCvi7EEXJiuwVXd8tr76PNxpc= X-Gm-Gg: AZuq6aJlojFF5taugBN5lE3Hmxj9amS3At2Sl0VBQFrB0BvxVw0mKobh49yOqnvICAn fadmUOeXdFIm5+JrIQO5yMv964BO3EUBXaQIK0eLBITi+b8D628gCUVIAIjnKK3V69J4KcBhHu5 X1qqvB6caMR3ELQ7q/tU3sQCGaRMa7LSUfPgpMShdqbmjx6DgNb9L7FTxPz8LW5RTHklt5S81IG GJ/RAK55SO1Z2II8vItlBQgyfuSoNOHm57i5gLblnQEoHTS0DlIjU0S3A6W0asUR7yN7OPU5fwV tIuWYwWl4mdlwNXfusiZ6FZ53KTZotjQ3hMeu2cOZdF1WzssjT96a/KmNKTMSjoMouaC+EMz7HC X2KrOXD5bAQlRu30+k3/xklL1DPn/eAvK0XAFnhKqQgLF1s7e4eR3w2WrrXCiGFP4j/ealzTewu PpZ+BmygoaQC1izZyM3RFIugnj2IEydkIjzE0FCHq5gtogiEA39aRLWFl/1f/iRkwaAapyBKeAm YTQG/fCIIkqr9c= X-Received: by 2002:a05:6a20:568b:b0:38b:ebaa:c167 with SMTP id adf61e73a8af0-392e003bfebmr5713531637.20.1769845489298; Fri, 30 Jan 2026 23:44:49 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:49 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 3/9] tools/nolibc: Add basic ELF self-relocation support for static PIE Date: Sat, 31 Jan 2026 16:44:34 +0900 Message-ID: <20260131074440.732588-4-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently nolibc programs cannot be compiled with -static-pie. Which is basically no shared libraries, no interpreter, but contain relocation information in the ELF to allow the program to be fixed up to run at the address that the kernel loaded it to. There might be use cases for static PIE but mine is for nommu. The ELF FDPIC loader can actually load normal ELFs is long as they can be relocated. This very basic implementation does the following: - Works out if we are PIE and need to be relocated. ELF type =3D=3D ET_DYN - Works out if we are static PIE, have no interpreter, and need to relocate ourselves. - Calculates the base address using the location of the program headers. This is probably not correct. - Finds the ELF relocation data. - Calls an arch specific function to handle each of the relocations. Note that from testing a lot of archs don't produce static PIE binaries with the -static-pie option and you need to compile with -pie -Wl,--no-dynamic-linker to get a static PIE binary. Currently REL and RELA formats are supported. Signed-off-by: Daniel Palmer --- tools/include/nolibc/Makefile | 1 + tools/include/nolibc/crt.h | 7 + tools/include/nolibc/reloc.h | 240 ++++++++++++++++++++++++++++++++++ 3 files changed, 248 insertions(+) create mode 100644 tools/include/nolibc/reloc.h diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile index 8118e22844f1..2b968a097854 100644 --- a/tools/include/nolibc/Makefile +++ b/tools/include/nolibc/Makefile @@ -38,6 +38,7 @@ all_files :=3D \ math.h \ nolibc.h \ poll.h \ + reloc.h \ sched.h \ signal.h \ stackprotector.h \ diff --git a/tools/include/nolibc/crt.h b/tools/include/nolibc/crt.h index 899062c00fb7..3c1c8d738ac7 100644 --- a/tools/include/nolibc/crt.h +++ b/tools/include/nolibc/crt.h @@ -10,6 +10,7 @@ #ifndef NOLIBC_NO_RUNTIME =20 #include "compiler.h" +#include "reloc.h" =20 char **environ __attribute__((weak)); const unsigned long *_auxv __attribute__((weak)); @@ -100,6 +101,12 @@ void __no_stack_protector _start_c(long *sp) for (auxv =3D (void *)envp; *auxv++;) ; =20 + /* + * Do relocation if required and supported, this must happen before any + * global variables are updated or used. + */ + _relocate(auxv); + __start_c(argc, argv, envp, auxv); } =20 diff --git a/tools/include/nolibc/reloc.h b/tools/include/nolibc/reloc.h new file mode 100644 index 000000000000..98c42af6f845 --- /dev/null +++ b/tools/include/nolibc/reloc.h @@ -0,0 +1,240 @@ +/* SPDX-License-Identifier: LGPL-2.1 OR MIT */ +/* + * Self relocation support for NOLIBC + * Copyright (C) 2026 Daniel Palmer + * + * This allows a PIE compiled nolibc binary relocate itself + * instead of relying on a dynamic linker. So called "static PIE". + * + * With some care binaries produced with this relocation code + * can run via the FDPIC ELF loader on nommu systems. + * + * I am not expert in all of the different options for GCC but + * this works for me for x86: + * gcc -nostdlib -fpie -Os -include \ + * -static-pie -o helloworld helloworld.c + * + * For some targets -static-pie doesn't work but setting PIE and + * then disabling the linker results in a static-pie: + * gcc -nostdlib -fpie -Os -include \ + * -Wl,--no-dynamic-linker -pie -o helloworld helloworld.c + */ + +#ifndef _NOLIBC_RELOC_H +#define _NOLIBC_RELOC_H + +#ifdef NOLIBC_ARCH_HAS_RELOC +#include "elf.h" +#include + +#ifdef NOLIBC_ARCH_ELF32 +#define elf_ehdr Elf32_Ehdr +#define elf_phdr Elf32_Phdr +/* 32bit ARM, x86 uses REL instead of RELA */ +#ifdef NOLIBC_ARCH_ELF_REL +#define elf_rel Elf32_Rel +#else +#define elf_rela Elf32_Rela +#endif +#define elf_dyn Elf32_Dyn +#define elf_addr Elf32_Addr +#define elf_r_type(_x) ELF32_R_TYPE(_x) +#else +#define elf_ehdr Elf64_Ehdr +#define elf_phdr Elf64_Phdr +#define elf_dyn Elf64_Dyn +#define elf_rela Elf64_Rela +#define elf_addr Elf64_Addr +#define elf_r_type(_x) ELF64_R_TYPE(_x) +#endif + +#ifdef NOLIBC_ARCH_ELF_REL +/* + * Your arch needs to provide this to actually handle doing each of the + * relocations if it uses the REL format. + */ +static int __relocate_rel(unsigned long base, elf_rel *entry); + +/* Generic implementation of R_x_RELATIVE for REL */ +#define __relocate_rel_relative(_base, _entry) \ + do { \ + elf_addr *_addr; \ + int addend; \ + \ + _addr =3D (elf_addr *)(_base + _entry->r_offset); \ + addend =3D *_addr; \ + *_addr =3D _base + addend; \ + } while (0) + +static int __relocate(unsigned long base, + unsigned long rel_off, + unsigned long rel_count) +{ + elf_rel *rel =3D (elf_rel *)(base + rel_off); + unsigned long i; + + for (i =3D 0; i < rel_count; i++) { + if (__relocate_rel(base, &rel[i])) + return -1; + } + + return 0; +} +#else +/* + * Your arch needs to provide this to actually handle doing each of the + * relocations if it uses the RELA format. + */ +static int __relocate_rela(unsigned long base, elf_rela *entry); + +/* Generic implementation of R_x_RELATIVE for RELA */ +#define __relocate_rela_relative(_base, _entry) \ + do { \ + elf_addr *_addr; \ + \ + _addr =3D (elf_addr *)(_base + _entry->r_offset); \ + *_addr =3D (elf_addr) (_base + _entry->r_addend); \ + } while (0) + +static int __relocate(unsigned long base, + unsigned long rela_off, + unsigned long rela_count) +{ + elf_rela *rela =3D (elf_rela *)(base + rela_off); + unsigned long i; + + for (i =3D 0; i < rela_count; i++) { + if (__relocate_rela(base, &rela[i])) + return -1; + } + + return 0; +} +#endif + +static void _relocate(const unsigned long *auxv) +{ + unsigned long rel_rela_count =3D 0; + unsigned long rel_rela_off =3D 0; + unsigned long phdr_addr =3D 0; + unsigned long phdr_num =3D 0; + unsigned long phdr_sz =3D 0; + elf_phdr *phdr_dyn =3D NULL; + unsigned long base; + unsigned long i; + int remaining; + elf_ehdr *ehdr; + elf_dyn *dyn; + + for (remaining =3D 3; remaining; ) { + if (!auxv[0] && !auxv[1]) + break; + + switch (auxv[0]) { + case AT_NOTELF: + return; + + case AT_PHDR: + phdr_addr =3D auxv[1]; + remaining--; + break; + + case AT_PHNUM: + phdr_num =3D auxv[1]; + remaining--; + break; + + /* + * Not sure if this is even needed, should match + * the size of the program header type? + */ + case AT_PHENT: + phdr_sz =3D auxv[1]; + remaining--; + break; + } + + auxv +=3D 2; + } + + if (remaining) + goto failed; + + /* + * Everything I could find said that the way to find the base for relocat= ion + * should be done by searching for the first PT_LOAD and then using the o= fset + * of that against the adressed of the program headers. So FIXME. + */ + base =3D phdr_addr - sizeof(elf_ehdr); + + /* Check that we are PIE */ + ehdr =3D (elf_ehdr *) base; + if (ehdr->e_type !=3D ET_DYN) + return; + + for (i =3D 0, remaining =3D 1; (i < phdr_num) && remaining; i++) { + elf_phdr *phdr =3D (elf_phdr *)(phdr_addr + (phdr_sz * i)); + + switch (phdr->p_type) { + case PT_INTERP: + /* Interp was set, we were relocated already?, return */ + return; + case PT_DYNAMIC: + phdr_dyn =3D phdr; + remaining--; + break; + } + } + + if (!phdr_dyn) + goto failed; + + dyn =3D (elf_dyn *)(base + phdr_dyn->p_offset); + for (; dyn->d_tag !=3D DT_NULL; dyn++) { + switch (dyn->d_tag) { +#ifdef NOLIBC_ARCH_ELF_REL + case DT_REL: + rel_rela_off =3D dyn->d_un.d_ptr; + break; + case DT_RELCOUNT: + rel_rela_count =3D dyn->d_un.d_val; + break; + } +#else + case DT_RELA: + rel_rela_off =3D dyn->d_un.d_ptr; + break; + case DT_RELACOUNT: + rel_rela_count =3D dyn->d_un.d_val; + break; + } +#endif + + /* Got what we came for, exit loop */ + if (rel_rela_off && rel_rela_count) + break; + } + + if (!rel_rela_off || !rel_rela_count) + goto failed; + + if (__relocate(base, rel_rela_off, rel_rela_count)) + goto failed; + + return; + +failed: + __builtin_trap(); +} +#else +static void _relocate(const unsigned long *auxv __attribute__((unused))) +{ + /* + * Maybe if you build a program that needs relocation + * but it's not supported detect that and trap here. + * But for now trust that people know what they are doing. + */ +} +#endif /* NOLIBC_ARCH_HAS_RELOC */ + +#endif /* _NOLIBC_RELOC_H */ --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A15C33D6C0 for ; Sat, 31 Jan 2026 07:44:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845492; cv=none; b=LeuLrTHqGdVYxLJ7lr3NuwRmMWTzl/HO9TDZP+ZTDXxOyw2nQR3OnYXk7JlX0C0267L1tYV0K0ZTXsjQ4X6B5PeQ6yT0TKqWbb6Nm81FaELw632cJS0t/jvTJz9dLYiW9ikndxVewhmDAu0NyBKIWoM/VPiRSCwVH/+udKOyyfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845492; c=relaxed/simple; bh=nrHVBM0C0aA7Dqad2QkQPhCGrW0y3u8sP5h7ZRk8si8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k5Seli3/ki87LI38gn0MDyeCdkPgSO7KnPPjDLncTwqUZH7DcGb1MtSjUruJi7PbC089J4xZloMeuLoItF8/vAEOIdASNeXfERCdhxgb8x3pCzd7NW0O4gJuHiI8uImXEF9Rfex2rOZr74RptpdyA61rtjaN9izbdY9RNFBMgGY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=WYXj3qEt; arc=none smtp.client-ip=209.85.210.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="WYXj3qEt" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-8220bd582ddso1615553b3a.2 for ; Fri, 30 Jan 2026 23:44:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845491; x=1770450291; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yfOAD3sMalbdZQIqFc1tensJa9XPyQ8nWbWEChyFToI=; b=WYXj3qEtzIredZqvvVfPymwgHGK96kQvOr4YIbctPVpU0VXkudEzf6M1ehhQhYGlyz pRQ3haJI/qG/xhlRGf9mZuNNQhTz82mNXDkHOsrnzGhwSt43o4+HQRj538BglDFfYYWX +IAHO0DiQ7XJNoXCrHTOt9EAsW6ddHZ0KxqZk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845491; x=1770450291; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yfOAD3sMalbdZQIqFc1tensJa9XPyQ8nWbWEChyFToI=; b=ugCUXfZ1ZYM0gPP5F0QS22Um4ge3EfnF4HPrrYMoSRFzOP/MFNuDFnKxRrYVLVzJ5n h7bMYtYQeU848LIvl4zDmuK9lNPQN4Ix5DIkn3CgOGQ5o6E12YwScWu6NSs1qg0JWLiT MXTk1mXvn6A931+Ue+iyDyQri5WcxXCKPpV0wOTJ29HkMdFACC1hxZPzgX+zh+LigXt3 Ac6kg/DvGrqcUdlQK4GMX7oHVgINSJza9QNjy4zllbKGq87ZyAw6SEn+eHRNTvrfF6TW 4a5lRV25BL9U/BZ4b7Rbhlb6uA7wv4ABB2HYUf4VAM4VH7EJk2ULKEyIt+oRwE8KS7CT Z7vg== X-Forwarded-Encrypted: i=1; AJvYcCXE/V/ucMNsHZw9GfEKLlToLm1quXlLFZBuLedfCudIFpZif4PlNxyk0M8InC0kCkfXq8YzuNFkeZRKrVY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd5o4XKa06txNsBwP2y3zrUlurwkzgXwsdFQm8HPgUcFBhjpUx UknyZtQm14eMkXaN0KKlEu0b8rqGQB+D7TQt0ohlfXiU0GV/z6gy9pKvwXF3AkIiWBZuP29/vi0 OtY1j X-Gm-Gg: AZuq6aIAWLN9MVeNKjvC+N0522OotAvln9CB8mXOeAZ3RhgBWQuMdeMxN6zKVxfE1Rl d1rOFlopvrAkWw7Sb/bwTfOI/GxWz+cMq0jViblVdp3WT6FGHRM5wXkoEo1Eyxo37PVDSysX4bo nbKoYQfdTpDu3+eeELT0tN3tLwdP1du8M82e8xEDTPJhzH+G3YTsachygiaaPfz5CoQmr2/kuko lOiKfRFmdCbNyTQYVWQSnuPLHAv50NZTX1YhgIU4CW+YzpR+7PCCmiL1cOv9iLZxrK+qam6CYc8 f+P+Q1WaiguWzBUu3EwywdY5Dc/xV0YFWD+crTB3dbKEAGOpjYT1R3vZnc8owvtpJv65jrhNPo3 N+gzsldXFeOsm0Zxb0XyMyqRC1UUXeX6S36Vw5RgxyxeVI0BcKD7rzW/YFAAIwJ15SWqvY8uZzM ce8kxrd6nrT1NutGGsuCestMCqHdzJdgV2LweDo/0XD1i/XIVJ21QC42FOErkueZk7XEBjGfLgq E4k X-Received: by 2002:a05:6a20:1605:b0:38b:ea2a:2843 with SMTP id adf61e73a8af0-392dffe90fcmr5870365637.10.1769845490700; Fri, 30 Jan 2026 23:44:50 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:50 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 4/9] tools/nolibc: m68k: Add relocation support Date: Sat, 31 Jan 2026 16:44:35 +0900 Message-ID: <20260131074440.732588-5-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add support for handling relocations on m68k. This also changes the branch to _start_c to be relative. This might break FLAT binaries so needs to be checked and probably wrapped in some #ifdef .. magic. Signed-off-by: Daniel Palmer --- tools/include/nolibc/arch-m68k.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tools/include/nolibc/arch-m68k.h b/tools/include/nolibc/arch-m= 68k.h index 2a4fbada5e79..39df399a1f12 100644 --- a/tools/include/nolibc/arch-m68k.h +++ b/tools/include/nolibc/arch-m68k.h @@ -10,8 +10,12 @@ #ifndef _NOLIBC_ARCH_M68K_H #define _NOLIBC_ARCH_M68K_H =20 +#define NOLIBC_ARCH_HAS_RELOC +#define NOLIBC_ARCH_ELF32 + #include "compiler.h" #include "crt.h" +#include "elf.h" =20 #define _NOLIBC_SYSCALL_CLOBBERLIST "memory" =20 @@ -129,12 +133,26 @@ }) =20 #ifndef NOLIBC_NO_RUNTIME +static int __relocate_rela(unsigned long base, Elf32_Rela *entry) +{ + switch (ELF32_R_TYPE(entry->r_info)) { + case R_68K_RELATIVE: + __relocate_rela_relative(base, entry); + break; + default: + return -1; + } + + return 0; +} + void _start(void); void __attribute__((weak, noreturn)) __nolibc_entrypoint __no_stack_protec= tor _start(void) { __asm__ volatile ( "movel %sp, %sp@-\n" - "jsr _start_c\n" + "lea _start_c(%pc), %a0\n" + "jsr (%a0)\n" ); __nolibc_entrypoint_epilogue(); } --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0201233F391 for ; Sat, 31 Jan 2026 07:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845494; cv=none; b=AlvAyso7M23fBiSxNZz1LcKqRx5Q+R8OpHbvxiBrc1a7416XNNHX6APCclc9HSPuuBmtf9q7Bh4cVVDxGQUMb7STqj4zyEKwpCSBFEOdTIVbd1YTcPzXNMUXVbZRqUyTbzDx4CoqMSIWLb+4lwmnfWYZtTrET9w2vI/vQPzCA00= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845494; c=relaxed/simple; bh=j1dz9zwaYHWWKvzAr1EORv6raZiGR5N+Yz4qM/lKIBY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sZqFDHQrIUJmAq+xvzU64Adm9xcWSZ53JsdXz6GSbUmVN/XFtkbLvXOFOdeZ925IwE9jaaSjjHC5PXN7T3o9ZFF++gXNCyUcjZPgqAZgdKw3i4qEwi4P1hWkNaJIuT6/Sg4hWsc5y1niuGiI3UZTm8tCR6e79DxasOC/tDFKYMY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=Pdj9ws/A; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="Pdj9ws/A" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-c65822dead7so1085655a12.3 for ; Fri, 30 Jan 2026 23:44:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845492; x=1770450292; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HQs8T1G4QTG56pdQ9/QVSJ3/3yBfzA7eURYnqRiEb98=; b=Pdj9ws/A/tZG+ap7In+6PjMovMKoOPNHElUu3xZLhBMJhswxj+Yl0u4q+x7th/RB8L xn8eSC+xyG8/TDdcteRrudpksbjnBLE1uRwViMcS0HqFPrSHc7lQLaWujjPg8Hyp2Ypm T41o+fcfb2Ml5FxTxLL9COm6CgqRkLHqnTzuQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845492; x=1770450292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=HQs8T1G4QTG56pdQ9/QVSJ3/3yBfzA7eURYnqRiEb98=; b=rWWCNHUdCPJvGqf9bPS2Krabggr/eNaNKpEKyVe4RTKzPd61JWPvtEJJQQ4b95cLK3 ylYfjZR9ck6gY8C31URWLoFPLiLAZY4qlzWdr5DS3VwJZ0rFq1SQKSxqvXa4HIvSn1Nr retLxlf1RGMpatCOxyuZTLsg/maDtKJrfynC6JzZ4AmCBHK5cJqGbhXQBwFomeryHUrQ mxPTM7Ur/BEK7AfhkbIkva/pV1NddMu97/KZSl7bFWozfuMTCNbBUFHFY2gF7CVMoQ3R jCeSFzCCCJ1aKCmRKf0hZSGQergMp5hUGnj85zq0J4jxnzdd1e4wp/GK1KwvS6+gImA8 UZtw== X-Forwarded-Encrypted: i=1; AJvYcCXfvDGldTRMtFYZAJMvD9MNV50YcPLu/m4HjDp6QGJFhb2ngbJZCt/AMt5kr90e+mSGFUMBUmsOgP5Ae/M=@vger.kernel.org X-Gm-Message-State: AOJu0YxRxBBgP7y9Hr76sqPTVKq8Y0gmT361GPJ65D4H0ljqjCtx+PqR zGeOPU/vnfPfFPYdUt5+ThsXWyc1TQryN5RLL7lWJ9vc6oNuuEgr12CBLJi/rG7fFCk= X-Gm-Gg: AZuq6aK80wpWZ/A397fpFy7VXG9a2cDDa3IbhsLA/Vk34Q6L9TOUZq78CQre6rGwX/3 BNvkTH1tnCgRUDWNFPQjJ9+mvimQtA5imk1qI9hI4IfOPGMG3A6CezJ6MVAwLzA3ZZLOGwCHIU0 b45DTP0lO67N1ICoCOxZd08JLsr9r/W08hJrmIFILdcnMXrL4nO8XTzAEB2VweLg7mRCSWRS1zz ZMcjHB0WPYmsIsiFMhKMrd4rfZ7t8S05AbIOD0Cf8RTUNn+FN3cpNgrnGsU/5xG80MyrPaTQZwX XICg0qFwPeudNJwTm46m4AgD/rgyptQi5mP+m8Tjm8DXAUVsacoR6/km8m+260n15nYdVVyx7wR omK/k8oAyuJHLJVYseJS1/aMs1UG2VbS1W1hQXKl2bGkiJBpooELhkCB1VAvvRjKAqAUL+Yb6Qr 8UwltVfidWrXed55Fuf4yw0Pn22A93l4TqyccIjr1JmKLHR9kgxNHW8WgdwVvs3F/NZ2RuisU2z tvW X-Received: by 2002:a05:6a20:a11c:b0:35f:5fc4:d89f with SMTP id adf61e73a8af0-392e010990bmr5313296637.39.1769845492332; Fri, 30 Jan 2026 23:44:52 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:52 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 5/9] tools/nolibc: x86: Add relocation support for x86_64 Date: Sat, 31 Jan 2026 16:44:36 +0900 Message-ID: <20260131074440.732588-6-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add relocation support for x86, both 32bit and 64bit. Signed-off-by: Daniel Palmer --- tools/include/nolibc/arch-x86.h | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tools/include/nolibc/arch-x86.h b/tools/include/nolibc/arch-x8= 6.h index f6c43ac5377b..3639c1104e0d 100644 --- a/tools/include/nolibc/arch-x86.h +++ b/tools/include/nolibc/arch-x86.h @@ -7,8 +7,17 @@ #ifndef _NOLIBC_ARCH_X86_H #define _NOLIBC_ARCH_X86_H =20 +#define NOLIBC_ARCH_HAS_RELOC +#if !defined(__x86_64__) +#define NOLIBC_ARCH_ELF32 +#define NOLIBC_ARCH_ELF_REL +#elif defined(__x86_64__) && defined(__ILP32__) +#define NOLIBC_ARCH_ELF32 +#endif + #include "compiler.h" #include "crt.h" +#include "elf.h" =20 #if !defined(__x86_64__) =20 @@ -158,6 +167,19 @@ }) =20 #ifndef NOLIBC_NO_RUNTIME +static int __relocate_rel(unsigned long base, elf_rel *entry) +{ + switch (elf_r_type(entry->r_info)) { + case R_386_RELATIVE: + __relocate_rel_relative(base, entry); + break; + default: + return -1; + } + + return 0; +} + /* startup code */ /* * i386 System V ABI mandates: @@ -326,6 +348,19 @@ void __attribute__((weak, noreturn)) __nolibc_entrypoi= nt __no_stack_protector _s }) =20 #ifndef NOLIBC_NO_RUNTIME +static int __relocate_rela(unsigned long base, elf_rela *entry) +{ + switch (elf_r_type(entry->r_info)) { + case R_AMD64_RELATIVE: + __relocate_rela_relative(base, entry); + break; + default: + return -1; + } + + return 0; +} + /* startup code */ /* * x86-64 System V ABI mandates: --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77FC234026B for ; Sat, 31 Jan 2026 07:44:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845495; cv=none; b=HW+Ou3eiF63G9IoX9hKyVgiYIoX4UuJ9V1jxz7H7EXK+2OXQRO1ah/2d2vvWB0QocymO7TH0fDLzvL008AC0Fna+0obnw/psqNfB2T2VVpP1kJKgYNUFLd6rIvF05Ozc7gxGPcYIdOAK/xCKlB9aNNXpU7I2rX3drvFPTfDO3dA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845495; c=relaxed/simple; bh=IbRSC+99CGsuCOJR/t1SXLWtVJoGnTfs6bK25aK6E78=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z7l03f7CDaVpqd1gfuIeDiI6CnVEq6kENx8ZIrqdgu4TWRp3nXgXqFgilGsnpIwoxZSmr24ueacix57vON3Ns33vcODTnawubLJqqXyO23w70HLcXR54PQfRpklYzPHoetWw+yV4cSK/aZgSpajYisnF6Kfv9Ud388G8Flk8s0E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=VPI2dO4B; arc=none smtp.client-ip=209.85.215.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="VPI2dO4B" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-c075ec1a58aso1165002a12.0 for ; Fri, 30 Jan 2026 23:44:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845494; x=1770450294; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2BMIhxzEdsFzW415GxAhrjTEKSyRDMfnbuSPnZrapNw=; b=VPI2dO4BtBuBRrl0euoKps2f+pNsC/l1V+lgy43JQBDgH8YiH5UQ2NeKVuIGUDRGYC k9ekkn0swDuPPBRCMCu6PLDgAVDPXgEUcqXv9BVlLaMJywhnOdgoLdLBzhHnjBTfFTGf GfT0OqHCwQ/9559RuTSg7hhXi6CaFhe4r5NLg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845494; x=1770450294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2BMIhxzEdsFzW415GxAhrjTEKSyRDMfnbuSPnZrapNw=; b=aJKnHiwLxrtkTHlc3k09Zx3NbDqZ81DM9MjcI+bfBSqnFRon6FZXvy4PUmjc++6i69 JjkjdmrFrv9AnmXV/NK74+Y+Qv2qoV8XgcLJ3h8MCW9uBrFY9ST70oIwsD5Qbz8/2hNx xKYV3ByHFSJmqfxKi4wumpeKHIMPolhRhPyQp0rECOxaqS57NdC7foI6ZjD75/5M/dtp HrXg/9LzXhbgGjESx15EfQe7GDfvgEskYLVC6nEq7zMF4UztmttRW4jjRj3aL+yMjiEx DFX9sjcSXpHjAnR/e5GQmZWmQMm4Uy1MzRg+ZwjOcupvRfPvJxEfQE5Nlzf6c15xXa2r A2Dw== X-Forwarded-Encrypted: i=1; AJvYcCWQR8NaMyAUzWsRco1Txh9XFja3gEV7VklACJZdvvyTiz0jYec2Q27D1MRGbRINwzGNBCr+sFLEISRaWzc=@vger.kernel.org X-Gm-Message-State: AOJu0YxV+vOrZC847WaJZ1QM51hWpq3m40EAXqaFYYZSYiP+Y0CdY38x YqY4nnqy8yQtJwMLBk21ufutUSygHgSOy79rnGjE0pBqHNqgqlkRA8CYw/CtFJCGkpU= X-Gm-Gg: AZuq6aK1MyVxKiOW6uIk+5p5jHCa6MHX4155UkCq0MfFMjjabSvg5CdS7paZa+VZtZm FblQVzSS27QfiKECEFTUkCtivxq5d5oKKk3C7946fW4I9UjrwVcMu3vOwKPxGSPYvyaK3rls8p2 QHcgbgaKVmtvxtRjdDGhrDXgQtDKL/IYtkTlkFS4YUIfZRynp8PMZ3FYiMEAnOkUwRrq8Szu8mb Sc3J+lWht2CQlua0raa4+RlxiU2+y/0svMFpGaiRtromy5bdD0EfCJWBTYL1HoZOHtDrggs6ejB 25Oi8y+zBrxWoryorTvluINoRiiA613IYHiVOHrcGAi3y0rgKmnGFjt1B4gyDQwMUQ5EOz8hjSJ bBUvOZnyUBy2ih7oFgjATPoIClVSN554hOX1vAPdZOAcxwgo7J+3l4umgbeeobdH+wGROlpgVI1 fLaJJvfAilXg5AUkI7f0+IzQUVZRYwBPt653z6vLg0/7hwYvQygO9i0EkzvzLrxJo9d9oeno6aK BRA X-Received: by 2002:a05:6a21:8888:b0:392:e81f:6711 with SMTP id adf61e73a8af0-392e81f696bmr3631679637.8.1769845493790; Fri, 30 Jan 2026 23:44:53 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:53 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 6/9] tools/nolibc: riscv: Add relocation support Date: Sat, 31 Jan 2026 16:44:37 +0900 Message-ID: <20260131074440.732588-7-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add relocation support for 32 and 64bit riscv. Signed-off-by: Daniel Palmer --- tools/include/nolibc/arch-riscv.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/include/nolibc/arch-riscv.h b/tools/include/nolibc/arch-= riscv.h index 1c00cacf57e1..76618d4c001d 100644 --- a/tools/include/nolibc/arch-riscv.h +++ b/tools/include/nolibc/arch-riscv.h @@ -7,6 +7,11 @@ #ifndef _NOLIBC_ARCH_RISCV_H #define _NOLIBC_ARCH_RISCV_H =20 +#if __riscv_xlen =3D=3D 32 +#define NOLIBC_ARCH_ELF32 +#endif +#define NOLIBC_ARCH_HAS_RELOC + #include "compiler.h" #include "crt.h" =20 @@ -140,6 +145,19 @@ }) =20 #ifndef NOLIBC_NO_RUNTIME +static int __relocate_rela(unsigned long base, elf_rela *entry) +{ + switch (elf_r_type(entry->r_info)) { + case R_RISCV_RELATIVE: + __relocate_rela_relative(base, entry); + break; + default: + return -1; + } + + return 0; +} + /* startup code */ void __attribute__((weak, noreturn)) __nolibc_entrypoint __no_stack_protec= tor _start(void) { --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EB43334106D for ; Sat, 31 Jan 2026 07:44:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845497; cv=none; b=hm8UdNyKJ4DYnQM6P+EQs5UhL0CoDE5BAk0vchZ+i545vLVVWpUr4qfQLKb2n42PzSEIDwkfaBa5xV3dSg2kGZIO9LTJZpXxI3sUPTiX32Bo9xy0W2y7GOK8NUOjM/Ilqbynzaxr72AxdhLeJcp5U0E7RKUehWuDvmdvhXtERX4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845497; c=relaxed/simple; bh=2drNagYZn8sXSOhnFoDR5bZ17WlMszbj62j7wXdpzLA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fy5//RApQLiVSr9xd1itEI7JJWqKkQXqYOiv32lPTW5Mtab6ivpRaATYCM4fxeRRFSUc7XERLgf/+imOT3PQsNsiCepdLC9/1UtEDEmgt/eVR8prbmcOFVXFXC7r1iqMF3xQQ/EU5x1qLpmhmQfj9AIBMkEQ9lkilio5DC67poY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=pFKUXbM6; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="pFKUXbM6" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-c2af7d09533so1789485a12.1 for ; Fri, 30 Jan 2026 23:44:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845495; x=1770450295; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Dwe6qAYf6eb5SHIHBnic/5w5omJ38zNZIf8veh5Ymg4=; b=pFKUXbM6KDOTyl3bEPUqyDPLlNikpzX9jDZJrifqI+xQaXIyPL1dTFY1pP3i2EIiM4 H74Me7OeVMwE9saclyA2FjmsRJhUcxYd4qvc7IygF0W+XI/lfdXfYgteAbJBE/AdBeCa /Ibv8uljhdvppU1NO7uUh3lYvB+kFWWhfdmyc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845495; x=1770450295; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Dwe6qAYf6eb5SHIHBnic/5w5omJ38zNZIf8veh5Ymg4=; b=oEVKRXgd9eKrcq6/uC494xMV6Eo+Epcwc8PK/FS7RY24F3Q/cqpTZHCUDYoCS20oOD O1jdH8CXnskiR0xtpPj/QJ4YXXppQn3pOe+dxtyyxWIc+S/iSppDZ8tS4qPBI7v0LkB+ ZkaOXPBACHr2zBu+Z74k8xxQqRlC0O8VmOm9lV6QIt3Cq/N+EEGq3YNWz0mSqUTZ77C5 LvEWtoe4LEliSwlzURiHBhKhV2sLh3AP0tM6HITy/xq/WXjGbP8nJ4aCCc67xtLfOnhs yqvbzHov/Bo9gXrWY+rOBHajpHVNxxv2WKDeqfRJx9qyXkjj9OPs5AZDjYBCsoJSh+P/ VfSg== X-Forwarded-Encrypted: i=1; AJvYcCVErLTESeRGXKK68WxazZ1+gpdHMd6atZSmWiIqVIYbnePA51Yo1j9m9i+CVwJdt7yV7j9nZ7pGG6qqgZE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0SRt99s2DGDBhI1/48eGff7gweCBTJxTPpn+3LcK+KFUEuhJR 47I+xhYsm+frAtkJja3KmRuKg27y8+7sVWY3Hmnya27OopH/GsUQkukji5r4eUk4f20= X-Gm-Gg: AZuq6aLXy+hV8V1ObpI2LSYJhL9dlIKUeIOkQ2Brcn2aclUU4nnE7QtJ89rcPC8y4ne ayM4x2AroozOFBjSkfx7+ftgvJ93TxEIjMGzXd1PxnJ0Ev8et4bXno3+RgoQsNx1gOTbHEvX7g0 yPTZA8RAiWoNKmZLsDRbm4P8DB4uODP6K8rUvU1nEPHtTXWyZtvrtYz50wyULQGcLuLnSkW2pR8 gTWAQX21TKGXpCmtAhpw8l0cwBpjXZNv0gjJtRquGSFNzJLgGQx6MfEu069N4vCcJsCdZ14q/Op zDkvypwflj7X1hlZq9lWqx1U4QGjy5g3U0UiWWkeNZFknqTrJ7v6Jx4cjyJhvMEj4aj/61b4PD1 rEHrM79hXPEQUOXrVtbLeqblwXfrrhEnfqhh6ZprXF1y/3r842CH6KdjxX6rKhV2uLaXvpsCFk9 Qp5vUUEBM9cC3vawdaYJKUnyF6xboYW11+mfH6AGURNgBI/knAJl0hgU9vl6gcQ1JkObjVamhac 4za X-Received: by 2002:a05:6a20:6a0c:b0:390:ca32:da2c with SMTP id adf61e73a8af0-392e0054779mr5605198637.24.1769845495368; Fri, 30 Jan 2026 23:44:55 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:55 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 7/9] tools/nolibc: arm: Add relocation support Date: Sat, 31 Jan 2026 16:44:38 +0900 Message-ID: <20260131074440.732588-8-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add relocation support for arm. Signed-off-by: Daniel Palmer --- tools/include/nolibc/arch-arm.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/include/nolibc/arch-arm.h b/tools/include/nolibc/arch-ar= m.h index 251c42579028..7f69761eeab1 100644 --- a/tools/include/nolibc/arch-arm.h +++ b/tools/include/nolibc/arch-arm.h @@ -7,6 +7,10 @@ #ifndef _NOLIBC_ARCH_ARM_H #define _NOLIBC_ARCH_ARM_H =20 +#define NOLIBC_ARCH_HAS_RELOC +#define NOLIBC_ARCH_ELF32 +#define NOLIBC_ARCH_ELF_REL + #include "compiler.h" #include "crt.h" =20 @@ -185,6 +189,19 @@ }) =20 #ifndef NOLIBC_NO_RUNTIME +static int __relocate_rel(unsigned long base, elf_rel *entry) +{ + switch (elf_r_type(entry->r_info)) { + case R_ARM_RELATIVE: + __relocate_rel_relative(base, entry); + break; + default: + return -1; + } + + return 0; +} + /* startup code */ void __attribute__((weak, noreturn)) __nolibc_entrypoint __no_stack_protec= tor _start(void) { --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8D89C344052 for ; Sat, 31 Jan 2026 07:44:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845498; cv=none; b=GspybBHr3BLJAf7de0UQTUKv83PWrzKf3+9S0PXamHoFQlCWFCgIPzB8xQY1BguwFkAU5k2eSWT0ZoZz20PLbxp07IJLnjQTko/hcKWkpED7nfNx5eXoh+kiCYEex8EeyIjnXHcmxsSafer01eimLl+rsF07YPt04Edh83xtFCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845498; c=relaxed/simple; bh=kZc/LHINNlskIjqK/Ezt0wdgB6dmXTDesKjw7YYNfKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lFVJBfaT2HvSnIJYEpU2tSr0R1B090dOjC+NAUn+4IyHvUfYgMTixaSFjKKVwsi1H85AcAthWFPM+OgRuJo00cK9zJOIzXkusuWkL1vsFf4vVZqoe6FSJ1Jgta9FB21JbuKoGf7UD1tKu3Y0SMvpdMMux9xZeqEWJzvsrrC6Hj8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=FHEPxSHK; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="FHEPxSHK" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-82310b74496so1702598b3a.3 for ; Fri, 30 Jan 2026 23:44:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845497; x=1770450297; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nMHV7n3E7WwDamOikF+MO/K8LzPwGrACYORp1duWaic=; b=FHEPxSHKBi/bHRQQdyhXvBdEJ5/WPGt+ABtdHILFIqBuM3vJ8msnZsEy4ACzFYTm3F X1XEW8miUY6velrs47DTgcntFBKiqsnd94w5HHnGDM/gVd4/qn5Wxx1JCr1aqVgKDycw aDvo+6HkSPc08njbJ0Hi9zbrC8OPAN9K9pRJs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845497; x=1770450297; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=nMHV7n3E7WwDamOikF+MO/K8LzPwGrACYORp1duWaic=; b=KJmAymAGw8CydUs6iamheBT8gxq0H7dekGcxvTv7Atv2o1g1agAkMwqbj0J6NVCnV4 /BWfrK+sMSzip4HYhR33m8CWWvKU5Xza6nqdAOJmZ14/law8DUIjGcr/NNnrcfiafWUN SbZnpOCqBPJu/tJ+7TDl6IX7R8VLZ1nytkCVOZTOMhANyraZNq52D+aVpyASJ/ENIth9 zDsyCKsmxG3DnTFirI9+5OfjMusT3MHtZ1CtVXTB8vVfJI7i4YFDRh0e6vhAmUkMVtEe 7E5pVqCs+KKEFRz3nuZZmDXlxFH83HhG6YRvrSTFbkFJSJn3Sw5Xr9i+SxVJOiWAeuyJ 7knQ== X-Forwarded-Encrypted: i=1; AJvYcCWD2DQIOrzozUzgSAJvcG7WCvnZcUYdU+6hI/DZJL/WWxPYeFfy5M5MEEv43THnzQH+bWob6gwfeIGVSDU=@vger.kernel.org X-Gm-Message-State: AOJu0YzBSgy4mGC9T+W0yKn84re0T03zjF/1Qt4x/1ePSxgqKCe6c5+n VsTrub+czlULSggI+AjMiZEr5gLG9r55y6JQV9OiEDC/FXA4TbZyHEhxwqKdKc6s2CU= X-Gm-Gg: AZuq6aK1GJjnlzwSf7xH5SDvH/jWvVlrLJ4+0m/xbocCcb5wj4pV8H+gzroz60dYDM7 yDNMKqYOKBxM/s/gHH52Dq0k4RXEqZhRrPb1gFRoDO9+BklOS867UPZw20t2uLlSXUs5261hAzv +hPWw4NpLaQFuMjswi5fzRznJ58bxa7G77bMpo72bWlH1jNwqSmu8rZa6ATWStCko1d5i7UevXt sUmOzkdEdyyRaSBWdlv6IOh284M1BdAA4KSFKvqQo3XqUVmQzH2X4vEgIgPjm6h3+rIwAfk9A4a yk801DQWwaoKF13LYUwwWUyccHqkyBdmWMGz0wMCoAY7qFWiwMXTzlFYAE01VpmLlWyvGQ+ObRe 7taJdnFmM8ZMkD432PGeSVluAObVVdTar5d9YJ9x2VyGBliwaWQd1OuJCjzJhWCZPLUQhtQfk5+ RPqOvQqYf+aHKZpkFARYLfMGqFSPW/EdE9UcZ+HPo6y/zWAYhqioiKpjJ3Zh3CI4pkwEnqqTE8s CodexaG5YPar50= X-Received: by 2002:a05:6a21:a98:b0:38f:df47:87b7 with SMTP id adf61e73a8af0-392e0050b35mr6127469637.21.1769845496988; Fri, 30 Jan 2026 23:44:56 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:56 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 8/9] selftests/nolibc: Add option for building with -static-pie Date: Sat, 31 Jan 2026 16:44:39 +0900 Message-ID: <20260131074440.732588-9-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow the tests to build with -static-pie instead of -static to test the self relocation code works. Note: This doesn't work 100% correctly. For x86_64 I can see the test binary is static or static-pie depending on if -static or -static-pie is used but for m68k it's always static and I had to hack in the workaround. I have somehow got the tests to seem to produce static PIE binaries when requested, and regular static ones when not but its a mess and this can't be used as-is. Signed-off-by: Daniel Palmer --- tools/testing/selftests/nolibc/Makefile | 2 +- tools/testing/selftests/nolibc/Makefile.nolibc | 8 ++++---- tools/testing/selftests/nolibc/run-tests.sh | 10 +++++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selfte= sts/nolibc/Makefile index 40f5c2908dda..5d5c3231cc19 100644 --- a/tools/testing/selftests/nolibc/Makefile +++ b/tools/testing/selftests/nolibc/Makefile @@ -9,7 +9,7 @@ cc-option =3D $(call __cc-option, $(CC),,$(1),$(2)) =20 include Makefile.include =20 -CFLAGS =3D -nostdlib -nostdinc -static \ +CFLAGS =3D -nostdlib -nostdinc \ -isystem $(top_srcdir)/tools/include/nolibc -isystem $(top_srcdir)/usr/i= nclude \ $(CFLAGS_NOLIBC_TEST) =20 diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing= /selftests/nolibc/Makefile.nolibc index f9d43cbdc894..c55f4c17e06d 100644 --- a/tools/testing/selftests/nolibc/Makefile.nolibc +++ b/tools/testing/selftests/nolibc/Makefile.nolibc @@ -304,12 +304,12 @@ sysroot/$(ARCH)/include: =20 ifneq ($(NOLIBC_SYSROOT),0) nolibc-test: nolibc-test.c nolibc-test-linkage.c sysroot/$(ARCH)/include - $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ - -nostdlib -nostdinc -static -Isysroot/$(ARCH)/include nolibc-test.c nol= ibc-test-linkage.c $(LIBGCC) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ + -nostdlib -nostdinc -Isysroot/$(ARCH)/include nolibc-test.c nolibc-test= -linkage.c $(LIBGCC) else nolibc-test: nolibc-test.c nolibc-test-linkage.c - $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ - -nostdlib -static -include $(srctree)/tools/include/nolibc/nolibc.h nol= ibc-test.c nolibc-test-linkage.c $(LIBGCC) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ + -nostdlib -include $(srctree)/tools/include/nolibc/nolibc.h nolibc-test= .c nolibc-test-linkage.c $(LIBGCC) endif =20 libc-test: nolibc-test.c nolibc-test-linkage.c diff --git a/tools/testing/selftests/nolibc/run-tests.sh b/tools/testing/se= lftests/nolibc/run-tests.sh index 3917cfb8fdc4..12b4774a77d8 100755 --- a/tools/testing/selftests/nolibc/run-tests.sh +++ b/tools/testing/selftests/nolibc/run-tests.sh @@ -16,6 +16,7 @@ build_location=3D"$(realpath "${cache_dir}"/nolibc-tests/= )" perform_download=3D0 test_mode=3Dsystem werror=3D1 +staticpie=3D0 llvm=3D all_archs=3D( i386 x86_64 x32 @@ -31,7 +32,7 @@ all_archs=3D( ) archs=3D"${all_archs[@]}" =20 -TEMP=3D$(getopt -o 'j:d:c:b:a:m:pelh' -n "$0" -- "$@") +TEMP=3D$(getopt -o 'j:d:c:b:a:m:peslh' -n "$0" -- "$@") =20 eval set -- "$TEMP" unset TEMP @@ -55,6 +56,7 @@ Options: -b [DIR] Build location (default: ${build_location}) -m [MODE] Test mode user/system (default: ${test_mode}) -e Disable -Werror + -s Enable static PIE (default: ${staticpie}) -l Build with LLVM/clang EOF } @@ -85,6 +87,9 @@ while true; do '-e') werror=3D0 shift; continue ;; + '-s') + staticpie=3D1 + shift; continue ;; '-l') llvm=3D1 shift; continue ;; @@ -171,6 +176,9 @@ test_arch() { if [ "$werror" -ne 0 ]; then CFLAGS_EXTRA=3D"$CFLAGS_EXTRA -Werror -Wl,--fatal-warnings" fi + if [ "$staticpie" -ne 0 ]; then + CFLAGS_EXTRA=3D"$CFLAGS_EXTRA -ggdb -fPIE -pie -Wl,--no-dynamic-linker -= Wl,-ztext -Wl,-zseparate-code" + fi MAKE=3D(make -f Makefile.nolibc -j"${nproc}" XARCH=3D"${arch}" CROSS_COMP= ILE=3D"${cross_compile}" LLVM=3D"${llvm}" O=3D"${build_dir}") =20 case "$test_mode" in --=20 2.51.0 From nobody Mon Feb 9 01:45:37 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 155AC345CA5 for ; Sat, 31 Jan 2026 07:44:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845500; cv=none; b=HMsiUE4RwPYaALL8fVxNf3q2faOrWNN7JFLMuqmm+e55wR0Jb4k9TJfouZT6xbm98DlEDqqmFawPQboilQhIiK+w2Ky2tWUyM48PldPNTkGLMsqtVJMcBgH7R0d/wv9koua4TQ+zT+7LnPoNxgt0AgXZxfWgwBB2C+IEZ5dyo1E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769845500; c=relaxed/simple; bh=7AsebPbsoJ1n8ogugk+0wbzHaQkYT+R1eUgHnGZxgA0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZRHLIom0XOzUtAyzRNHtq4NN6RKbFNjfXON9ocRYsEMM6c/kKH7dpGysfHvb3sdt8KJNBfUFLtKg32zs75yNbyEmI7sqHmTqPYVcgVoS+o7hsklFhBDxBwcfCy115z6PSMLs7yNxEj/skWEJNU7p4AJwIjZPzbselF6YAupDurE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b=iLRKMK3h; arc=none smtp.client-ip=209.85.210.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thingy.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=thingy.jp header.i=@thingy.jp header.b="iLRKMK3h" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-823c56765fdso183077b3a.1 for ; Fri, 30 Jan 2026 23:44:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thingy.jp; s=google; t=1769845498; x=1770450298; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7OxLiDn3ydt/OQ4/akG3ltMv8RaV7umJ/M8GjRm1Ndw=; b=iLRKMK3hZsjT6MqTq25BdwDsmWASkLPm0Ft5Qntgn/9gNJa2GBrDRbsbcY0CxixO0T Q2mm1uOFD5QJ4e3wz5O4AyHZwzwxC+BxKfWpYc6hzCqtGled9DI9w1SND7NkegPcoFXq oXuAsbOtjiTRjl0++k2I0IjN4BdPyK2ENaf8s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769845498; x=1770450298; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7OxLiDn3ydt/OQ4/akG3ltMv8RaV7umJ/M8GjRm1Ndw=; b=vNLaW6QlOmRUjPRn3+72YAG9LDHfUTDpVGfMzy2V2kCN0FUg2fstVwqDKbASGIQ32c SgRUZQP3PwCq0rw3unVtNhT/IetXVvJJJrT5V6kQy3tX0QlGnIIJdOCKwmDCut5jVjNg nhE4dnuWkg+JCWEB/g/MA7uIP0QeEpVu9YcGG1MWMUQ208V0mPODMz3P2p0ShzpX6Goh wioLJ4enQHILvOqn76DNcErVHm5j7RcHrfALVSXbVs0i63F5u/TAQ6biE4U696mSIWwt NIvsybhKcveMCjSZg/TjtWsvHwutDy+S5Hw1duoDyjcsX5CVD9gyjRTFZe4hS9U3mE9A dJXA== X-Forwarded-Encrypted: i=1; AJvYcCUb84XDrlSv7umrM5sYREiyB7FzJR9ANUaeg/T0fiNDwn2DoariK8+SE3764UssTxh8C3p4HTSgzCuY8/o=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/y7dXb6juNlsVxb7EYpteU2/LNznDVP4bUBGRDw5QAtSNMgV9 CUwIZUjwga3rzT1LWEErg6uV6tgOVCLTQq/nCdl4IQm6u4eYQceSrKM/AOGIUoS50no= X-Gm-Gg: AZuq6aKX4rfSF/heaow6EuYIKLlAhH+5ieFrVHohN/roNVYC7XpsKCll8BHdatJQdrD GyOTDsbo92m/wfaOKm6LSiluNOgzt+WaEt68HLv0g9woomHoz3+iXPaaJoQmhp3NoYwtaP/4P9N GEB3ktLOdKG+6gbz1T8jhMFdrL0jz1vqUxmwW6HmSu7gbfj1eBN+IeA/zeupcKskBZ3bzbfeIU/ v1/gc6BLlwwEilpwNLqLHfYCIOSd6welN8AJqLVTCkPgUxtAia7qWwUtzODTj9hd65ylDB3Y756 zm8CbCSq1TSdg2VzrlfD7D4Z1x/AZmvHVKEuyn99KhxW/Y963RORIRwPz3BWkCLoW1zgY3GwrEZ wuV3Z27mFmFqEdfbcOSnuxgzObiP9BfFumciPLJ/5uOXsyeTMzTN67cmOhU9uqxDmDPNZVaNmIv EVC+B2jmns/3ggt/9yT8bVRBICuZRJVMzZ0KvgOIuC9T7V+vQECtbn0l/HNz5khZt0TUi7hSIjH nRf X-Received: by 2002:a05:6a21:3990:b0:38d:e87c:48b0 with SMTP id adf61e73a8af0-392dffe916cmr4633375637.13.1769845498466; Fri, 30 Jan 2026 23:44:58 -0800 (PST) Received: from kinako.work.home.arpa (p1490223-ipxg00b01sizuokaden.shizuoka.ocn.ne.jp. [153.223.134.223]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-c642a9f539dsm8866928a12.26.2026.01.30.23.44.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Jan 2026 23:44:58 -0800 (PST) From: Daniel Palmer To: linux@weissschuh.net, w@1wt.eu Cc: kees@kernel.org, linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 9/9] fs/binfmt_elf_fdpic: Reflect that PIE binaries also work in KConfig help Date: Sat, 31 Jan 2026 16:44:40 +0900 Message-ID: <20260131074440.732588-10-daniel@thingy.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260131074440.732588-1-daniel@thingy.jp> References: <20260131074440.732588-1-daniel@thingy.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Since commit 1bde925d2354 ("fs/binfmt_elf_fdpic.c: provide NOMMU loader for= regular ELF binaries") it has been possible to load some normal ELF binaries on nommu but it wasn't documented in the help. Since nolibc can generate static-pie binaries that work with this loader document that normal ELFs can work as long as they are PIE and you have a linker and that nolibc can also generate static-PIE binaries that can load without any assitance. Signed-off-by: Daniel Palmer --- fs/Kconfig.binfmt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt index 1949e25c7741..71573bfd32ac 100644 --- a/fs/Kconfig.binfmt +++ b/fs/Kconfig.binfmt @@ -69,6 +69,16 @@ config BINFMT_ELF_FDPIC =20 It is also possible to run FDPIC ELF binaries on MMU linux also. =20 + On nommu systems this can also load normal ELF binaries as long as + the binary is linked as PIE. If the binary is not static PIE, does not + include it's own relocation code, this requires a linker like uldso to + be present and set as the interpreter. + + nolibc included in the kernel source can create static-PIE binaries + by including relocation code and the resulting binaries run on MMU + systems with the normal ELF loader and on nommu systems with this + loader. + config ELFCORE bool help --=20 2.51.0