Avoid .eh_frame in ARM newlib
Joseph Myers
joseph@codesourcery.com
Wed Nov 11 23:16:00 GMT 2015
ARM newlib has various strcmp implementations that use .cfi_*
directives to generate unwind information.
The effect of this is that the generated objects 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 loaded into memory at runtime.
This patch fixes this by using .cfi_sections .debug_frame (as in
glibc) so that the directives generate .debug_frame instead.
.debug_frame is useful for the debugger, can be removed by strip, and
is not loaded into memory at runtime.
OK to commit?
2015-11-11 Joseph Myers <joseph@codesourcery.com>
* libc/machine/arm/strcmp-arm-tiny.S: Use .cfi_sections
.debug_frame.
* libc/machine/arm/strcmp-armv4.S: Likewise.
* libc/machine/arm/strcmp-armv4t.S: Likewise.
* libc/machine/arm/strcmp-armv6.S: Likewise.
* libc/machine/arm/strcmp-armv6m.S: Likewise.
* libc/machine/arm/strcmp-armv7.S: Likewise.
* libc/machine/arm/strcmp-armv7m.S: Likewise.
diff --git a/newlib/libc/machine/arm/strcmp-arm-tiny.S b/newlib/libc/machine/arm/strcmp-arm-tiny.S
index 158133f..6b6bd13 100644
--- a/newlib/libc/machine/arm/strcmp-arm-tiny.S
+++ b/newlib/libc/machine/arm/strcmp-arm-tiny.S
@@ -31,6 +31,7 @@
.syntax unified
def_fn strcmp
+ .cfi_sections .debug_frame
.cfi_startproc
1:
ldrb r2, [r0], #1
diff --git a/newlib/libc/machine/arm/strcmp-armv4.S b/newlib/libc/machine/arm/strcmp-armv4.S
index b18c3db..05e3df6 100644
--- a/newlib/libc/machine/arm/strcmp-armv4.S
+++ b/newlib/libc/machine/arm/strcmp-armv4.S
@@ -45,6 +45,7 @@
.arm
def_fn strcmp
+ .cfi_sections .debug_frame
.cfi_startproc
eor tmp1, src1, src2
tst tmp1, #3
diff --git a/newlib/libc/machine/arm/strcmp-armv4t.S b/newlib/libc/machine/arm/strcmp-armv4t.S
index 2716b87..d01d840 100644
--- a/newlib/libc/machine/arm/strcmp-armv4t.S
+++ b/newlib/libc/machine/arm/strcmp-armv4t.S
@@ -36,6 +36,7 @@
.eabi_attribute Tag_also_compatible_with, "\006\013" /* ARMv6-M. */
.eabi_attribute Tag_ARM_ISA_use, 0
def_fn strcmp
+ .cfi_sections .debug_frame
.cfi_startproc
1:
ldrb r2, [r0]
diff --git a/newlib/libc/machine/arm/strcmp-armv6.S b/newlib/libc/machine/arm/strcmp-armv6.S
index a557fc5..657c1ee 100644
--- a/newlib/libc/machine/arm/strcmp-armv6.S
+++ b/newlib/libc/machine/arm/strcmp-armv6.S
@@ -131,6 +131,7 @@ def_fn strcmp
cmpcs r2, r3
bne .Lfastpath_exit
#endif
+ .cfi_sections .debug_frame
.cfi_startproc
strd r4, r5, [sp, #-16]!
.cfi_def_cfa_offset 16
diff --git a/newlib/libc/machine/arm/strcmp-armv6m.S b/newlib/libc/machine/arm/strcmp-armv6m.S
index 932841d..74f87cb 100644
--- a/newlib/libc/machine/arm/strcmp-armv6m.S
+++ b/newlib/libc/machine/arm/strcmp-armv6m.S
@@ -53,6 +53,7 @@
.text
def_fn strcmp
+ .cfi_sections .debug_frame
.cfi_startproc
mov r2, r0
push {r4, r5, r6, lr}
diff --git a/newlib/libc/machine/arm/strcmp-armv7.S b/newlib/libc/machine/arm/strcmp-armv7.S
index e2c47ff..2f93bfb 100644
--- a/newlib/libc/machine/arm/strcmp-armv7.S
+++ b/newlib/libc/machine/arm/strcmp-armv7.S
@@ -136,6 +136,7 @@ def_fn strcmp
cmpcs r2, r3
bne .Lfastpath_exit
#endif
+ .cfi_sections .debug_frame
.cfi_startproc
strd r4, r5, [sp, #-16]!
.cfi_def_cfa_offset 16
diff --git a/newlib/libc/machine/arm/strcmp-armv7m.S b/newlib/libc/machine/arm/strcmp-armv7m.S
index d66d393..7b63049 100644
--- a/newlib/libc/machine/arm/strcmp-armv7m.S
+++ b/newlib/libc/machine/arm/strcmp-armv7m.S
@@ -44,6 +44,7 @@
.thumb
.syntax unified
def_fn strcmp
+ .cfi_sections .debug_frame
.cfi_startproc
eor tmp1, src1, src2
tst tmp1, #3
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Newlib
mailing list