RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Open

#7.527 aberto em 18 de mai. de 2023

Ver no GitHub
 (0 comments) (3 reactions) (0 assignees)C (4.755 forks)batch import
good first issue

Métricas do repositório

Stars
 (9.223 stars)
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