我如何优化"@llvm.global_ctors"?



我正在做一个llvm的IR代码,llvm的版本是7.0.0。这里我在IR代码中找到了一个变量:

@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_ac_multiply.cpp, i8* null }]

这个变量叫做@llvm。global_ctors在IR代码中不使用。我使用:选择-std-link-opts@llvm.global_ctors"还在那里。

我想删除这个变量,我该怎么做呢?

谢谢。

来自LLVM的语言参考:

@llvm。Global_ctors数组包含构造函数、优先级和关联的全局或函数的列表。当模块加载时,此数组引用的函数将按优先级升序调用(即先从最低的开始)。

在您的示例中,您不能简单地从IR中删除该变量,因为这会改变程序的语义。函数@_GLOBAL__sub_I_ac_multiply.cpp必须在程序启动时调用(在调用main函数之前),以便在编译的代码中执行一些初始化。

注意,这个全局变量不会在你的目标二进制程序中转换成一个等价的符号。相反,它会转换为您的目标平台用来调用启动函数的任何方式(在Linux的情况下,是.ctors/.dtors/.init/)。菲尼数组。你可以在这篇很棒的博客文章中读到更多关于他们的信息)。

相关内容

  • 没有找到相关文章

最新更新