From 5a4bf227a915525912f8cfdb28270746678591d9 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 25 Nov 2014 21:05:04 +0000 Subject: [PATCH 1/1] Go bindings: add DIBuilder.InsertValueAtEnd Expose llvm::DIBuilder::insertDbgValueIntrinsic as DIBuilder.InsertValueAtEnd in the Go bindings, to support attaching debug metadata to register values. Patch by Andrew Wilkins! Differential Revision: http://reviews.llvm.org/D6374 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222790 91177308-0d34-0410-b5e6-96231b3b80d8 --- bindings/go/llvm/DIBuilderBindings.cpp | 15 +++++++++++++-- bindings/go/llvm/DIBuilderBindings.h | 7 +++++++ bindings/go/llvm/dibuilder.go | 7 +++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/bindings/go/llvm/DIBuilderBindings.cpp b/bindings/go/llvm/DIBuilderBindings.cpp index 94fa96f20e3..cb7ac8ddd9c 100644 --- a/bindings/go/llvm/DIBuilderBindings.cpp +++ b/bindings/go/llvm/DIBuilderBindings.cpp @@ -19,8 +19,7 @@ using namespace llvm; namespace { -template -T unwrapDI(LLVMValueRef v) { +template T unwrapDI(LLVMValueRef v) { return v ? T(unwrap(v)) : T(); } } @@ -220,3 +219,15 @@ LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Dref, unwrapDI(Expr), unwrap(Block)); return wrap(Instr); } + +LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef Dref, + LLVMValueRef Val, uint64_t Offset, + LLVMValueRef VarInfo, + LLVMValueRef Expr, + LLVMBasicBlockRef Block) { + DIBuilder *D = unwrap(Dref); + Instruction *Instr = D->insertDbgValueIntrinsic( + unwrap(Val), Offset, unwrapDI(VarInfo), + unwrapDI(Expr), unwrap(Block)); + return wrap(Instr); +} diff --git a/bindings/go/llvm/DIBuilderBindings.h b/bindings/go/llvm/DIBuilderBindings.h index e6fe02a9387..4df79108c6b 100644 --- a/bindings/go/llvm/DIBuilderBindings.h +++ b/bindings/go/llvm/DIBuilderBindings.h @@ -116,6 +116,13 @@ LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef D, LLVMValueRef Expr, LLVMBasicBlockRef Block); +LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef D, + LLVMValueRef Val, + uint64_t Offset, + LLVMValueRef VarInfo, + LLVMValueRef Expr, + LLVMBasicBlockRef Block); + #ifdef __cplusplus } // extern "C" #endif diff --git a/bindings/go/llvm/dibuilder.go b/bindings/go/llvm/dibuilder.go index 1d07e98c839..bcbea93a44e 100644 --- a/bindings/go/llvm/dibuilder.go +++ b/bindings/go/llvm/dibuilder.go @@ -484,6 +484,13 @@ func (d *DIBuilder) InsertDeclareAtEnd(v, diVarInfo, expr Value, bb BasicBlock) return Value{C: result} } +// InsertValueAtEnd inserts a call to llvm.dbg.value at the end of the +// specified basic block for the given value and associated debug metadata. +func (d *DIBuilder) InsertValueAtEnd(v, diVarInfo, expr Value, offset uint64, bb BasicBlock) Value { + result := C.LLVMDIBuilderInsertValueAtEnd(d.ref, v.C, C.uint64_t(offset), diVarInfo.C, expr.C, bb.C) + return Value{C: result} +} + func boolToCInt(v bool) C.int { if v { return 1 -- 2.34.1