RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Open

#7,527 opened on 2023年5月18日

GitHub で見る
 (0 comments) (3 reactions) (0 assignees)C (4,755 forks)batch import
good first issue

Repository metrics

Stars
 (9,223 stars)
PR merge metrics
 (平均マージ 7d 22h) (30d で 50 merged PRs)

説明

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

コントリビューターガイド