在C ++中是否存在预处理器宏,常量或类似的东西可用于判断翻译单元是否正在使用分段堆栈(即,使用-fsplit-stack
进行编译)?
任何编译器的答案都很好,但是我特别在寻找clang和gcc
答案 0 :(得分:2)
根据this gcc wiki page,预处理器获取TARGET_SUPPORTS_SPLIT_STACK
,运行时获取bool supports_split_stack()
。
答案 1 :(得分:0)
在撰写本文时,从GitHub mirror的master分支检查gcc源代码表明,flag_split_stack
不会产生可见的副作用,除了在代码生成和链接级别上可能为时已晚。我没有像gcc那样深入地研究clang代码,但情况可能应该相似。
如果您还可以允许运行时检查,则可以为它们中的每一个编写特定于平台的检测(例如,通过检查代码进行__morestack()
call检测;请参考morestack.S
),但是从某种意义上说,它应该与objdump用法处于某种相似的状态,因为它不能在编译时诊断中加以利用。
最好的方法是向编译器供应商请求功能,或者,如果您可以控制构建系统,则可以使用-D
和-fsplit-stack
本身来添加自定义宏。