From 0a31060815b63a87729be0178c7fce52d3b88d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20K=C3=A5re=20Alsaker?= Date: Tue, 15 Jul 2014 23:14:02 +0000 Subject: [PATCH] Support for specifying the code model The default code model is usually unsuitable for kernels, so we add an option to specify which model we want. --- src/librustc/back/link.rs | 18 +++++++++++++++++- src/librustc/driver/config.rs | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index cad164c9e2019..a7a959651653a 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -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 @@ -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 */, diff --git a/src/librustc/driver/config.rs b/src/librustc/driver/config.rs index 345877d9ab6c4..ddb95f12f15ac 100644 --- a/src/librustc/driver/config.rs +++ b/src/librustc/driver/config.rs @@ -334,6 +334,8 @@ cgoptions!( "use an external assembler rather than LLVM's integrated one"), 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 = (Vec::new(), parse_list, "metadata to mangle symbol names with"), extra_filename: String = ("".to_string(), parse_string,