From 4a2996cb1d334a37902e0e9aab32eb45bf22eb84 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 25 Nov 2014 21:05:04 +0000 Subject: [PATCH] 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 llvm-svn: 222790 --- llvm/bindings/go/llvm/DIBuilderBindings.cpp | 15 +++++++++++++-- llvm/bindings/go/llvm/DIBuilderBindings.h | 7 +++++++ llvm/bindings/go/llvm/dibuilder.go | 7 +++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/llvm/bindings/go/llvm/DIBuilderBindings.cpp b/llvm/bindings/go/llvm/DIBuilderBindings.cpp index 94fa96f..cb7ac8d 100644 --- a/llvm/bindings/go/llvm/DIBuilderBindings.cpp +++ b/llvm/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/llvm/bindings/go/llvm/DIBuilderBindings.h b/llvm/bindings/go/llvm/DIBuilderBindings.h index e6fe02a..4df7910 100644 --- a/llvm/bindings/go/llvm/DIBuilderBindings.h +++ b/llvm/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/llvm/bindings/go/llvm/dibuilder.go b/llvm/bindings/go/llvm/dibuilder.go index 1d07e98..bcbea93 100644 --- a/llvm/bindings/go/llvm/dibuilder.go +++ b/llvm/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 -- 1.8.3.1