diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-08-15 14:52:27 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-08-15 14:52:27 -0400 |
commit | badaa04accd6e606c5a5c448c579e4b18b6c1012 (patch) | |
tree | 6c73893362ab6a20f1ee246b743fe4e2ac68a5dc | |
parent | c221af951693d526d3ae946f7e708af8e7a9bf85 (diff) | |
download | musl-badaa04accd6e606c5a5c448c579e4b18b6c1012.tar.gz musl-badaa04accd6e606c5a5c448c579e4b18b6c1012.tar.bz2 musl-badaa04accd6e606c5a5c448c579e4b18b6c1012.tar.xz musl-badaa04accd6e606c5a5c448c579e4b18b6c1012.zip |
add function types to arm crt assembly
without these, calls may be resolved incorrectly if the calling code
has been compiled to thumb instead of arm. it's not clear to me at
this point whether crt_arch.h is even working if crt1.c is built as
thumb; this needs testing. but the _init and _fini issues were known
to cause crashes in static-linked apps when libc was built as thumb,
and this commit should fix that issue.
-rw-r--r-- | arch/arm/crt_arch.h | 1 | ||||
-rw-r--r-- | crt/arm/crt1.s | 1 | ||||
-rw-r--r-- | crt/arm/crti.s | 2 |
3 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/crt_arch.h b/arch/arm/crt_arch.h index 979fb081..bed99c27 100644 --- a/arch/arm/crt_arch.h +++ b/arch/arm/crt_arch.h @@ -1,5 +1,6 @@ __asm__("\ .global _start \n\ +.type _start,%function \n\ _start: \n\ mov fp, #0 \n\ mov lr, #0 \n\ diff --git a/crt/arm/crt1.s b/crt/arm/crt1.s index ed2a57a2..90ef59f3 100644 --- a/crt/arm/crt1.s +++ b/crt/arm/crt1.s @@ -1,6 +1,7 @@ .weak _init .weak _fini .global _start +.type _start,%function _start: mov fp,#0 mov lr,#0 diff --git a/crt/arm/crti.s b/crt/arm/crti.s index 0d479cd2..1ba165c5 100644 --- a/crt/arm/crti.s +++ b/crt/arm/crti.s @@ -1,9 +1,11 @@ .section .init .global _init +.type _init,%function _init: push {r0,lr} .section .fini .global _fini +.type _fini,%function _fini: push {r0,lr} |