Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 0/2] Add option to ban textrels
@ 2024-05-29 18:22 J. Neuschäfer via buildroot
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains J. Neuschäfer via buildroot
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb J. Neuschäfer via buildroot
  0 siblings, 2 replies; 9+ messages in thread
From: J. Neuschäfer via buildroot @ 2024-05-29 18:22 UTC (permalink / raw)
  To: buildroot; +Cc: J. Neuschäfer, Thomas Petazzoni

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
---
Changes in v2:
- Slightly different wording
- Enable the option by default on musl toolchains
- Add patch to fix build of micropython

Link to v1:
- https://lore.kernel.org/r/20240419-ztext-v1-1-a8d5c2cfcf57@gmx.net

---
J. Neuschäfer (2):
      Config.in: ban textrels on musl toolchains
      micropython: Add patch to avoid textrel on arm/thumb

 Config.in                                          |  14 +++
 package/Makefile.in                                |   4 +
 ...-Make-non-Thumb2-long-jump-workaround-opt.patch | 130 +++++++++++++++++++++
 3 files changed, 148 insertions(+)
---
base-commit: d506e232e7388e70622a1c1b2a3069367d7b305b
change-id: 20240417-ztext-5accbab61c0a

Best regards,
--
J. Neuschäfer <j.neuschaefer@gmx.net>

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains
  2024-05-29 18:22 [Buildroot] [PATCH v2 0/2] Add option to ban textrels J. Neuschäfer via buildroot
@ 2024-05-29 18:22 ` J. Neuschäfer via buildroot
  2024-06-01 20:59   ` Yann E. MORIN
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb J. Neuschäfer via buildroot
  1 sibling, 1 reply; 9+ messages in thread
From: J. Neuschäfer via buildroot @ 2024-05-29 18:22 UTC (permalink / raw)
  To: buildroot; +Cc: J. Neuschäfer, Thomas Petazzoni

musl-libc doesn't support TEXTRELs[1] and programs with TEXTRELs will
crash on start-up under musl.

This patch forbids the use of TEXTRELs on musl, but adds an option to
either forbid them on other libcs as well, or allow them on musl.

[1]: https://www.openwall.com/lists/musl/2020/09/25/4

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
---

v2:
- slightly different wording
- default to yes on musl toolchains
- fix check-package warnings
- depends on BR2_SHARED_LIBS -> depends on !BR2_STATIC_LIBS
---
 Config.in           | 14 ++++++++++++++
 package/Makefile.in |  4 ++++
 2 files changed, 18 insertions(+)

diff --git a/Config.in b/Config.in
index b5a94325c4..92e89ed32d 100644
--- a/Config.in
+++ b/Config.in
@@ -910,6 +910,20 @@ endchoice
 comment "RELocation Read Only (RELRO) needs shared libraries"
 	depends on !BR2_SHARED_LIBS

+config BR2_LINK_ZTEXT
+	bool "Disallow text section relocations (TEXTRELs)"
+	default BR2_TOOLCHAIN_USES_MUSL
+	depends on !BR2_STATIC_LIBS
+	help
+	  Pass "-z text" to the linker to detect TEXTRELs and throw an
+	  error if they occur.
+
+	  This is recommended when building a system with musl-libc,
+	  because TEXTRELs are not supported on musl-libc's dynamic
+	  loader and will result in a run-time crash:
+
+	    https://www.openwall.com/lists/musl/2020/09/25/4
+
 config BR2_FORTIFY_SOURCE_ARCH_SUPPORTS
 	bool
 	default y
diff --git a/package/Makefile.in b/package/Makefile.in
index f415e55f84..68efd39dba 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -149,6 +149,10 @@ endif

 TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))

+ifeq ($(BR2_LINK_ZTEXT),y)
+TARGET_LDFLAGS += -z text
+endif
+
 # By design, _FORTIFY_SOURCE requires gcc optimization to be enabled.
 # Therefore, we need to pass _FORTIFY_SOURCE and the optimization level
 # through the same mechanism, i.e currently through CFLAGS. Passing

--
2.43.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb
  2024-05-29 18:22 [Buildroot] [PATCH v2 0/2] Add option to ban textrels J. Neuschäfer via buildroot
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains J. Neuschäfer via buildroot
@ 2024-05-29 18:22 ` J. Neuschäfer via buildroot
  2024-06-01 20:51   ` Yann E. MORIN
  2024-06-08 17:01   ` Peter Korsgaard
  1 sibling, 2 replies; 9+ messages in thread
From: J. Neuschäfer via buildroot @ 2024-05-29 18:22 UTC (permalink / raw)
  To: buildroot; +Cc: J. Neuschäfer, Thomas Petazzoni

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
---
 ...-Make-non-Thumb2-long-jump-workaround-opt.patch | 130 +++++++++++++++++++++
 1 file changed, 130 insertions(+)

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?= <j.ne@posteo.net>
+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 <damien.p.george@gmail.com>
+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 <nlr_push_tail>:
+    95c4:       b510            push    {r4, lr}
+    95c6:       0004            movs    r4, r0
+    95c8:       f02d fd42       bl      37050 <mp_thread_get_state>
+    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 <nlr_pop>:
+    95d6:       b510            push    {r4, lr}
+    95d8:       f02d fd3a       bl      37050 <mp_thread_get_state>
+    95dc:       6943            ldr     r3, [r0, #20]
+    95de:       681b            ldr     r3, [r3, #0]
+    95e0:       6143            str     r3, [r0, #20]
+    95e2:       bd10            pop     {r4, pc}
+
+000095e4 <nlr_push>:
+    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 <nlr_push_tail>
+
+[3]: https://www.openwall.com/lists/musl/2020/09/25/4
+
+Signed-off-by: J. Neuschäfer <j.ne@posteo.net>
+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
+

--
2.43.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb J. Neuschäfer via buildroot
@ 2024-06-01 20:51   ` Yann E. MORIN
  2024-06-08 17:01   ` Peter Korsgaard
  1 sibling, 0 replies; 9+ messages in thread
From: Yann E. MORIN @ 2024-06-01 20:51 UTC (permalink / raw)
  To: J. Neuschäfer; +Cc: Thomas Petazzoni, buildroot

J., All,

On 2024-05-29 20:22 +0200, J. Neuschäfer via buildroot spake thusly:
> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  ...-Make-non-Thumb2-long-jump-workaround-opt.patch | 130 +++++++++++++++++++++
>  1 file changed, 130 insertions(+)
> 
> 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?= <j.ne@posteo.net>
> +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 <damien.p.george@gmail.com>
> +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 <nlr_push_tail>:
> +    95c4:       b510            push    {r4, lr}
> +    95c6:       0004            movs    r4, r0
> +    95c8:       f02d fd42       bl      37050 <mp_thread_get_state>
> +    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 <nlr_pop>:
> +    95d6:       b510            push    {r4, lr}
> +    95d8:       f02d fd3a       bl      37050 <mp_thread_get_state>
> +    95dc:       6943            ldr     r3, [r0, #20]
> +    95de:       681b            ldr     r3, [r3, #0]
> +    95e0:       6143            str     r3, [r0, #20]
> +    95e2:       bd10            pop     {r4, pc}
> +
> +000095e4 <nlr_push>:
> +    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 <nlr_push_tail>
> +
> +[3]: https://www.openwall.com/lists/musl/2020/09/25/4
> +
> +Signed-off-by: J. Neuschäfer <j.ne@posteo.net>
> +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
> +
> 
> --
> 2.43.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains J. Neuschäfer via buildroot
@ 2024-06-01 20:59   ` Yann E. MORIN
  2024-06-09 12:54     ` J. Neuschäfer via buildroot
  0 siblings, 1 reply; 9+ messages in thread
From: Yann E. MORIN @ 2024-06-01 20:59 UTC (permalink / raw)
  To: J. Neuschäfer; +Cc: Thomas Petazzoni, buildroot

On 2024-05-29 20:22 +0200, J. Neuschäfer via buildroot spake thusly:
> musl-libc doesn't support TEXTRELs[1] and programs with TEXTRELs will
> crash on start-up under musl.
> 
> This patch forbids the use of TEXTRELs on musl, but adds an option to
> either forbid them on other libcs as well, or allow them on musl.

In your v1, Thomas suggested that textrels be simply always disabled for
musl, because there is no way they can work. Allowing people to enable
them on musl will only make things reak at runtime, rather than at build
time.

I'm on the same page as Thomas here: if textrels are unsupported on
musl, then let's not allow them at all.

> [1]: https://www.openwall.com/lists/musl/2020/09/25/4
> 
> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
> ---
[--SNIP--]
> diff --git a/Config.in b/Config.in
> index b5a94325c4..92e89ed32d 100644
> --- a/Config.in
> +++ b/Config.in
> @@ -910,6 +910,20 @@ endchoice
>  comment "RELocation Read Only (RELRO) needs shared libraries"
>  	depends on !BR2_SHARED_LIBS
> 
> +config BR2_LINK_ZTEXT
> +	bool "Disallow text section relocations (TEXTRELs)"

We prefer positive logic:

    config BR2_LINK_ZTEXT
        bool "Allow text section relocations (TEXTRELs)"
        default y  # Legacy
        depends on !BR2_TOOLCHAIN_USES_MUSL
        depends on !BR2_STATIC_LIBS

and in the .mk:

    ifeq ($(BR2_LINK_ZTEXT),)
    TARGET_LDFLAGS += -z text
    endif

(Note the 'default y': textrels were previously always allowed, so we
want to keep that behaviour by default)

Regards,
Yann E. MORIN.

> +	default BR2_TOOLCHAIN_USES_MUSL
> +	depends on !BR2_STATIC_LIBS
> +	help
> +	  Pass "-z text" to the linker to detect TEXTRELs and throw an
> +	  error if they occur.
> +
> +	  This is recommended when building a system with musl-libc,
> +	  because TEXTRELs are not supported on musl-libc's dynamic
> +	  loader and will result in a run-time crash:
> +
> +	    https://www.openwall.com/lists/musl/2020/09/25/4
> +
>  config BR2_FORTIFY_SOURCE_ARCH_SUPPORTS
>  	bool
>  	default y
> diff --git a/package/Makefile.in b/package/Makefile.in
> index f415e55f84..68efd39dba 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -149,6 +149,10 @@ endif
> 
>  TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))
> 
> +ifeq ($(BR2_LINK_ZTEXT),y)
> +TARGET_LDFLAGS += -z text
> +endif
> +
>  # By design, _FORTIFY_SOURCE requires gcc optimization to be enabled.
>  # Therefore, we need to pass _FORTIFY_SOURCE and the optimization level
>  # through the same mechanism, i.e currently through CFLAGS. Passing
> 
> --
> 2.43.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb
  2024-05-29 18:22 ` [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb J. Neuschäfer via buildroot
  2024-06-01 20:51   ` Yann E. MORIN
@ 2024-06-08 17:01   ` Peter Korsgaard
  2024-06-09  4:12     ` Baruch Siach via buildroot
  1 sibling, 1 reply; 9+ messages in thread
From: Peter Korsgaard @ 2024-06-08 17:01 UTC (permalink / raw)
  To: J. Neuschäfer via buildroot; +Cc: J. Neuschäfer, Thomas Petazzoni

>>>>> "J" == J Neuschäfer via buildroot <buildroot@buildroot.org> writes:

 > Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>

Committed to 2024.02.x, thanks.

-- 
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb
  2024-06-08 17:01   ` Peter Korsgaard
@ 2024-06-09  4:12     ` Baruch Siach via buildroot
  2024-06-09  8:33       ` Peter Korsgaard
  0 siblings, 1 reply; 9+ messages in thread
From: Baruch Siach via buildroot @ 2024-06-09  4:12 UTC (permalink / raw)
  To: Peter Korsgaard
  Cc: J. Neuschäfer, Thomas Petazzoni,
	J. Neuschäfer via buildroot

Hi Peter,

On Sat, Jun 08 2024, Peter Korsgaard wrote:

>>>>>> "J" == J Neuschäfer via buildroot <buildroot@buildroot.org> writes:
>
>  > Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
>
> Committed to 2024.02.x, thanks.

Not in 2024.02.x as of commit ee6694e9704b ("package/libopenssl:
security bump to version 3.2.2").

baruch

-- 
                                                     ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb
  2024-06-09  4:12     ` Baruch Siach via buildroot
@ 2024-06-09  8:33       ` Peter Korsgaard
  0 siblings, 0 replies; 9+ messages in thread
From: Peter Korsgaard @ 2024-06-09  8:33 UTC (permalink / raw)
  To: Baruch Siach
  Cc: J. Neuschäfer, Thomas Petazzoni,
	J. Neuschäfer via buildroot

>>>>> "Baruch" == Baruch Siach <baruch@tkos.co.il> writes:

 > Hi Peter,
 > On Sat, Jun 08 2024, Peter Korsgaard wrote:

 >>>>>>> "J" == J Neuschäfer via buildroot <buildroot@buildroot.org> writes:
 >> 
 >> > Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
 >> 
 >> Committed to 2024.02.x, thanks.

 > Not in 2024.02.x as of commit ee6694e9704b ("package/libopenssl:
 > security bump to version 3.2.2").

Ups, thanks for the heads up - Fixed now.

-- 
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains
  2024-06-01 20:59   ` Yann E. MORIN
@ 2024-06-09 12:54     ` J. Neuschäfer via buildroot
  0 siblings, 0 replies; 9+ messages in thread
From: J. Neuschäfer via buildroot @ 2024-06-09 12:54 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: J. Neuschäfer, Thomas Petazzoni, buildroot

Hello Yann, sorry for the delay,

On Sat, Jun 01, 2024 at 10:59:53PM +0200, Yann E. MORIN wrote:
> On 2024-05-29 20:22 +0200, J. Neuschäfer via buildroot spake thusly:
> > musl-libc doesn't support TEXTRELs[1] and programs with TEXTRELs will
> > crash on start-up under musl.
> >
> > This patch forbids the use of TEXTRELs on musl, but adds an option to
> > either forbid them on other libcs as well, or allow them on musl.
>
> In your v1, Thomas suggested that textrels be simply always disabled for
> musl, because there is no way they can work. Allowing people to enable
> them on musl will only make things reak at runtime, rather than at build
> time.
>
> I'm on the same page as Thomas here: if textrels are unsupported on
> musl, then let's not allow them at all.

Alright, I wasn't fully certain about it, but I'll change the Kconfig
logic accordingly.

>
> > [1]: https://www.openwall.com/lists/musl/2020/09/25/4
> >
> > Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
> > ---
> [--SNIP--]
> > diff --git a/Config.in b/Config.in
> > index b5a94325c4..92e89ed32d 100644
> > --- a/Config.in
> > +++ b/Config.in
> > @@ -910,6 +910,20 @@ endchoice
> >  comment "RELocation Read Only (RELRO) needs shared libraries"
> >  	depends on !BR2_SHARED_LIBS
> >
> > +config BR2_LINK_ZTEXT
> > +	bool "Disallow text section relocations (TEXTRELs)"
>
> We prefer positive logic:
>
>     config BR2_LINK_ZTEXT
>         bool "Allow text section relocations (TEXTRELs)"
>         default y  # Legacy
>         depends on !BR2_TOOLCHAIN_USES_MUSL
>         depends on !BR2_STATIC_LIBS

Good idea, this looks a bit easier to understand.

>
> and in the .mk:
>
>     ifeq ($(BR2_LINK_ZTEXT),)
>     TARGET_LDFLAGS += -z text
>     endif
>
> (Note the 'default y': textrels were previously always allowed, so we
> want to keep that behaviour by default)
>
> Regards,
> Yann E. MORIN.

Thanks for your review!
--jn
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-06-09 12:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-29 18:22 [Buildroot] [PATCH v2 0/2] Add option to ban textrels J. Neuschäfer via buildroot
2024-05-29 18:22 ` [Buildroot] [PATCH v2 1/2] Config.in: ban textrels on musl toolchains J. Neuschäfer via buildroot
2024-06-01 20:59   ` Yann E. MORIN
2024-06-09 12:54     ` J. Neuschäfer via buildroot
2024-05-29 18:22 ` [Buildroot] [PATCH v2 2/2] micropython: Add patch to avoid textrel on arm/thumb J. Neuschäfer via buildroot
2024-06-01 20:51   ` Yann E. MORIN
2024-06-08 17:01   ` Peter Korsgaard
2024-06-09  4:12     ` Baruch Siach via buildroot
2024-06-09  8:33       ` Peter Korsgaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox