Skip to content

Commit

Permalink
auto merge of #15698 : Zoxc/rust/code-model, r=alexcrichton
Browse files Browse the repository at this point in the history
The default code model is usually unsuitable for kernels,
so we add an option to specify which model we want.

Testing for this would be fragile and very architecture specific and is better left to LLVM.
  • Loading branch information
bors committed Jul 17, 2014
2 parents 9fc8394 + 0a31060 commit dd348b3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
18 changes: 17 additions & 1 deletion src/librustc/back/link.rs
Expand Up @@ -186,6 +186,22 @@ pub mod write {
}
};

let code_model = match sess.opts.cg.code_model.as_slice() {
"default" => llvm::CodeModelDefault,
"small" => llvm::CodeModelSmall,
"kernel" => llvm::CodeModelKernel,
"medium" => llvm::CodeModelMedium,
"large" => llvm::CodeModelLarge,
_ => {
sess.err(format!("{} is not a valid code model",
sess.opts
.cg
.code_model).as_slice());
sess.abort_if_errors();
return;
}
};

let tm = sess.targ_cfg
.target_strs
.target_triple
Expand All @@ -195,7 +211,7 @@ pub mod write {
target_feature(sess).with_c_str(|features| {
llvm::LLVMRustCreateTargetMachine(
t, cpu, features,
llvm::CodeModelDefault,
code_model,
reloc_model,
opt_level,
true /* EnableSegstk */,
Expand Down
2 changes: 2 additions & 0 deletions src/librustc/driver/config.rs
Expand Up @@ -336,6 +336,8 @@ cgoptions!(
"disable the use of the redzone"),
relocation_model: String = ("pic".to_string(), parse_string,
"choose the relocation model to use (llc -relocation-model for details)"),
code_model: String = ("default".to_string(), parse_string,
"choose the code model to use (llc -code-model for details)"),
metadata: Vec<String> = (Vec::new(), parse_list,
"metadata to mangle symbol names with"),
extra_filename: String = ("".to_string(), parse_string,
Expand Down

0 comments on commit dd348b3

Please sign in to comment.