GCC v10.3 use more stack size than GCC v6.3 for a function
I have an application which I compile it using GCC v6.3, when I compile it with GCC v10.3 I find some functions use more stack size than what GCC v6.3 uses, for example this function uses zero stack for GCC v6.3 but uses 8 bytes for GCC v10.3
int func(int *x, int y, int z, int a)
{
switch (y) {
case 1:
*x = a;
y = z;
return y;
}
return 77;
}
GCC v6.3 assembly:
int func(int *x, int y, int z, int a)
{
switch (y) {
0: 2901 cmp r1, #1
2: d102 bne.n a <func+0xa>
case 1:
*x = a;
4: 6003 str r3, [r0, #0]
y = z;
return y;
6: 0010 movs r0, r2
}
return 77;
}
8: 4770 bx lr
return 77;
a: 204d movs r0, #77 ; 0x4d
c: e7fc b.n 8 <func+0x8>
and GCC v10.3 assembly:
int func(int *x, int y, int z, int a)
{
0: b510 push {r4, lr}
2: 0004 movs r4, r0
*x = a;
y = z;
return y;
}
return 77;
4: 204d movs r0, #77 ; 0x4d
switch (y) {
6: 2901 cmp r1, #1
8: d101 bne.n e <func+0xe>
return y;
a: 0010 movs r0, r2
*x = a;
c: 6023 str r3, [r4, #0]
}
e: bd10 pop {r4, pc}
In GCCv10.3, it push {r4, lr} which is not the case in GCC v6.3
so why does this happen?, it costs the application more stack area over the old compiler, and how to avoid it to get less stack size
also, why it stacked the lr although it's a leaf function?
Notes:
1. This function is a dummy one just to reproduce the issue, so don't consider rewriting it.
2. Building flags are:
arm-none-eabi-gcc -O0 -c -std=c99 -fmessage-length=0 -fomit-
Question information
- Language:
- English Edit question
- Status:
- Open
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Can you help with this problem?
Provide an answer of your own, or ask abousamra for more information if necessary.