The following prints -2 but must print 1234:
void variadic_test(int n, ...) {
va_list vl;
va_start(vl, n);
double val = va_arg(vl, double);
rt_kprintf("%d", (int)val);
va_end(vl);
}
void main() {
double v = 1234.5678;
variadic_test(1, v);
while(1);
}
Seems like stack is aligned by 4 for all stm32 targets but double size is 8 bytes. The following patch fixes the issue:
--- link.lds.o 2023-05-18 11:11:50.831727100 +0300
+++ link.lds 2023-05-18 11:43:42.305975225 +0300
@@ -93,10 +93,10 @@
.stack :
{
- . = ALIGN(4);
+ . = ALIGN(8);
_sstack = .;
. = . + _system_stack_size;
- . = ALIGN(4);
+ . = ALIGN(8);
_estack = .;
} >RAM
The following prints -2 but must print 1234:
Seems like stack is aligned by 4 for all stm32 targets but double size is 8 bytes. The following patch fixes the issue: