RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Aberta

#7.527 aberto em 18 de mai. de 2023

 (0 comentário) (3 reações) (0 responsável)C (4.755 forks)batch import
good first issue

Métricas do repositório

Stars
 (9.223 estrelas)
Métricas de merge de PR
 (Mesclagem média 7d 22h) (50 fundiu PRs em 30d)

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

Guia do colaborador