gpt4 book ai didi

gcc - 获取当前的 GCC 异常模型

转载 作者:行者123 更新时间:2023-12-04 03:08:12 30 4
gpt4 key购买 nike

g++使用 DWARF2 构建, sjljseh异常模型。 MinGW-builds提供各种版本的 g++具有不同的异常模型。我希望能够从gcc中确定工具链正在使用什么异常模型。有没有g++将转储编译器的默认异常模型的参数?

最佳答案

编辑:最初,我正在测试 g++ -v 中描述的配置标志。 .正如 Jonathon Wakely 在评论中指出的那样,这不是一件好事。

一种检查方法是编译为程序集:

struct S { ~S(); };
void bar();
void foo() {
S s;
bar();
}
g++ -S <filename> -o output.s的结果其中包含以下异常引用:

MinGW-4.8.1-x86-posix-sjlj :
.def    ___gxx_personality_sj0; .scl    2;  .type   32; .endef
.def __Unwind_SjLj_Register; .scl 2; .type 32; .endef
.def __Unwind_SjLj_Unregister; .scl 2; .type 32; .endef
.def __Unwind_SjLj_Resume; .scl 2; .type 32; .endef

MinGW-4.8.1-x86-posix-dwarf :
.def    ___gxx_personality_v0;  .scl    2;  .type   32; .endef
.def __Unwind_Resume; .scl 2; .type 32; .endef

MinGW-4.8.1-x64-win32-sjlj :
.def    __gxx_personality_sj0;  .scl    2;  .type   32; .endef
.def _Unwind_SjLj_Register; .scl 2; .type 32; .endef
.def _Unwind_SjLj_Unregister; .scl 2; .type 32; .endef
.def _Unwind_SjLj_Resume; .scl 2; .type 32; .endef

MinGW-4.8.1-x64-posix-seh :
.def    __gxx_personality_seh0; .scl    2;  .type   32; .endef
.def _Unwind_Resume; .scl 2; .type 32; .endef

MinGW-4.8.1-x64-posix-sjlj :
.def    __gxx_personality_sj0;  .scl    2;  .type   32; .endef
.def _Unwind_SjLj_Register; .scl 2; .type 32; .endef
.def _Unwind_SjLj_Unregister; .scl 2; .type 32; .endef
.def _Unwind_SjLj_Resume; .scl 2; .type 32; .endef

FC17-g++-4.7.2-x64 :
.cfi_personality 0x3,__gxx_personality_v0
.globl __gxx_personality_v0
call _Unwind_Resume

看起来我们应该搜索 __gxx_personality_([a-z])(0-9]+)然后将第一个捕获组与:
  • v = dwarf
  • seh = seh
  • sj = sjlj
  • 关于gcc - 获取当前的 GCC 异常模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967597/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com