LLVM IR 中的哪些代码在 "main()" 之前运行?

Which code in LLVM IR runs before "main()"?

有谁知道 main 之前将执行哪些 LLVM IR 代码的一般规则?

使用 Clang++ 3.6 时,似乎全局 class 变量通过目标文件的“.text.startup”部分中的函数调用了它们的构造函数。例如:

define internal void @__cxx_global_var_init() section ".text.startup" {
  call void @_ZN7MyClassC2Ev(%class.MyClass* @M)
  ret void
}

根据这个例子,我猜想我应该准确地寻找那些指定 section ".text.startup" 的 IR 函数定义。

我有两个理由怀疑我的理论是正确的:

不幸的是,我没有找到更多支持我的理论的东西:

答案很简单——LLVM 不在幕后执行任何事情。这是 C runtime (CRT) to perform all necessary preparations before running main(). This includes (but not limited to) to static ctors and similar things. The runtime is usually informed about these objects via addresses of constructores being emitted in the special sections (e.g. .init_array or .ctors). See e.g. http://wiki.osdev.org/Calling_Global_Constructors 的工作以获取更多信息。