移植GCC1.27时,如何编写Spec添加输出文件至列表但不追加命令?
解决GCC 1.27移植中标记输出文件但不生成命令行内容的问题
针对你移植GCC 1.27到Tektronix 4404平台的需求——要将%w%b.r对应的文件加入输出列表,但不在汇编器命令行中追加相关内容——目前GCC 1.27的原生spec令牌没有直接支持的方法,你需要新增自定义令牌来实现。
原因分析
GCC 1.27中的%w令牌设计是双重作用:一方面将后续的文件名标记为输出文件,另一方面会把该文件名(包括你现有配置里的+o=前缀)直接输出到命令行中。原生没有只做标记、不输出内容的令牌。
实现步骤(新增自定义令牌)
- 找到gcc.c中处理spec令牌的代码段(通常在处理转义序列的逻辑里,比如
do_spec函数或类似解析spec的部分)。 - 新增一个自定义令牌(比如用
%W,以大写区分原生%w),处理逻辑为:- 解析后续的文件名(比如
%b.r) - 调用原生
%w对应的输出文件记录逻辑,将文件名加入输出列表 - 不将该文件名输出到命令行
- 解析后续的文件名(比如
- 修改你的汇编器spec,把原来的
+o=%w%b.r替换为%W%b.r,调整后的代码如下:{!S:asm %{R} %{j} %{J} %{h} %{d2} %a %{gg:-G %g.sym} %g.s %{c:%{!o*:%W%b.r}}%{!c:%W%b.r} }
临时替代方案(不修改核心逻辑)
如果暂时不想新增令牌,可尝试用空条件块的技巧,但可能产生多余空字符,需测试是否影响汇编器执行:
{!S:asm %{R} %{j} %{J} %{h} %{d2} %a %{gg:-G %g.sym} %g.s %{c:%{!o*:%{:%w%b.r}}}%{!c:%{:%w%b.r}} }
这种方法可靠性较低,更推荐新增自定义令牌的方式。
内容的提问来源于stack exchange,提问作者Elektraglide
相关产品推荐
相关产品推荐

