Skip to content

Commit

Permalink
Auto merge of #28427 - DiamondLovesYou:gdb-debug-script-load, r=alexc…
Browse files Browse the repository at this point in the history
…richton

This is so LLVM isn't forced to load every byte of it. Also sets the alignment of
the load. Adds a test for the debug script section.

r? @alexcrichton
  • Loading branch information
bors committed Sep 22, 2015
2 parents e9d2587 + 9a24025 commit f07f4ef
Show file tree
Hide file tree
Showing 10 changed files with 50 additions and 4 deletions.
3 changes: 1 addition & 2 deletions src/compiletest/runtest.rs
Expand Up @@ -1669,8 +1669,7 @@ fn compile_test_and_save_ir(config: &Config, props: &TestProps,
// FIXME (#9639): This needs to handle non-utf8 paths
let mut link_args = vec!("-L".to_owned(),
aux_dir.to_str().unwrap().to_owned());
let llvm_args = vec!("--emit=llvm-ir".to_owned(),
"--crate-type=lib".to_owned());
let llvm_args = vec!("--emit=llvm-ir".to_owned(),);
link_args.extend(llvm_args);
let args = make_compile_args(config,
props,
Expand Down
14 changes: 12 additions & 2 deletions src/librustc_trans/trans/debuginfo/gdb.rs
Expand Up @@ -13,7 +13,7 @@
use llvm;
use llvm::ValueRef;

use trans::common::{C_bytes, CrateContext};
use trans::common::{C_bytes, CrateContext, C_i32};
use trans::declare;
use trans::type_::Type;
use session::config::NoDebugInfo;
Expand All @@ -31,11 +31,21 @@ pub fn insert_reference_to_gdb_debug_scripts_section_global(ccx: &CrateContext)
let gdb_debug_scripts_section_global =
get_or_insert_gdb_debug_scripts_section_global(ccx);
unsafe {
// Load just the first byte as that's all that's necessary to force
// LLVM to keep around the reference to the global.
let indices = [C_i32(ccx, 0), C_i32(ccx, 0)];
let element =
llvm::LLVMBuildInBoundsGEP(ccx.raw_builder(),
gdb_debug_scripts_section_global,
indices.as_ptr(),
indices.len() as ::libc::c_uint,
empty.as_ptr());
let volative_load_instruction =
llvm::LLVMBuildLoad(ccx.raw_builder(),
gdb_debug_scripts_section_global,
element,
empty.as_ptr());
llvm::LLVMSetVolatile(volative_load_instruction, llvm::True);
llvm::LLVMSetAlignment(volative_load_instruction, 1);
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/test/codegen/adjustments.rs
Expand Up @@ -10,6 +10,8 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

// Hack to get the correct size for the length part in slices
// CHECK: @helper([[USIZE:i[0-9]+]])
#[no_mangle]
Expand Down
2 changes: 2 additions & 0 deletions src/test/codegen/coercions.rs
Expand Up @@ -10,6 +10,8 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

static X: i32 = 5;

// CHECK-LABEL: @raw_ptr_to_raw_ptr_noop
Expand Down
1 change: 1 addition & 0 deletions src/test/codegen/extern-functions.rs
Expand Up @@ -10,6 +10,7 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]
#![feature(unwind_attributes)]

extern {
Expand Down
1 change: 1 addition & 0 deletions src/test/codegen/function-arguments.rs
Expand Up @@ -10,6 +10,7 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]
#![feature(allocator)]

pub struct S {
Expand Down
25 changes: 25 additions & 0 deletions src/test/codegen/gdb_debug_script_load.rs
@@ -0,0 +1,25 @@
// Copyright 2015 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.

// ignore-tidy-linelength
// ignore-windows
// ignore-macos

// compile-flags: -g -C no-prepopulate-passes

#![feature(start)]

// CHECK-LABEL: @main
// CHECK: load volatile i8, i8* getelementptr inbounds ([[B:\[[0-9]* x i8\]]], [[B]]* @__rustc_debug_gdb_scripts_section__, i32 0, i32 0), align 1

#[start]
fn start(_: isize, _: *const *const u8) -> isize {
return 0;
}
2 changes: 2 additions & 0 deletions src/test/codegen/link_section.rs
Expand Up @@ -10,6 +10,8 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

// CHECK: @VAR1 = constant i32 1, section ".test_one"
#[no_mangle]
#[link_section = ".test_one"]
Expand Down
2 changes: 2 additions & 0 deletions src/test/codegen/loads.rs
Expand Up @@ -10,6 +10,8 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

pub struct Bytes {
a: u8,
b: u8,
Expand Down
2 changes: 2 additions & 0 deletions src/test/codegen/stores.rs
Expand Up @@ -10,6 +10,8 @@

// compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

pub struct Bytes {
a: u8,
b: u8,
Expand Down

0 comments on commit f07f4ef

Please sign in to comment.