auto merge of #13340 : FlaPer87/rust/code-model, r=cmr
Rust currently defaults to `RelocPIC` regardless. This patch adds a new codegen option that allows choosing different relocation-model. The available models are: - default (Use the target-specific default model) - static - pic - no-pic For a more detailed information use `llc --help`
This commit is contained in:
commit
02c81fe2b5
@ -36,6 +36,7 @@ _rustc_opts_switches=(
|
||||
--target'[Target triple cpu-manufacturer-kernel\[-os\] to compile]'
|
||||
--target-cpu'[Select target processor (llc -mcpu=help for details)]'
|
||||
--target-feature'[Target specific attributes (llc -mattr=help for details)]'
|
||||
--relocation-model'[Relocation model (llc --help for details)]'
|
||||
{-v,--version}'[Print version info and exit]'
|
||||
)
|
||||
_rustc_opts_lint=(
|
||||
|
@ -152,13 +152,26 @@ pub mod write {
|
||||
(sess.targ_cfg.os == abi::OsMacos &&
|
||||
sess.targ_cfg.arch == abi::X86_64);
|
||||
|
||||
let reloc_model = match sess.opts.cg.relocation_model.as_slice() {
|
||||
"pic" => lib::llvm::RelocPIC,
|
||||
"static" => lib::llvm::RelocStatic,
|
||||
"default" => lib::llvm::RelocDefault,
|
||||
"dynamic-no-pic" => lib::llvm::RelocDynamicNoPic,
|
||||
_ => {
|
||||
sess.err(format!("{} is not a valid relocation mode",
|
||||
sess.opts.cg.relocation_model));
|
||||
sess.abort_if_errors();
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|t| {
|
||||
sess.opts.cg.target_cpu.with_c_str(|cpu| {
|
||||
target_feature(sess).with_c_str(|features| {
|
||||
llvm::LLVMRustCreateTargetMachine(
|
||||
t, cpu, features,
|
||||
lib::llvm::CodeModelDefault,
|
||||
lib::llvm::RelocPIC,
|
||||
reloc_model,
|
||||
opt_level,
|
||||
true,
|
||||
use_softfp,
|
||||
|
@ -458,6 +458,8 @@ cgoptions!(
|
||||
"prefer dynamic linking to static linking"),
|
||||
no_integrated_as: bool = (false, parse_bool,
|
||||
"use an external assembler rather than LLVM's integrated one"),
|
||||
relocation_model: ~str = (~"pic", parse_string,
|
||||
"choose the relocation model to use (llc -relocation-model for details)"),
|
||||
)
|
||||
|
||||
// Seems out of place, but it uses session, so I'm putting it here
|
||||
|
15
src/test/run-make/relocation-model/Makefile
Normal file
15
src/test/run-make/relocation-model/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
-include ../tools.mk
|
||||
|
||||
all:
|
||||
$(RUSTC) -C relocation-model=dynamic-no-pic foo.rs
|
||||
$(call RUN,foo)
|
||||
|
||||
$(RUSTC) -C relocation-model=default foo.rs
|
||||
$(call RUN,foo)
|
||||
|
||||
$(RUSTC) -C relocation-model=static foo.rs
|
||||
$(call RUN,foo)
|
||||
|
||||
$(RUSTC) -C relocation-model=default --crate-type=dylib foo.rs
|
||||
$(RUSTC) -C relocation-model=static --crate-type=dylib foo.rs
|
||||
$(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs
|
11
src/test/run-make/relocation-model/foo.rs
Normal file
11
src/test/run-make/relocation-model/foo.rs
Normal file
@ -0,0 +1,11 @@
|
||||
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
pub fn main() {}
|
Loading…
Reference in New Issue
Block a user