如何在条件汇编期间将标志传递给预处理器
我想将 Makefile 中定义的某些宏传递给预处理器,例如以下代码中的“_DBGR_ON_”,以便相应地汇编代码。该选项在diab编译器(powerpc的c交叉编译器)中工作,通过在makefile中使用-D_DBGR_ON_定义它并将其包含为汇编器标志。 但如何将其包含在 GCC 中。
当我做同样的事情(ASFLAGS = -mregnames -D_DBGR_ON_.)时,我收到错误:无法识别的选项`-_DBGR_ON_'
然后,我尝试了ASFLAGS = -mregnames -D _DBGR_ON_,我得到“无法打开_DBGR_ON_进行阅读:没有这样的文件或目录”
请帮忙,因为 -D 选项在 GCC 中被忽略。
我在 Diab 中使用 -D 选项进行条件汇编、编译。如何在海湾合作委员会中做到这一点。我被困在这里了。
问候, Thulasi
启动.s 文件的内容......
.globl _start
_start:
.ifndef _DBGR_ON_ # Flash mode
mfmsr r3
ori r3,r3,0x1040 # Set ME/IP flags
mtmsr r3
sync
.else
mfmsr r3
ori r3,r3,0x1000 # Set ME/IP flags
mtmsr r3
sync
.endif #_DBGR_ON_
等等..
I want to pass certain macros defined in Makefile to preprocessor like "_DBGR_ON_" in the following code so that code will be assembled accordingly. This option is working in diab compiler(c cross compiler for powerpc) by defining it with -D_DBGR_ON_ in makefile and including it as Assembler flag.
But how to include it in GCC.
When I do the same(ASFLAGS = -mregnames -D_DBGR_ON_.), i was getting error: unrecognized option `-_DBGR_ON_'
Then, I tried ASFLAGS = -mregnames -D _DBGR_ON_, I was getting "can't open _DBGR_ON_ for reading: No such file or directory"
Please help as -D option is ignored in GCC.
I was using -D option to do conditional assembly, compiling in Diab. How to do it in GCC. I am stuck here.
Regards,
Thulasi
Contents of startup.s file...
.globl _start
_start:
.ifndef _DBGR_ON_ # Flash mode
mfmsr r3
ori r3,r3,0x1040 # Set ME/IP flags
mtmsr r3
sync
.else
mfmsr r3
ori r3,r3,0x1000 # Set ME/IP flags
mtmsr r3
sync
.endif #_DBGR_ON_
.......and so on..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为这更像是一个
gas
问题,而不是 GCC 或 C 预处理器问题。gas
本身不进行预处理(尽管它可以通过gcc
运行以首先调用 C 预处理器)。.ifndef
是一个gas
指令,它在汇编程序文件中定义的符号级别工作 - 而不是 C 预处理器指令 (#ifndef
)。在这种情况下:您的
ASFLAGS
中需要的是--defsym _DBGR_ON_=1
。I think this is more of a
gas
issue than GCC or C preprocessor.gas
does not do preprocessing itself (although it can be run viagcc
to invoke the C preprocessor first)..ifndef
is agas
directive which works at the level of symbols defined in the assembler file - not a C preprocessor directive (#ifndef
).In which case: what you need in your
ASFLAGS
is--defsym _DBGR_ON_=1
.