Add variables to debug info
This commit is contained in:
parent
e75c38ad85
commit
7c8a123945
2
Makefile
2
Makefile
@ -10,7 +10,7 @@ clean:
|
|||||||
rm -f $(BIN) $(SRC:.reid=.o) $(SRC:.reid=.asm) $(SRC:.reid=.ll)
|
rm -f $(BIN) $(SRC:.reid=.o) $(SRC:.reid=.asm) $(SRC:.reid=.ll)
|
||||||
|
|
||||||
$(BIN): $(SRC:.reid=.o)
|
$(BIN): $(SRC:.reid=.o)
|
||||||
$(LD) -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/crt1.o -lc $(LDFLAGS) $< -o$@
|
$(LD) -O0 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/crt1.o -lc $(LDFLAGS) $< -o$@
|
||||||
|
|
||||||
.SUFFIXES: .o .reid
|
.SUFFIXES: .o .reid
|
||||||
.reid.o:
|
.reid.o:
|
||||||
|
@ -432,7 +432,18 @@ impl DebugMetadataHolder {
|
|||||||
param.always_preserve as i32,
|
param.always_preserve as i32,
|
||||||
param.flags.as_llvm(),
|
param.flags.as_llvm(),
|
||||||
),
|
),
|
||||||
DebugMetadata::LocalVar(debug_local_variable) => todo!(),
|
DebugMetadata::LocalVar(var) => LLVMDIBuilderCreateAutoVariable(
|
||||||
|
debug.builder,
|
||||||
|
*debug.programs.get(&self.program).unwrap(),
|
||||||
|
into_cstring(var.name.clone()).as_ptr(),
|
||||||
|
var.name.len(),
|
||||||
|
debug.file_ref,
|
||||||
|
var.location.line,
|
||||||
|
*debug.types.get(&var.ty).unwrap(),
|
||||||
|
var.always_preserve as i32,
|
||||||
|
var.flags.as_llvm(),
|
||||||
|
var.alignment,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,9 +229,10 @@ pub struct DebugParamVariable {
|
|||||||
pub struct DebugLocalVariable {
|
pub struct DebugLocalVariable {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub location: DebugLocation,
|
pub location: DebugLocation,
|
||||||
pub ty: DebugMetadataValue,
|
pub ty: DebugTypeValue,
|
||||||
pub always_preserve: bool,
|
pub always_preserve: bool,
|
||||||
pub alignment: u32,
|
pub alignment: u32,
|
||||||
|
pub flags: DwarfFlags,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for DebugSubprogramOptionals {
|
impl Default for DebugSubprogramOptionals {
|
||||||
|
@ -4,8 +4,8 @@ use reid_lib::{
|
|||||||
builder::{InstructionValue, TypeValue},
|
builder::{InstructionValue, TypeValue},
|
||||||
compile::CompiledModule,
|
compile::CompiledModule,
|
||||||
debug_information::{
|
debug_information::{
|
||||||
DebugBasicType, DebugFileData, DebugInformation, DebugLocation, DebugMetadata,
|
DebugBasicType, DebugFileData, DebugInformation, DebugLocalVariable, DebugLocation,
|
||||||
DebugMetadataValue, DebugParamVariable, DebugProgramValue, DebugScopeValue,
|
DebugMetadata, DebugMetadataValue, DebugParamVariable, DebugProgramValue, DebugScopeValue,
|
||||||
DebugSubprogramData, DebugSubprogramOptionals, DebugSubprogramTypeData, DebugTypeData,
|
DebugSubprogramData, DebugSubprogramOptionals, DebugSubprogramTypeData, DebugTypeData,
|
||||||
DebugTypeValue, DwarfEncoding, DwarfFlags,
|
DebugTypeValue, DwarfEncoding, DwarfFlags,
|
||||||
},
|
},
|
||||||
@ -440,6 +440,20 @@ impl mir::Statement {
|
|||||||
ty.get_type(scope.type_values, scope.types),
|
ty.get_type(scope.type_values, scope.types),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
if let Some(debug) = &scope.debug {
|
||||||
|
let location = self.1.into_debug(scope.tokens).unwrap();
|
||||||
|
debug.info.metadata(
|
||||||
|
&debug.scope,
|
||||||
|
DebugMetadata::LocalVar(DebugLocalVariable {
|
||||||
|
name: name.clone(),
|
||||||
|
location,
|
||||||
|
ty: scope.debug_const_tys.get(&TypeKind::U32).unwrap().clone(),
|
||||||
|
always_preserve: true,
|
||||||
|
alignment: 32,
|
||||||
|
flags: DwarfFlags,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
mir::StmtKind::Set(lhs, rhs) => {
|
mir::StmtKind::Set(lhs, rhs) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user