如何在条件汇编期间将标志传递给预处理器

发布于 2024-11-01 20:49:43 字数 829 浏览 2 评论 0原文

我想将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

箜明 2024-11-08 20:49:43

我认为这更像是一个 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 via gcc to invoke the C preprocessor first). .ifndef is a gas 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文