From ef158f295ecd37413a11b9f01d203f7b2440cbe6 Mon Sep 17 00:00:00 2001 From: tempdragon <645703113@qq.com> Date: Thu, 29 Feb 2024 02:37:37 +0800 Subject: [PATCH] feat(debuginfo.rs): Add Comments on functions of LLVM Origin --- src/base.rs | 1 - src/debuginfo.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/base.rs b/src/base.rs index 10aaf904bca..b1d0f541702 100644 --- a/src/base.rs +++ b/src/base.rs @@ -158,7 +158,6 @@ fn module_codegen(tcx: TyCtxt<'_>, (cgu_name, target_info): (Symbol, LockedTarge if env::var("CG_GCCJIT_KEEP_INTERMEDIATES").as_deref() == Ok("1") { context.set_keep_intermediates(true); } - if env::var("CG_GCCJIT_VERBOSE").as_deref() == Ok("1") { context.add_driver_option("-v"); } diff --git a/src/debuginfo.rs b/src/debuginfo.rs index 51c5de2920b..6c3f2367063 100644 --- a/src/debuginfo.rs +++ b/src/debuginfo.rs @@ -51,7 +51,10 @@ fn set_dbg_loc(&mut self, dbg_loc: Self::DILocation) { } } -pub fn compute_mir_scopes<'gcc, 'tcx>( +/// Generate the `debug_context` in an MIR Body. +/// # Souce of Origin +/// Copied from `create_scope_map.rs` of rustc_codegen_llvm +fn compute_mir_scopes<'gcc, 'tcx>( cx: &CodegenCx<'gcc, 'tcx>, instance: Instance<'tcx>, mir: &Body<'tcx>, @@ -81,6 +84,12 @@ pub fn compute_mir_scopes<'gcc, 'tcx>( assert!(instantiated.count() == mir.source_scopes.len()); } +/// Update the `debug_context`, adding new scope to it, +/// if it's not added as is denoted in `instantiated`. +/// +/// # Souce of Origin +/// Copied from `create_scope_map.rs` of rustc_codegen_llvm +/// FIXME(tempdragon/?): Add Scope Support Here. fn make_mir_scope<'gcc, 'tcx>( cx: &CodegenCx<'gcc, 'tcx>, instance: Instance<'tcx>, @@ -123,6 +132,39 @@ fn make_mir_scope<'gcc, 'tcx>( } let loc = cx.lookup_debug_loc(scope_data.span.lo()); + + /* + // FIXME(?): Uncommented when the scope is supported. + let file_metadata = file_metadata(cx, &loc.file); + + let parent_dbg_scope = match scope_data.inlined { + Some((callee, _)) => { + // FIXME(eddyb) this would be `self.monomorphize(&callee)` + // if this is moved to `rustc_codegen_ssa::mir::debuginfo`. + let callee = cx.tcx.instantiate_and_normalize_erasing_regions( + instance.args, + ty::ParamEnv::reveal_all(), + ty::EarlyBinder::bind(callee), + ); + debug_context.inlined_function_scopes.entry(callee).or_insert_with(|| { + let callee_fn_abi = cx.fn_abi_of_instance(callee, ty::List::empty()); + cx.dbg_scope_fn(callee, callee_fn_abi, None) + }) + } + None => parent_scope.dbg_scope, + }; + + let dbg_scope = unsafe { + llvm::LLVMRustDIBuilderCreateLexicalBlock( + DIB(cx), + parent_dbg_scope, + file_metadata, + loc.line, + loc.col, + ) + }; + */ + let dbg_scope = (); let inlined_at = scope_data.inlined.map(|(_, callsite_span)| { @@ -144,8 +186,13 @@ fn make_mir_scope<'gcc, 'tcx>( instantiated.insert(scope); } -/// Copied from LLVM backend impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> { + /// Look up the file, the 1-based indexing line number and column number. + /// # Argument + /// - `pos`: `BytePos`, the starting position of a piece of code + /// # Source of Origin + /// Copied from LLVM backend(with a return type from struct to tuple). + /// No need to change since you may end up something like this. pub fn lookup_debug_loc(&self, pos: BytePos) -> (Lrc, u32, u32) { match self.sess().source_map().lookup_line(pos) { Ok(SourceFileAndLine { sf: file, line }) => { @@ -216,7 +263,6 @@ fn extend_scope_to_file( } fn debuginfo_finalize(&self) { - // TODO(antoyo): Get the debug flag/predicate to allow optional generation of debuginfo. self.context.set_debug_info(true) }