Add support for storing code model to LLVM module IR
This patch avoids undefined behavior by linking different object files. Also this would it could be propagated properly to LTO. See https://reviews.llvm.org/D52322 and https://reviews.llvm.org/D52323. This patch is based on https://github.com/rust-lang/rust/pull/74002
This commit is contained in:
parent
4a8b6f708c
commit
8357e57346
5 changed files with 36 additions and 1 deletions
|
@ -1,4 +1,5 @@
|
|||
use crate::attributes;
|
||||
use crate::back::write::to_llvm_code_model;
|
||||
use crate::callee::get_fn;
|
||||
use crate::coverageinfo;
|
||||
use crate::debuginfo;
|
||||
|
@ -181,6 +182,13 @@ pub unsafe fn create_module(
|
|||
}
|
||||
}
|
||||
|
||||
// Linking object files with different code models is undefined behavior
|
||||
// because the compiler would have to generate additional code (to span
|
||||
// longer jumps) if a larger code model is used with a smaller one.
|
||||
//
|
||||
// See https://reviews.llvm.org/D52322 and https://reviews.llvm.org/D52323.
|
||||
llvm::LLVMRustSetModuleCodeModel(llmod, to_llvm_code_model(sess.code_model()));
|
||||
|
||||
// If skipping the PLT is enabled, we need to add some module metadata
|
||||
// to ensure intrinsic calls don't use it.
|
||||
if !sess.needs_plt() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue