Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions bsp/qemu-vexpress-a9/SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@ import os
import sys
import rtconfig

TRACE_CONFIG = ''
try:
with open('rtconfig.h') as f:
for line in f:
if line.strip() == '#define RT_BACKTRACE_FUNCTION_NAME':
TRACE_CONFIG = ' -mpoke-function-name'
break
except OSError:
pass

if os.getenv('RTT_ROOT'):
RTT_ROOT = os.getenv('RTT_ROOT')
else:
Expand All @@ -14,9 +24,9 @@ TARGET = 'rtthread.' + rtconfig.TARGET_EXT

DefaultEnvironment(tools=[])
env = Environment(tools = ['mingw'],
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS + TRACE_CONFIG,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

当前只在初始构建环境中追加该参数。通过 --exec-path 指定工具链时,PrepareBuilding() 会重新加载 rtconfig,随后 _apply_exec_path_override() 直接覆盖 CFLAGS、CXXFLAGS 和 ASFLAGS,导致 -mpoke-function-name 被静默移除。
此时编译仍会成功,但函数名元数据没有写入;而 backtrace.c 在宏启用后也不再打印地址,因此回溯只剩标题而没有栈帧。

请作者确认下

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

建议修复方式:

-                TRACE_CONFIG = ' -mpoke-function-name'
+                TRACE_CONFIG = '-mpoke-function-name'

 env = Environment(tools = ['mingw'],
-    AS   = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS + TRACE_CONFIG,
-    CC   = rtconfig.CC, CFLAGS = rtconfig.CFLAGS + TRACE_CONFIG,
-    CXX  = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS + TRACE_CONFIG,
+    AS   = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
+    CC   = rtconfig.CC, CFLAGS = rtconfig.CFLAGS,
+    CXX  = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS,
     AR   = rtconfig.AR, ARFLAGS = '-rc',
     LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
 env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
+
+if TRACE_CONFIG:
+    env.AppendUnique(CCFLAGS=[TRACE_CONFIG])
+    env['ASPPCOM'] += ' ' + TRACE_CONFIG
+
 env['ASCOM'] = env['ASPPCOM']

CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS + TRACE_CONFIG,
CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS + TRACE_CONFIG,
AR = rtconfig.AR, ARFLAGS = '-rc',
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
Expand Down
Loading