[PATCH] libc/arm: add missing .cfi_sections

Clément Chigot chigot@adacore.com
Mon Jun 10 12:37:57 GMT 2024


The modifications added by the series "M-profile PACBTI-enablement"
(see 9d6b00511e50a54d2472d11f75f7c0f2b4a98b24) have introduced a couple
of .cfi_* instructions.

Like for e6459123e497409a9e3d845c39829a9602ba55a4, these instructions
create object files which contain .eh_frame sections.  However, ARM uses
its own unwind info format, not .eh_frame, which is generated by
ARM-specific directives, not .cfi_*. The .eh_frame sections are useless,
but also not removed by strip and may be harmful with some linker
scripts.

Adding ".cfi_sections .debug_frame" (as in glibc) moves the generated
directives towards .debug_frame instead of .eh_frame. Making them easier
to handle.

            * libc/machine/arm/aeabi_memmove-thumb2.S: Use .cfi_sections
            .debug_frame.
            * libc/machine/arm/aeabi_memset-thumb2.S: Likewise.
            * libc/machine/arm/memchr.S: Likewise.
            * libc/machine/arm/memcpy-armv7m.S: Likewise.
            * libc/machine/arm/setjmp.S: Likewise.
            * libc/machine/arm/strlen-armv7.S: Likewise.
            * libc/machine/arm/strlen-thumb2-Os.S: Likewise.
---
 newlib/libc/machine/arm/aeabi_memmove-thumb2.S | 1 +
 newlib/libc/machine/arm/aeabi_memset-thumb2.S  | 1 +
 newlib/libc/machine/arm/memchr.S               | 1 +
 newlib/libc/machine/arm/memcpy-armv7m.S        | 1 +
 newlib/libc/machine/arm/setjmp.S               | 1 +
 newlib/libc/machine/arm/strlen-armv7.S         | 1 +
 newlib/libc/machine/arm/strlen-thumb2-Os.S     | 1 +
 7 files changed, 7 insertions(+)

diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
index 20ca993e5..3018e7412 100644
--- a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
+++ b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S
@@ -36,6 +36,7 @@
 	ASM_ALIAS __aeabi_memmove8 __aeabi_memmove
 __aeabi_memmove:
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	prologue 4
 	cmp	r0, r1
diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb2.S b/newlib/libc/machine/arm/aeabi_memset-thumb2.S
index 6b77d3820..a1b8f0532 100644
--- a/newlib/libc/machine/arm/aeabi_memset-thumb2.S
+++ b/newlib/libc/machine/arm/aeabi_memset-thumb2.S
@@ -33,6 +33,7 @@
 	.global __aeabi_memset
 	.type	__aeabi_memset, %function
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	ASM_ALIAS __aeabi_memset4 __aeabi_memset
 	ASM_ALIAS __aeabi_memset8 __aeabi_memset
diff --git a/newlib/libc/machine/arm/memchr.S b/newlib/libc/machine/arm/memchr.S
index d13ef8d65..f0b3650aa 100644
--- a/newlib/libc/machine/arm/memchr.S
+++ b/newlib/libc/machine/arm/memchr.S
@@ -293,6 +293,7 @@ memchr:
 	.global memchr
 	.type memchr,%function
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 memchr:
 	@ r0 = start of memory to scan
diff --git a/newlib/libc/machine/arm/memcpy-armv7m.S b/newlib/libc/machine/arm/memcpy-armv7m.S
index ec1ad6485..13ffdb343 100644
--- a/newlib/libc/machine/arm/memcpy-armv7m.S
+++ b/newlib/libc/machine/arm/memcpy-armv7m.S
@@ -88,6 +88,7 @@
 	.thumb
 	.thumb_func
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	.type	memcpy, %function
 memcpy:
diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S
index 5e5952296..0070f17cd 100644
--- a/newlib/libc/machine/arm/setjmp.S
+++ b/newlib/libc/machine/arm/setjmp.S
@@ -183,6 +183,7 @@ SYM (.arm_start_of.\name):
 	MODE
 	.globl SYM (\name)
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	TYPE (\name)
 SYM (\name):
diff --git a/newlib/libc/machine/arm/strlen-armv7.S b/newlib/libc/machine/arm/strlen-armv7.S
index 6aa122c07..1c2b5c532 100644
--- a/newlib/libc/machine/arm/strlen-armv7.S
+++ b/newlib/libc/machine/arm/strlen-armv7.S
@@ -106,6 +106,7 @@
 
 def_fn	strlen p2align=6
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	prologue 4 5 push_ip=HAVE_PAC_LEAF
 	pld	[srcin, #0]
diff --git a/newlib/libc/machine/arm/strlen-thumb2-Os.S b/newlib/libc/machine/arm/strlen-thumb2-Os.S
index 4adbc61d2..b8a615a15 100644
--- a/newlib/libc/machine/arm/strlen-thumb2-Os.S
+++ b/newlib/libc/machine/arm/strlen-thumb2-Os.S
@@ -47,6 +47,7 @@
 
 def_fn	strlen p2align=1
 	.fnstart
+	.cfi_sections .debug_frame
 	.cfi_startproc
 	prologue
 	mov     r3, r0
-- 
2.25.1



More information about the Newlib mailing list