[PATCH] libc/arm: add missing .cfi_sections

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Tue Jul 9 15:37:14 GMT 2024


I've pushed this.  Sorry for the delay: there were some things I needed to check and it then fell off my radar.

R.

On 09/07/2024 11:49, Corinna Vinschen wrote:
> @Richard, any input from arm.com?
> 
> 
> Thanks,
> Corinna
> 
> 
> On Jul  4 13:44, Clément Chigot wrote:
>> On Mon, Jun 10, 2024 at 2:38 PM Clément Chigot <chigot@adacore.com> wrote:
>>>
>>> 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.
>>
>> Gentle ping
>>
>>> ---
>>>  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