diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-06-25 16:06:09 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-06-25 16:06:09 -0400 | 
| commit | 9abab94b211c5103e3f6baf97ad76523618a553c (patch) | |
| tree | ae363f61070eb73b8946127e3dada19067de0e4e /crt/arm | |
| parent | ec820f1262a5d6331ad0fe9b56a8a84365766fd1 (diff) | |
| download | musl-9abab94b211c5103e3f6baf97ad76523618a553c.tar.gz | |
fix arm crti/crtn code
lr must be saved because init/fini-section code from the compiler
clobbers it. this was not a problem when i tested without gcc's
crtbegin/crtend files present, but with them, musl on arm fails to
work (infinite loop in _init).
Diffstat (limited to 'crt/arm')
| -rw-r--r-- | crt/arm/crti.s | 2 | ||||
| -rw-r--r-- | crt/arm/crtn.s | 2 | 
2 files changed, 4 insertions, 0 deletions
diff --git a/crt/arm/crti.s b/crt/arm/crti.s index 2eb23ed5..0dd978a8 100644 --- a/crt/arm/crti.s +++ b/crt/arm/crti.s @@ -1,7 +1,9 @@  .section .init  .global _init  _init: +	push {lr}  .section .fini  .global _fini  _fini: +	push {lr} diff --git a/crt/arm/crtn.s b/crt/arm/crtn.s index 9d7107d0..5d5d6454 100644 --- a/crt/arm/crtn.s +++ b/crt/arm/crtn.s @@ -1,9 +1,11 @@  .section .init +	pop {lr}  	tst lr,#1  	moveq pc,lr  	bx lr  .section .fini +	pop {lr}  	tst lr,#1  	moveq pc,lr  	bx lr  | 
