feat(debuginfo.rs): Add Comments on functions of LLVM Origin
This commit is contained in:
parent
eaeb54448e
commit
ef158f295e
@ -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") {
|
if env::var("CG_GCCJIT_KEEP_INTERMEDIATES").as_deref() == Ok("1") {
|
||||||
context.set_keep_intermediates(true);
|
context.set_keep_intermediates(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if env::var("CG_GCCJIT_VERBOSE").as_deref() == Ok("1") {
|
if env::var("CG_GCCJIT_VERBOSE").as_deref() == Ok("1") {
|
||||||
context.add_driver_option("-v");
|
context.add_driver_option("-v");
|
||||||
}
|
}
|
||||||
|
@ -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>,
|
cx: &CodegenCx<'gcc, 'tcx>,
|
||||||
instance: Instance<'tcx>,
|
instance: Instance<'tcx>,
|
||||||
mir: &Body<'tcx>,
|
mir: &Body<'tcx>,
|
||||||
@ -81,6 +84,12 @@ pub fn compute_mir_scopes<'gcc, 'tcx>(
|
|||||||
assert!(instantiated.count() == mir.source_scopes.len());
|
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>(
|
fn make_mir_scope<'gcc, 'tcx>(
|
||||||
cx: &CodegenCx<'gcc, 'tcx>,
|
cx: &CodegenCx<'gcc, 'tcx>,
|
||||||
instance: Instance<'tcx>,
|
instance: Instance<'tcx>,
|
||||||
@ -123,6 +132,39 @@ fn make_mir_scope<'gcc, 'tcx>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let loc = cx.lookup_debug_loc(scope_data.span.lo());
|
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 dbg_scope = ();
|
||||||
|
|
||||||
let inlined_at = scope_data.inlined.map(|(_, callsite_span)| {
|
let inlined_at = scope_data.inlined.map(|(_, callsite_span)| {
|
||||||
@ -144,8 +186,13 @@ fn make_mir_scope<'gcc, 'tcx>(
|
|||||||
instantiated.insert(scope);
|
instantiated.insert(scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Copied from LLVM backend
|
|
||||||
impl<'gcc, 'tcx> CodegenCx<'gcc, 'tcx> {
|
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<SourceFile>, u32, u32) {
|
pub fn lookup_debug_loc(&self, pos: BytePos) -> (Lrc<SourceFile>, u32, u32) {
|
||||||
match self.sess().source_map().lookup_line(pos) {
|
match self.sess().source_map().lookup_line(pos) {
|
||||||
Ok(SourceFileAndLine { sf: file, line }) => {
|
Ok(SourceFileAndLine { sf: file, line }) => {
|
||||||
@ -216,7 +263,6 @@ fn extend_scope_to_file(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn debuginfo_finalize(&self) {
|
fn debuginfo_finalize(&self) {
|
||||||
// TODO(antoyo): Get the debug flag/predicate to allow optional generation of debuginfo.
|
|
||||||
self.context.set_debug_info(true)
|
self.context.set_debug_info(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user