From patchwork Wed May 29 18:22:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 1941446 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=buildroot.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=buildroot-bounces@buildroot.org; receiver=patchwork.ozlabs.org) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VqHnl0T0Qz20Pc for ; Thu, 30 May 2024 04:23:39 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 566026001B; Wed, 29 May 2024 18:23:37 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id IAsgAiWBDtmP; Wed, 29 May 2024 18:23:36 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.166.34; helo=ash.osuosl.org; envelope-from=buildroot-bounces@buildroot.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 2DE8C60AF7 Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp3.osuosl.org (Postfix) with ESMTP id 2DE8C60AF7; Wed, 29 May 2024 18:23:36 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id 5E3E31D393B for ; Wed, 29 May 2024 18:23:34 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5764C60B5A for ; Wed, 29 May 2024 18:23:34 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id MHRlarOkdaiw for ; Wed, 29 May 2024 18:23:33 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=212.227.17.22; helo=mout.gmx.net; envelope-from=j.neuschaefer@gmx.net; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org A962C60B53 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org A962C60B53 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by smtp3.osuosl.org (Postfix) with ESMTPS id A962C60B53 for ; Wed, 29 May 2024 18:23:32 +0000 (UTC) X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from probook ([151.216.80.169]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MQv8x-1roNb43uAZ-00O0KX; Wed, 29 May 2024 20:23:30 +0200 Date: Wed, 29 May 2024 20:22:57 +0200 MIME-Version: 1.0 Message-Id: <20240529-ztext-v2-2-82985032f169@gmx.net> References: <20240529-ztext-v2-0-82985032f169@gmx.net> In-Reply-To: <20240529-ztext-v2-0-82985032f169@gmx.net> To: buildroot@buildroot.org X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717006985; l=6263; i=j.neuschaefer@gmx.net; s=20240329; h=from:subject:message-id; bh=Poe3dIvD/jOSVufPShcQdcrPKgrcv/o0Rf+fPMxDAhQ=; b=ezdurvGI7L2tTsLnSXZk0+SP4Ku96PlGWczAxXqL7JdIMT77hkqNEJJA/uTHPt/p2yxnUGlXt g30afWLX9uxCHFUmcSK3TMGm1KHYozdCt86ggmPMpm2wo8ag0f5aEnm X-Developer-Key: i=j.neuschaefer@gmx.net; a=ed25519; pk=NIe0bK42wNaX/C4bi6ezm7NJK0IQE+8MKBm7igFMIS4= X-Provags-ID: V03:K1:3dYRkh+HkzGOPi9H8OTlagR9h7r5CcRBjVy4bW3eDoTUglZJNPP SVGjWtOettD2Dg7YTAdIl6Sb+t+QHA9mI2OgKdzT/iYTayOikBzJ/YYKK6oZyR9QMULwHSz DvmMjN1nNt3n4IlwRz+UBEZBTX8tfomQK1+R1LtiknENnGFkM5xxTPrH9dBRRYgdusBpd4m arJs5escm+4XTDV3GyneA== UI-OutboundReport: notjunk:1;M01:P0:O+qyUZOmI60=;fjqpySCsfh9TSmu1xsjjrDQFZ9u qCyDOnrz+4JvXR4YJh82clvvIOtJ+iwJ/DgW2HmGaFICJ+OJgj7VyiQ4+73aJMIZZyaxDAeDW sPMowavXR4M+WumKZoEms192ltYxZNCACJHWX4Ba/IUAs+1j9YEU2DRU9oeNsizqdc5/lovjQ OhFYExgTDBzldaeoZAxX/QSa71QE36VuEqRTMIGQXRuIo3/IhC9teFFyD+dmosCvYhD/SlwgY pdRqgTDzedKD1Px/eRpHBo0frz6x4cKVMkzAjVmyqbica9Qe9LlIMIodWvuZT47ZD2w241OaH XT1DemkCIMHccu+sjnedGw0/vOSmd+NcK6T3fK5Jh3Y7nPEAc0U+QYCDUCCu1PcKmOL7aYzdM yKN0l35XRahXCcS2jqs90pHLdaYLWbNYjETXrF5Bx5sojlU/auUbglENKaXgsBMS7k5ujzekl 0d74CXYwdJq6X4vG4EfX+T1d+vdB2n8E8Qjk6ubquvmKCmPKSSwTrvivET9UWGQEPJ26dAJh8 lIM2Guir90Qv9fmOhGLIJqF5dE3aXBp5vxOsGDnq5P13lAxWeeNHmyubezHCIoLvFEikqP1ck S6zNDuw/P/O/AT0EPBDX3jtD2SmH1XVNiy9VZc5uLeAPBlH2KUrw7Eya1l1wHK8zIyiONc/EV KdY8KJ/C6muAC3sx15bu2YouJ1fiXjNBrAUmerMzJh4foFcRgExt+PTLKH/+HYON5xrgD4ejb BiHHGWg5q9N36kGC7w95wDSeBVJpAtUeYjaLtHLnUa748jgvRRn9xH1JcxhK3FzM8VE4pEQ8J qCOgVBPllQyR7b9ZjSuCpvpPh6FIBWWI5ZthLFRyY4e9E= X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1717007010; x=1717611810; i=j.neuschaefer@gmx.net; bh=oqtb4fuJQEd6hI9YWD59i29EzPuqPHOpRKUk+wZA52k=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=FLSu5hHOwea2u7Us/vuS4h+WHRLtErvyZpQP+CC/5t4bSlH+iHPz1gJ5Tq1da309 bZbuW5iTxWLAvc3vorKZm14pwwdqSWOgaI1OhS9EW3EbBrC6OcLScExNtrIXYkf2T ObpWl7+hR+3oLQnvBrs09iTh03OZ1ztK5O4YyLJHm0VmSlNzlbsOJekxULDsRano2 0TEhJS7mSx9dHAKUgTYW/v9oXSG5/RRipszQWupgFYF24/kZjWXy7kdQmIGSyvxZM nBLenODnqTw9FjSN3HZVJ+xxLshjX9cZPUcvtcvgFfwTj2LsGa3vZngZAeVLNCF/C rxjc0IGaSsqzCbg/vw== X-Mailman-Original-Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net X-Mailman-Original-Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=gmx.net header.i=j.neuschaefer@gmx.net header.a=rsa-sha256 header.s=s31663417 header.b=FLSu5hHO Subject: [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb X-BeenThere: buildroot@buildroot.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: =?utf-8?q?J=2E_Neusch=C3=A4fer_via_buildroot?= From: =?utf-8?q?J=2E_Neusch=C3=A4fer?= Reply-To: =?utf-8?q?J=2E_Neusch=C3=A4fer?= Cc: =?utf-8?q?J=2E_Neusch=C3=A4fer?= , Thomas Petazzoni Errors-To: buildroot-bounces@buildroot.org Sender: "buildroot" Signed-off-by: J. Neuschäfer --- ...-Make-non-Thumb2-long-jump-workaround-opt.patch | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) -- 2.43.0 diff --git a/package/micropython/0001-py-nlrthumb-Make-non-Thumb2-long-jump-workaround-opt.patch b/package/micropython/0001-py-nlrthumb-Make-non-Thumb2-long-jump-workaround-opt.patch new file mode 100644 index 0000000000..f41c11371a --- /dev/null +++ b/package/micropython/0001-py-nlrthumb-Make-non-Thumb2-long-jump-workaround-opt.patch @@ -0,0 +1,130 @@ +From 7b050b366b7dacfb43779c51702a892d8f1873d0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=2E=20Neusch=C3=A4fer?= +Date: Sun, 2 Apr 2023 19:58:42 +0200 +Subject: [PATCH] py/nlrthumb: Make non-Thumb2 long-jump workaround opt-in. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Although the original motivation given for the workaround[1] is correct, +nlr.o and nlrthumb.o are linked with a small enough distance that the +problem does not occur, and the workaround isn't necessary. The distance +between the b instruction and its target (nlr_push_tail) is just 64 +bytes[2], well within the ±2046 byte range addressable by an +unconditional branch instruction in Thumb mode. + +The workaround induces a relocation in the text section (textrel), which +isn't supported everywhere, notably not on musl-libc[3], where it causes +a crash on start-up. With the workaround removed, micropython works on an +ARMv5T Linux system built with musl-libc. + +This commit changes nlrthumb.c to use a direct jump by default, but +leaves the long jump workaround as an option for those cases where it's +actually needed. + +[1]: commit dd376a239dc4f47b0ee7866810fcda151f3cf6dd + +Author: Damien George +Date: Fri Sep 1 15:25:29 2017 +1000 + + py/nlrthumb: Get working again on standard Thumb arch (ie not Thumb2). + + "b" on Thumb might not be long enough for the jump to nlr_push_tail so + it must be done indirectly. + +[2]: Excerpt from objdump -d micropython: + +000095c4 : + 95c4: b510 push {r4, lr} + 95c6: 0004 movs r4, r0 + 95c8: f02d fd42 bl 37050 + 95cc: 6943 ldr r3, [r0, #20] + 95ce: 6023 str r3, [r4, #0] + 95d0: 6144 str r4, [r0, #20] + 95d2: 2000 movs r0, #0 + 95d4: bd10 pop {r4, pc} + +000095d6 : + 95d6: b510 push {r4, lr} + 95d8: f02d fd3a bl 37050 + 95dc: 6943 ldr r3, [r0, #20] + 95de: 681b ldr r3, [r3, #0] + 95e0: 6143 str r3, [r0, #20] + 95e2: bd10 pop {r4, pc} + +000095e4 : + 95e4: 60c4 str r4, [r0, #12] + 95e6: 6105 str r5, [r0, #16] + 95e8: 6146 str r6, [r0, #20] + 95ea: 6187 str r7, [r0, #24] + 95ec: 4641 mov r1, r8 + 95ee: 61c1 str r1, [r0, #28] + 95f0: 4649 mov r1, r9 + 95f2: 6201 str r1, [r0, #32] + 95f4: 4651 mov r1, sl + 95f6: 6241 str r1, [r0, #36] @ 0x24 + 95f8: 4659 mov r1, fp + 95fa: 6281 str r1, [r0, #40] @ 0x28 + 95fc: 4669 mov r1, sp + 95fe: 62c1 str r1, [r0, #44] @ 0x2c + 9600: 4671 mov r1, lr + 9602: 6081 str r1, [r0, #8] + 9604: e7de b.n 95c4 + +[3]: https://www.openwall.com/lists/musl/2020/09/25/4 + +Signed-off-by: J. Neuschäfer +Upstream: https://github.com/micropython/micropython/commit/7b050b366b7dacfb43779c51702a892d8f1873d0 +--- + py/mpconfig.h | 6 ++++++ + py/nlrthumb.c | 10 +++++++++- + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/py/mpconfig.h b/py/mpconfig.h +index af2480266..1aa3e0699 100644 +--- a/py/mpconfig.h ++++ b/py/mpconfig.h +@@ -587,6 +587,12 @@ + /*****************************************************************************/ + /* Python internal features */ + ++// Use a special long jump in nlrthumb.c, which may be necessary if nlr.o and ++// nlrthumb.o are linked far apart from each other. ++#ifndef MICROPY_NLR_THUMB_USE_LONG_JUMP ++#define MICROPY_NLR_THUMB_USE_LONG_JUMP (0) ++#endif ++ + // Whether to enable import of external modules + // When disabled, only importing of built-in modules is supported + // When enabled, a port must implement mp_import_stat (among other things) +diff --git a/py/nlrthumb.c b/py/nlrthumb.c +index a22c5df5b..e7b24f242 100644 +--- a/py/nlrthumb.c ++++ b/py/nlrthumb.c +@@ -38,6 +38,14 @@ + + __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) { + ++ // If you get a linker error here, indicating that a relocation doesn't ++ // fit, try the following (in that order): ++ // ++ // 1. Ensure that nlr.o nlrthumb.o are linked closely together, i.e. ++ // there aren't too many other files between them in the linker list ++ // (PY_CORE_O_BASENAME in py/py.mk) ++ // 2. Set -DMICROPY_NLR_THUMB_USE_LONG_JUMP=1 during the build ++ // + __asm volatile ( + "str r4, [r0, #12] \n" // store r4 into nlr_buf + "str r5, [r0, #16] \n" // store r5 into nlr_buf +@@ -71,7 +79,7 @@ __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) { + "str lr, [r0, #8] \n" // store lr into nlr_buf + #endif + +- #if !defined(__thumb2__) ++ #if MICROPY_NLR_THUMB_USE_LONG_JUMP + "ldr r1, nlr_push_tail_var \n" + "bx r1 \n" // do the rest in C + ".align 2 \n" +-- +2.43.0 +