aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2004-05-04 11:33:56 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2004-05-04 11:33:56 +0000
commit82c732f97056b5a37eb2fb82963c1983d5beba7a (patch)
tree7312385772be221926712cf2aed4fc2a890a425f
parent92e838e2819de8bc7a3d4aab70e0a1ecb9bb1a3f (diff)
downloadgcc-82c732f97056b5a37eb2fb82963c1983d5beba7a.zip
gcc-82c732f97056b5a37eb2fb82963c1983d5beba7a.tar.gz
gcc-82c732f97056b5a37eb2fb82963c1983d5beba7a.tar.bz2
crti.asm: Push an even number of registers.
* config/arm/crti.asm: Push an even number of registers. * config/arm/crtn.asm: And restore them. Load via sp. From-SVN: r81473
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/crti.asm4
-rw-r--r--gcc/config/arm/crtn.asm6
3 files changed, 11 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 66d5ac4..6d6680dc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-04 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/crti.asm: Push an even number of registers.
+ * config/arm/crtn.asm: And restore them. Load via sp.
+
2004-05-04 Paolo Bonzini <bonzini@gnu.org>
* ggc-zone.c (ggc_alloc_zone_1): Add MEM_STAT_DECL parameter.
diff --git a/gcc/config/arm/crti.asm b/gcc/config/arm/crti.asm
index ac58e44..3597e42 100644
--- a/gcc/config/arm/crti.asm
+++ b/gcc/config/arm/crti.asm
@@ -42,12 +42,12 @@
#ifdef __thumb__
.thumb
- push {r4, r5, r6, r7, lr}
+ push {r3, r4, r5, r6, r7, lr}
#else
.arm
# Create a stack frame and save any call-preserved registers
mov ip, sp
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
+ stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
sub fp, ip, #4
#endif
.endm
diff --git a/gcc/config/arm/crtn.asm b/gcc/config/arm/crtn.asm
index 9ad75e3..714060c 100644
--- a/gcc/config/arm/crtn.asm
+++ b/gcc/config/arm/crtn.asm
@@ -43,17 +43,19 @@
# sequences here, it is just not worth it. Instead keep things
# simple. Restore all the save resgisters, including the link
# register and then perform the correct function return instruction.
+ # We also save/restore r3 to ensure stack alignment.
.macro FUNC_END
#ifdef __thumb__
.thumb
- pop {r4, r5, r6, r7}
+ pop {r3, r4, r5, r6, r7}
pop {r3}
mov lr, r3
#else
.arm
- ldmdb fp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
+ sub sp, fp, #40
+ ldmfd sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
#endif
#if defined __THUMB_INTERWORK__ || defined __thumb__