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

贡献者指南