diff options
| author | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-04 11:33:56 +0000 |
|---|---|---|
| committer | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-04 11:33:56 +0000 |
| commit | 5ba0fdd9c50eb1675dd47da4848795e192f4b87d (patch) | |
| tree | 7312385772be221926712cf2aed4fc2a890a425f | |
| parent | 5a7d3c0b3ed9c792846d5e2adb113e38a45c2da9 (diff) | |
| download | ppe42-gcc-5ba0fdd9c50eb1675dd47da4848795e192f4b87d.tar.gz ppe42-gcc-5ba0fdd9c50eb1675dd47da4848795e192f4b87d.zip | |
* config/arm/crti.asm: Push an even number of registers.
* config/arm/crtn.asm: And restore them. Load via sp.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81473 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/arm/crti.asm | 4 | ||||
| -rw-r--r-- | gcc/config/arm/crtn.asm | 6 |
3 files changed, 11 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66d5ac4ee07..6d6680dc16b 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 ac58e44838d..3597e42b02e 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 9ad75e3f2aa..714060ce60d 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__ |

