RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Open

#7527 aperta il 18 mag 2023

Vedi su GitHub
 (0 commenti) (3 reazioni) (0 assegnatari)C (4755 fork)batch import
good first issue

Metriche repository

Star
 (9223 star)
Metriche merge PR
 (Merge medio 7g 22h) (50 PR mergiate in 30 g)

Descrizione

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

Guida contributor