RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Open

#7 527 ouverte le 18 mai 2023

Voir sur GitHub
 (0 commentaires) (3 réactions) (0 assignés)C (4 755 forks)batch import
good first issue

Métriques du dépôt

Stars
 (9 223 stars)
Métriques de merge PR
 (Merge moyen 7j 22h) (50 PRs mergées en 30 j)

Description

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

Guide contributeur