RT-Thread/rt-thread

Bug in linker script for all stm32 targets

Open

#7,527 建立於 2023年5月18日

在 GitHub 查看
 (0 留言) (3 反應) (0 負責人)C (4,755 fork)batch import
good first issue

倉庫指標

Star
 (9,223 star)
PR 合併指標
 (平均合併 7天 22小時) (30 天內合併 50 個 PR)

描述

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

貢獻者指南