From 66c89ee492b0842f8cfcc9b724d6be7d9590ad2e Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Mon, 2 Mar 2015 12:27:04 +0000 Subject: [PATCH] bindings/go: expose DIBuilder::createReplaceableCompositeType Summary: We extend the DIBuilder type, adding a method for creating replaceable composite types. This is necessary for creating debug info describing self-referential types. Reviewers: pcc Reviewed By: pcc Subscribers: axw, llvm-commits Differential Revision: http://reviews.llvm.org/D7851 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230951 91177308-0d34-0410-b5e6-96231b3b80d8 --- bindings/go/llvm/DIBuilderBindings.cpp | 12 ++++++++++ bindings/go/llvm/DIBuilderBindings.h | 5 ++++ bindings/go/llvm/dibuilder.go | 32 ++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/bindings/go/llvm/DIBuilderBindings.cpp b/bindings/go/llvm/DIBuilderBindings.cpp index a7d75a361d7..f39198df42d 100644 --- a/bindings/go/llvm/DIBuilderBindings.cpp +++ b/bindings/go/llvm/DIBuilderBindings.cpp @@ -146,6 +146,18 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( return wrap(CT); } +LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType( + LLVMDIBuilderRef Dref, unsigned Tag, const char *Name, + LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line, + unsigned RuntimeLang, uint64_t SizeInBits, uint64_t AlignInBits, + unsigned Flags) { + DIBuilder *D = unwrap(Dref); + DICompositeType CT = D->createReplaceableCompositeType( + Tag, Name, unwrapDI(Scope), unwrapDI(File), Line, + RuntimeLang, SizeInBits, AlignInBits, Flags); + return wrap(CT); +} + LLVMMetadataRef LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, const char *Name, LLVMMetadataRef File, diff --git a/bindings/go/llvm/DIBuilderBindings.h b/bindings/go/llvm/DIBuilderBindings.h index e268b3c9324..a4fba278418 100644 --- a/bindings/go/llvm/DIBuilderBindings.h +++ b/bindings/go/llvm/DIBuilderBindings.h @@ -84,6 +84,11 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( uint64_t AlignInBits, unsigned Flags, LLVMMetadataRef DerivedFrom, LLVMMetadataRef ElementTypes); +LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType( + LLVMDIBuilderRef D, unsigned Tag, const char *Name, LLVMMetadataRef Scope, + LLVMMetadataRef File, unsigned Line, unsigned RuntimeLang, + uint64_t SizeInBits, uint64_t AlignInBits, unsigned Flags); + LLVMMetadataRef LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name, LLVMMetadataRef File, diff --git a/bindings/go/llvm/dibuilder.go b/bindings/go/llvm/dibuilder.go index 3b1a1a64545..f03f740b777 100644 --- a/bindings/go/llvm/dibuilder.go +++ b/bindings/go/llvm/dibuilder.go @@ -343,6 +343,38 @@ func (d *DIBuilder) CreateStructType(scope Metadata, t DIStructType) Metadata { return Metadata{C: result} } +// DIReplaceableCompositeType holds the values for creating replaceable +// composite type debug metadata. +type DIReplaceableCompositeType struct { + Tag dwarf.Tag + Name string + File Metadata + Line int + RuntimeLang int + SizeInBits uint64 + AlignInBits uint64 + Flags int +} + +// CreateReplaceableCompositeType creates replaceable composite type debug metadata. +func (d *DIBuilder) CreateReplaceableCompositeType(scope Metadata, t DIReplaceableCompositeType) Metadata { + name := C.CString(t.Name) + defer C.free(unsafe.Pointer(name)) + result := C.LLVMDIBuilderCreateReplaceableCompositeType( + d.ref, + C.unsigned(t.Tag), + name, + scope.C, + t.File.C, + C.unsigned(t.Line), + C.unsigned(t.RuntimeLang), + C.uint64_t(t.SizeInBits), + C.uint64_t(t.AlignInBits), + C.unsigned(t.Flags), + ) + return Metadata{C: result} +} + // DIMemberType holds the values for creating member type debug metadata. type DIMemberType struct { Name string -- 2.34.1