diff options
| author | Thomas Preud'homme <robotux@celest.fr> | 2013-01-27 01:08:01 +0100 |
|---|---|---|
| committer | Thomas Preud'homme <robotux@celest.fr> | 2013-01-27 01:08:01 +0100 |
| commit | 0f81512d7da2934d9f0df088106a10a37838581b (patch) | |
| tree | 1616a1b891613a8bdd2455ba866d91bb5e98f228 /arm-gen.c | |
| parent | f3e5649150df4d58c97bbedef71a14c4f707feed (diff) | |
| download | tinycc-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.
Diffstat (limited to 'arm-gen.c')
| -rw-r--r-- | arm-gen.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -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; |
