aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2013-01-27 01:08:01 +0100
committerThomas Preud'homme <robotux@celest.fr>2013-01-27 01:08:01 +0100
commit0f81512d7da2934d9f0df088106a10a37838581b (patch)
tree1616a1b891613a8bdd2455ba866d91bb5e98f228
parentf3e5649150df4d58c97bbedef71a14c4f707feed (diff)
downloadtinycc-0f81512d7da2934d9f0df088106a10a37838581b.tar.gz
tinycc-0f81512d7da2934d9f0df088106a10a37838581b.tar.bz2
Fix stack alignment on 8 bytes at function call
Ensure stack pointer is correctly adjusted in prolog to be aligned on 8 bytes after the change of frame linking.
-rw-r--r--arm-gen.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/arm-gen.c b/arm-gen.c
index e3e502b..fb157b0 100644
--- a/arm-gen.c
+++ b/arm-gen.c
@@ -1231,7 +1231,7 @@ from_stack:
}
last_itod_magic=0;
leaffunc = 1;
- loc = -12;
+ loc = 0;
}
/* generate function epilog */
@@ -1255,9 +1255,9 @@ void gfunc_epilog(void)
diff = (-loc + 3) & -4;
#ifdef TCC_ARM_EABI
if(!leaffunc)
- diff = (diff + 7) & -8;
+ diff = ((diff + 11) & -8) - 4;
#endif
- if(diff > 12) {
+ if(diff > 0) {
x=stuff_const(0xE24BD000, diff); /* sub sp,fp,# */
if(x)
*(uint32_t *)(cur_text_section->data + func_sub_sp_offset) = x;