diff options
| author | Michael Woerister <michaelwoerister@posteo> | 2014-03-05 09:51:47 +0100 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo> | 2014-03-06 07:57:18 +0100 |
| commit | 1938e87393929ab33928210d55bff4bc2d73f6c2 (patch) | |
| tree | f3a14d9177158c8218b60b72e84c23eb000dd305 | |
| parent | ea71a08f6bd9d6b6fc30558027121bfbc66ab349 (diff) | |
| download | rust-1938e87393929ab33928210d55bff4bc2d73f6c2.tar.gz rust-1938e87393929ab33928210d55bff4bc2d73f6c2.zip | |
debuginfo: Re-introduce the notion of line-table-only debuginfo.
| -rw-r--r-- | src/librustc/back/link.rs | 8 | ||||
| -rw-r--r-- | src/librustc/driver/driver.rs | 8 | ||||
| -rw-r--r-- | src/librustc/driver/session.rs | 11 | ||||
| -rw-r--r-- | src/librustc/middle/trans/_match.rs | 5 | ||||
| -rw-r--r-- | src/librustc/middle/trans/base.rs | 6 | ||||
| -rw-r--r-- | src/librustc/middle/trans/closure.rs | 3 | ||||
| -rw-r--r-- | src/librustc/middle/trans/context.rs | 5 | ||||
| -rw-r--r-- | src/librustc/middle/trans/controlflow.rs | 3 | ||||
| -rw-r--r-- | src/librustc/middle/trans/debuginfo.rs | 13 |
9 files changed, 39 insertions, 23 deletions
diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index 3a1c646144b..09e5b99fc23 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -12,7 +12,7 @@ use back::archive::{Archive, METADATA_FILENAME}; use back::rpath; use back::svh::Svh; use driver::driver::{CrateTranslation, OutputFilenames}; -use driver::session::Session; +use driver::session::{NoDebugInfo, Session}; use driver::session; use lib::llvm::llvm; use lib::llvm::ModuleRef; @@ -92,7 +92,7 @@ pub mod write { use back::link::{OutputTypeExe, OutputTypeLlvmAssembly}; use back::link::{OutputTypeObject}; use driver::driver::{CrateTranslation, OutputFilenames}; - use driver::session::Session; + use driver::session::{NoDebugInfo, Session}; use driver::session; use lib::llvm::llvm; use lib::llvm::{ModuleRef, TargetMachineRef, PassManagerRef}; @@ -148,7 +148,7 @@ pub mod write { // FIXME: #11906: Omitting frame pointers breaks retrieving the value of a parameter. // FIXME: #11954: mac64 unwinding may not work with fp elim - let no_fp_elim = sess.opts.debuginfo || + let no_fp_elim = (sess.opts.debuginfo != NoDebugInfo) || (sess.targ_cfg.os == abi::OsMacos && sess.targ_cfg.arch == abi::X86_64); @@ -1052,7 +1052,7 @@ fn link_natively(sess: Session, dylib: bool, obj_filename: &Path, // On OSX, debuggers need this utility to get run to do some munging of // the symbols - if sess.targ_cfg.os == abi::OsMacos && sess.opts.debuginfo { + if sess.targ_cfg.os == abi::OsMacos && (sess.opts.debuginfo != NoDebugInfo) { // FIXME (#9639): This needs to handle non-utf8 paths match Process::status("dsymutil", [out_filename.as_str().unwrap().to_owned()]) { diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 88526dd15a9..a4fe2478f6d 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -11,7 +11,7 @@ use back::link; use back::{arm, x86, x86_64, mips}; -use driver::session::{Aggressive, CrateTypeExecutable}; +use driver::session::{Aggressive, CrateTypeExecutable, FullDebugInfo, NoDebugInfo}; use driver::session::{Session, Session_, No, Less, Default}; use driver::session; use front; @@ -865,7 +865,11 @@ pub fn build_session_options(matches: &getopts::Matches) } else { No } }; let gc = debugging_opts & session::GC != 0; - let debuginfo = matches.opt_present("g") || matches.opt_present("debuginfo"); + let debuginfo = if matches.opt_present("g") || matches.opt_present("debuginfo") { + FullDebugInfo + } else { + NoDebugInfo + }; let addl_lib_search_paths = matches.opt_strs("L").map(|s| { Path::new(s.as_slice()) diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index d404360bf14..10d910636fc 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -114,6 +114,13 @@ pub enum OptLevel { Aggressive // -O3 } +#[deriving(Clone, Eq)] +pub enum DebugInfoLevel { + NoDebugInfo, + LimitedDebugInfo, + FullDebugInfo, +} + #[deriving(Clone)] pub struct Options { // The crate config requested for the session, which may be combined @@ -122,7 +129,7 @@ pub struct Options { gc: bool, optimize: OptLevel, - debuginfo: bool, + debuginfo: DebugInfoLevel, lint_opts: ~[(lint::Lint, lint::level)], output_types: ~[back::link::OutputType], // This was mutable for rustpkg, which updates search paths based on the @@ -314,7 +321,7 @@ pub fn basic_options() -> @Options { crate_types: ~[], gc: false, optimize: No, - debuginfo: false, + debuginfo: NoDebugInfo, lint_opts: ~[], output_types: ~[], addl_lib_search_paths: @RefCell::new(HashSet::new()), diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 6247577c1a3..13104cfa40a 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -195,6 +195,7 @@ #[allow(non_camel_case_types)]; use back::abi; +use driver::session::FullDebugInfo; use lib::llvm::{llvm, ValueRef, BasicBlockRef}; use middle::const_eval; use middle::borrowck::root_map_key; @@ -1393,7 +1394,7 @@ fn insert_lllocals<'a>(bcx: &'a Block<'a>, llmap.get().insert(binding_info.id, datum); } - if bcx.sess().opts.debuginfo { + if bcx.sess().opts.debuginfo == FullDebugInfo { debuginfo::create_match_binding_metadata(bcx, ident, binding_info.id, @@ -2052,7 +2053,7 @@ pub fn store_arg<'a>(mut bcx: &'a Block<'a>, // like `x: T` let arg_ty = node_id_type(bcx, pat.id); if type_of::arg_is_indirect(bcx.ccx(), arg_ty) - && !bcx.ccx().sess.opts.debuginfo { + && bcx.ccx().sess.opts.debuginfo != FullDebugInfo { // Don't copy an indirect argument to an alloca, the caller // already put it in a temporary alloca and gave it up, unless // we emit extra-debug-info, which requires local allocas :(. diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index f838bcf9c5e..b9d5eb851b9 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -28,7 +28,7 @@ use back::link::{mangle_exported_name}; use back::{link, abi}; use driver::session; -use driver::session::Session; +use driver::session::{Session, NoDebugInfo, FullDebugInfo}; use driver::driver::OutputFilenames; use driver::driver::{CrateAnalysis, CrateTranslation}; use lib::llvm::{ModuleRef, ValueRef, BasicBlockRef}; @@ -1367,7 +1367,7 @@ fn copy_args_to_allocas<'a>(fcx: &FunctionContext<'a>, bcx = _match::store_arg(bcx, args[i].pat, arg_datum, arg_scope_id); - if fcx.ccx.sess.opts.debuginfo { + if fcx.ccx.sess.opts.debuginfo == FullDebugInfo { debuginfo::create_argument_metadata(bcx, &args[i]); } } @@ -2678,7 +2678,7 @@ pub fn trans_crate(sess: session::Session, } glue::emit_tydescs(ccx); - if ccx.sess.opts.debuginfo { + if ccx.sess.opts.debuginfo != NoDebugInfo { debuginfo::finalize(ccx); } diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index 2be53b92db1..aabe19deefc 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -11,6 +11,7 @@ use back::abi; use back::link::mangle_internal_name_by_path_and_seq; +use driver::session::FullDebugInfo; use lib::llvm::ValueRef; use middle::moves; use middle::trans::base::*; @@ -299,7 +300,7 @@ fn load_environment<'a>(bcx: &'a Block<'a>, cdata_ty: ty::t, // Store the pointer to closure data in an alloca for debug info because that's what the // llvm.dbg.declare intrinsic expects - let env_pointer_alloca = if bcx.ccx().sess.opts.debuginfo { + let env_pointer_alloca = if bcx.ccx().sess.opts.debuginfo == FullDebugInfo { let alloc = alloc_ty(bcx, ty::mk_mut_ptr(bcx.tcx(), cdata_ty), "__debuginfo_env_ptr"); Store(bcx, llcdata, alloc); Some(alloc) diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index b90fc4f6bbf..5011ee8be6e 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -10,6 +10,7 @@ use driver::session; +use driver::session::NoDebugInfo; use lib::llvm::{ContextRef, ModuleRef, ValueRef}; use lib::llvm::{llvm, TargetData, TypeNames}; use lib::llvm::mk_target_data; @@ -151,7 +152,7 @@ impl CrateContext { let tn = TypeNames::new(); let mut intrinsics = base::declare_intrinsics(llmod); - if sess.opts.debuginfo { + if sess.opts.debuginfo != NoDebugInfo { base::declare_dbg_intrinsics(llmod, &mut intrinsics); } let int_type = Type::int(targ_cfg.arch); @@ -165,7 +166,7 @@ impl CrateContext { tn.associate_type("str_slice", &str_slice_ty); let (crate_map_name, crate_map) = decl_crate_map(sess, link_meta.clone(), llmod); - let dbg_cx = if sess.opts.debuginfo { + let dbg_cx = if sess.opts.debuginfo != NoDebugInfo { Some(debuginfo::CrateDebugContext::new(llmod)) } else { None diff --git a/src/librustc/middle/trans/controlflow.rs b/src/librustc/middle/trans/controlflow.rs index 2aab8926223..215f36a776d 100644 --- a/src/librustc/middle/trans/controlflow.rs +++ b/src/librustc/middle/trans/controlflow.rs @@ -9,6 +9,7 @@ // except according to those terms. use lib::llvm::*; +use driver::session::FullDebugInfo; use middle::lang_items::{FailFnLangItem, FailBoundsCheckFnLangItem}; use middle::trans::base::*; use middle::trans::build::*; @@ -54,7 +55,7 @@ pub fn trans_stmt<'a>(cx: &'a Block<'a>, match d.node { ast::DeclLocal(ref local) => { bcx = init_local(bcx, *local); - if cx.sess().opts.debuginfo { + if cx.sess().opts.debuginfo == FullDebugInfo { debuginfo::create_local_var_metadata(bcx, *local); } } diff --git a/src/librustc/middle/trans/debuginfo.rs b/src/librustc/middle/trans/debuginfo.rs index fef559698ab..e88319e6d67 100644 --- a/src/librustc/middle/trans/debuginfo.rs +++ b/src/librustc/middle/trans/debuginfo.rs @@ -126,6 +126,7 @@ is still disabled, so there is no need to do anything special with source locati use driver::session; +use driver::session::{FullDebugInfo, LimitedDebugInfo, NoDebugInfo}; use lib::llvm::llvm; use lib::llvm::{ModuleRef, ContextRef, ValueRef}; use lib::llvm::debuginfo::*; @@ -530,7 +531,7 @@ pub fn create_function_debug_context(cx: &CrateContext, fn_ast_id: ast::NodeId, param_substs: Option<@param_substs>, llfn: ValueRef) -> FunctionDebugContext { - if !cx.sess.opts.debuginfo { + if cx.sess.opts.debuginfo == NoDebugInfo { return DebugInfoDisabled; } @@ -706,7 +707,7 @@ pub fn create_function_debug_context(cx: &CrateContext, fn_decl: &ast::FnDecl, param_substs: Option<@param_substs>, error_span: Span) -> DIArray { - if !cx.sess.opts.debuginfo { + if cx.sess.opts.debuginfo == LimitedDebugInfo { return create_DIArray(DIB(cx), []); } @@ -783,8 +784,8 @@ pub fn create_function_debug_context(cx: &CrateContext, name_to_append_suffix_to.push_str(","); } - // Only create type information if debuginfo is enabled - if cx.sess.opts.debuginfo { + // Only create type information if full debuginfo is enabled + if cx.sess.opts.debuginfo == FullDebugInfo { let actual_self_type_metadata = type_metadata(cx, actual_self_type, codemap::DUMMY_SP); @@ -827,8 +828,8 @@ pub fn create_function_debug_context(cx: &CrateContext, name_to_append_suffix_to.push_str(","); } - // Again, only create type information if debuginfo is enabled - if cx.sess.opts.debuginfo { + // Again, only create type information if full debuginfo is enabled + if cx.sess.opts.debuginfo == FullDebugInfo { let actual_type_metadata = type_metadata(cx, actual_type, codemap::DUMMY_SP); let param_metadata = token::get_ident(ident).get() .with_c_str(|name| { |
