eh_personality在哪里叫?

Chr*_*ith 8 rust

我正在尝试使用libcore在Rust中实现一个操作系统.在文档中,它说该eh_personality功能需要实现.

但是,我发现在libcore本身没有使用这个函数,我可以在没有它的情况下编译,运行和执行恐慌.

这里有什么我想念的吗?哪里eh_personality的过程中被调用panic!()周期?

Ste*_*fan 5

参见不稳定书:lang_items

这些功能中的第一个rust_eh_personality由编译器的故障机制使用。这通常映射到GCC的个性功能(有关更多信息,请参见libstd实现),但是可以确保不会触发紧急情况的板条箱永远不会调用此功能。语言项目的名称为eh_personality

据我所知,创建展开信息是必需的;如果您中止或循环显示panic_fmt语言项(函数rust_begin_unwind),则可能不会调用它。

另请参阅libpanic_abort / lib.rs中的内部注释。

如果您进行搜索,rust_eh_personality则会在librustc_trans / context.rs:中CodegenCx::eh_personality找到用法。搜索eh_personality应显示该函数调用的位置。(它用于代码生成,而不是直接调用。)

搜索#[lang = "eh_personality"]仅显示定义个性的位置,而不显示用法。