Use LLVMDIBuilder(CreateExpression|InsertDeclareRecordAtEnd)
This commit is contained in:
@@ -191,18 +191,21 @@ impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
|
||||
addr_ops.push((fragment.end - fragment.start).bits() as u64);
|
||||
}
|
||||
|
||||
let di_builder = DIB(self.cx());
|
||||
let addr_expr = unsafe {
|
||||
llvm::LLVMDIBuilderCreateExpression(di_builder, addr_ops.as_ptr(), addr_ops.len())
|
||||
};
|
||||
unsafe {
|
||||
// FIXME(eddyb) replace `llvm.dbg.declare` with `llvm.dbg.addr`.
|
||||
llvm::LLVMRustDIBuilderInsertDeclareAtEnd(
|
||||
DIB(self.cx()),
|
||||
llvm::LLVMDIBuilderInsertDeclareRecordAtEnd(
|
||||
di_builder,
|
||||
variable_alloca,
|
||||
dbg_var,
|
||||
addr_ops.as_ptr(),
|
||||
addr_ops.len() as c_uint,
|
||||
addr_expr,
|
||||
dbg_loc,
|
||||
self.llbb(),
|
||||
);
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
fn set_dbg_loc(&mut self, dbg_loc: &'ll DILocation) {
|
||||
|
||||
@@ -806,6 +806,8 @@ unsafe extern "C" {
|
||||
pub(crate) type Metadata;
|
||||
pub(crate) type BasicBlock;
|
||||
pub(crate) type Comdat;
|
||||
/// `&'ll DbgRecord` represents `LLVMDbgRecordRef`.
|
||||
pub(crate) type DbgRecord;
|
||||
}
|
||||
#[repr(C)]
|
||||
pub(crate) struct Builder<'a>(InvariantOpaque<'a>);
|
||||
@@ -2000,6 +2002,21 @@ unsafe extern "C" {
|
||||
Data: *const Option<&'ll Metadata>,
|
||||
NumElements: size_t,
|
||||
) -> &'ll Metadata;
|
||||
|
||||
pub(crate) fn LLVMDIBuilderCreateExpression<'ll>(
|
||||
Builder: &DIBuilder<'ll>,
|
||||
Addr: *const u64,
|
||||
Length: size_t,
|
||||
) -> &'ll Metadata;
|
||||
|
||||
pub(crate) fn LLVMDIBuilderInsertDeclareRecordAtEnd<'ll>(
|
||||
Builder: &DIBuilder<'ll>,
|
||||
Storage: &'ll Value,
|
||||
VarInfo: &'ll Metadata,
|
||||
Expr: &'ll Metadata,
|
||||
DebugLoc: &'ll Metadata,
|
||||
Block: &'ll BasicBlock,
|
||||
) -> &'ll DbgRecord;
|
||||
}
|
||||
|
||||
#[link(name = "llvm-wrapper", kind = "static")]
|
||||
@@ -2381,16 +2398,6 @@ unsafe extern "C" {
|
||||
AlignInBits: u32,
|
||||
) -> &'a DIVariable;
|
||||
|
||||
pub(crate) fn LLVMRustDIBuilderInsertDeclareAtEnd<'a>(
|
||||
Builder: &DIBuilder<'a>,
|
||||
Val: &'a Value,
|
||||
VarInfo: &'a DIVariable,
|
||||
AddrOps: *const u64,
|
||||
AddrOpsCount: c_uint,
|
||||
DL: &'a DILocation,
|
||||
InsertAtEnd: &'a BasicBlock,
|
||||
);
|
||||
|
||||
pub(crate) fn LLVMRustDIBuilderCreateEnumerator<'a>(
|
||||
Builder: &DIBuilder<'a>,
|
||||
Name: *const c_char,
|
||||
|
||||
Reference in New Issue
Block a user