diff options
author | Andrew Wilkins <axwalk@gmail.com> | 2015-03-02 12:27:04 +0000 |
---|---|---|
committer | Andrew Wilkins <axwalk@gmail.com> | 2015-03-02 12:27:04 +0000 |
commit | 66c89ee492b0842f8cfcc9b724d6be7d9590ad2e (patch) | |
tree | a63bfb69c74d3d16a6c5e8408ca95a10323f0452 /bindings | |
parent | f94a2935ee3b2d8b8fd42bd7acf27e8b8977afdd (diff) |
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
Diffstat (limited to 'bindings')
-rw-r--r-- | bindings/go/llvm/DIBuilderBindings.cpp | 12 | ||||
-rw-r--r-- | bindings/go/llvm/DIBuilderBindings.h | 5 | ||||
-rw-r--r-- | bindings/go/llvm/dibuilder.go | 32 |
3 files changed, 49 insertions, 0 deletions
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<DIDescriptor>(Scope), unwrapDI<DIFile>(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 |