summaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorHarlan Haskins <harlan@harlanhaskins.com>2018-04-02 00:17:40 +0000
committerHarlan Haskins <harlan@harlanhaskins.com>2018-04-02 00:17:40 +0000
commit80548aa3fb95eba87b03ca058b598699f7d98143 (patch)
treea12061efd5cd47549b46966f7213ac2cd0da1922 /bindings
parent6ce22ba1deab25701700b2ee7ac61af312d7cfda (diff)
Add C API bindings for DIBuilder 'Type' APIs
This patch adds a set of unstable C API bindings to the DIBuilder interface for creating structure, function, and aggregate types. This patch also removes the existing implementations of these functions from the Go bindings and updates the Go API to fit the new C APIs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328953 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings')
-rw-r--r--bindings/go/llvm/DIBuilderBindings.cpp86
-rw-r--r--bindings/go/llvm/DIBuilderBindings.h43
-rw-r--r--bindings/go/llvm/dibuilder.go84
3 files changed, 57 insertions, 156 deletions
diff --git a/bindings/go/llvm/DIBuilderBindings.cpp b/bindings/go/llvm/DIBuilderBindings.cpp
index ea53694b9c1..9083bd39e0a 100644
--- a/bindings/go/llvm/DIBuilderBindings.cpp
+++ b/bindings/go/llvm/DIBuilderBindings.cpp
@@ -19,16 +19,6 @@
using namespace llvm;
-LLVMDIBuilderRef LLVMNewDIBuilder(LLVMModuleRef mref) {
- Module *m = unwrap(mref);
- return wrap(new DIBuilder(*m));
-}
-
-void LLVMDIBuilderDestroy(LLVMDIBuilderRef dref) {
- DIBuilder *d = unwrap(dref);
- delete d;
-}
-
LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef Dref,
LLVMMetadataRef Scope,
LLVMMetadataRef File,
@@ -83,82 +73,6 @@ LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
unwrap<DIType>(Ty), AlwaysPreserve, static_cast<DINode::DIFlags>(Flags)));
}
-LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Dref,
- const char *Name,
- uint64_t SizeInBits,
- unsigned Encoding) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createBasicType(Name, SizeInBits, Encoding));
-}
-
-LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef Dref,
- LLVMMetadataRef PointeeType,
- uint64_t SizeInBits,
- uint32_t AlignInBits,
- const char *Name) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createPointerType(unwrap<DIType>(PointeeType), SizeInBits,
- AlignInBits, /* DWARFAddressSpace */ None,
- Name));
-}
-
-LLVMMetadataRef
-LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Dref, LLVMMetadataRef File,
- LLVMMetadataRef ParameterTypes) {
- DIBuilder *D = unwrap(Dref);
- return wrap(
- D->createSubroutineType(DITypeRefArray(unwrap<MDTuple>(ParameterTypes))));
-}
-
-LLVMMetadataRef LLVMDIBuilderCreateStructType(
- LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, const char *Name,
- LLVMMetadataRef File, unsigned Line, uint64_t SizeInBits,
- uint32_t AlignInBits, unsigned Flags, LLVMMetadataRef DerivedFrom,
- LLVMMetadataRef ElementTypes) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createStructType(
- unwrap<DIScope>(Scope), Name, File ? unwrap<DIFile>(File) : nullptr, Line,
- SizeInBits, AlignInBits, static_cast<DINode::DIFlags>(Flags),
- DerivedFrom ? unwrap<DIType>(DerivedFrom) : nullptr,
- ElementTypes ? DINodeArray(unwrap<MDTuple>(ElementTypes)) : nullptr));
-}
-
-LLVMMetadataRef LLVMDIBuilderCreateReplaceableCompositeType(
- LLVMDIBuilderRef Dref, unsigned Tag, const char *Name,
- LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
- unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
- unsigned Flags) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createReplaceableCompositeType(
- Tag, Name, unwrap<DIScope>(Scope), File ? unwrap<DIFile>(File) : nullptr,
- Line, RuntimeLang, SizeInBits, AlignInBits,
- static_cast<DINode::DIFlags>(Flags)));
-}
-
-LLVMMetadataRef
-LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef Dref, LLVMMetadataRef Scope,
- const char *Name, LLVMMetadataRef File,
- unsigned Line, uint64_t SizeInBits,
- uint32_t AlignInBits, uint64_t OffsetInBits,
- unsigned Flags, LLVMMetadataRef Ty) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createMemberType(
- unwrap<DIScope>(Scope), Name, File ? unwrap<DIFile>(File) : nullptr, Line,
- SizeInBits, AlignInBits, OffsetInBits,
- static_cast<DINode::DIFlags>(Flags), unwrap<DIType>(Ty)));
-}
-
-LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Dref,
- uint64_t SizeInBits,
- uint32_t AlignInBits,
- LLVMMetadataRef ElementType,
- LLVMMetadataRef Subscripts) {
- DIBuilder *D = unwrap(Dref);
- return wrap(D->createArrayType(SizeInBits, AlignInBits,
- unwrap<DIType>(ElementType),
- DINodeArray(unwrap<MDTuple>(Subscripts))));
-}
-
LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Dref,
LLVMMetadataRef Ty, const char *Name,
LLVMMetadataRef File, unsigned Line,
diff --git a/bindings/go/llvm/DIBuilderBindings.h b/bindings/go/llvm/DIBuilderBindings.h
index cc5d2c1177f..a3063fa52e4 100644
--- a/bindings/go/llvm/DIBuilderBindings.h
+++ b/bindings/go/llvm/DIBuilderBindings.h
@@ -28,10 +28,6 @@ extern "C" {
typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
-LLVMDIBuilderRef LLVMNewDIBuilder(LLVMModuleRef m);
-
-void LLVMDIBuilderDestroy(LLVMDIBuilderRef d);
-
LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(LLVMDIBuilderRef D,
LLVMMetadataRef Scope,
LLVMMetadataRef File,
@@ -58,45 +54,6 @@ LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, int AlwaysPreserve,
unsigned Flags);
-LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef D,
- const char *Name,
- uint64_t SizeInBits,
- unsigned Encoding);
-
-LLVMMetadataRef LLVMDIBuilderCreatePointerType(LLVMDIBuilderRef D,
- LLVMMetadataRef PointeeType,
- uint64_t SizeInBits,
- uint32_t AlignInBits,
- const char *Name);
-
-LLVMMetadataRef
-LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef D, LLVMMetadataRef File,
- LLVMMetadataRef ParameterTypes);
-
-LLVMMetadataRef LLVMDIBuilderCreateStructType(
- LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name,
- LLVMMetadataRef File, unsigned Line, uint64_t SizeInBits,
- uint32_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, uint32_t AlignInBits, unsigned Flags);
-
-LLVMMetadataRef
-LLVMDIBuilderCreateMemberType(LLVMDIBuilderRef D, LLVMMetadataRef Scope,
- const char *Name, LLVMMetadataRef File,
- unsigned Line, uint64_t SizeInBits,
- uint32_t AlignInBits, uint64_t OffsetInBits,
- unsigned Flags, LLVMMetadataRef Ty);
-
-LLVMMetadataRef LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef D,
- uint64_t SizeInBits,
- uint32_t AlignInBits,
- LLVMMetadataRef ElementType,
- LLVMMetadataRef Subscripts);
-
LLVMMetadataRef LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef D,
LLVMMetadataRef Ty, const char *Name,
LLVMMetadataRef File, unsigned Line,
diff --git a/bindings/go/llvm/dibuilder.go b/bindings/go/llvm/dibuilder.go
index 475fa685cc4..72131bd2afc 100644
--- a/bindings/go/llvm/dibuilder.go
+++ b/bindings/go/llvm/dibuilder.go
@@ -95,13 +95,13 @@ type DIBuilder struct {
// NewDIBuilder creates a new DIBuilder, associated with the given module.
func NewDIBuilder(m Module) *DIBuilder {
- d := C.LLVMNewDIBuilder(m.C)
+ d := C.LLVMCreateDIBuilder(m.C)
return &DIBuilder{ref: d, m: m}
}
// Destroy destroys the DIBuilder.
func (d *DIBuilder) Destroy() {
- C.LLVMDIBuilderDestroy(d.ref)
+ C.LLVMDisposeDIBuilder(d.ref)
}
// FInalize finalizes the debug information generated by the DIBuilder.
@@ -147,7 +147,7 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata {
return Metadata{C: result}
}
-// CreateCompileUnit creates file debug metadata.
+// CreateFile creates file debug metadata.
func (d *DIBuilder) CreateFile(filename, dir string) Metadata {
cfilename := C.CString(filename)
defer C.free(unsafe.Pointer(cfilename))
@@ -166,7 +166,7 @@ type DILexicalBlock struct {
Column int
}
-// CreateCompileUnit creates lexical block debug metadata.
+// CreateLexicalBlock creates lexical block debug metadata.
func (d *DIBuilder) CreateLexicalBlock(diScope Metadata, b DILexicalBlock) Metadata {
result := C.LLVMDIBuilderCreateLexicalBlock(
d.ref,
@@ -198,7 +198,7 @@ type DIFunction struct {
Optimized bool
}
-// CreateCompileUnit creates function debug metadata.
+// CreateFunction creates function debug metadata.
func (d *DIBuilder) CreateFunction(diScope Metadata, f DIFunction) Metadata {
name := C.CString(f.Name)
defer C.free(unsafe.Pointer(name))
@@ -296,7 +296,8 @@ func (d *DIBuilder) CreateBasicType(t DIBasicType) Metadata {
result := C.LLVMDIBuilderCreateBasicType(
d.ref,
name,
- C.uint64_t(t.SizeInBits),
+ C.size_t(len(t.Name)),
+ C.unsigned(t.SizeInBits),
C.unsigned(t.Encoding),
)
return Metadata{C: result}
@@ -307,19 +308,22 @@ type DIPointerType struct {
Pointee Metadata
SizeInBits uint64
AlignInBits uint32 // optional
+ AddressSpace uint32
Name string // optional
}
-// CreateBasicType creates basic type debug metadata.
+// CreatePointerType creates a type that represents a pointer to another type.
func (d *DIBuilder) CreatePointerType(t DIPointerType) Metadata {
name := C.CString(t.Name)
defer C.free(unsafe.Pointer(name))
result := C.LLVMDIBuilderCreatePointerType(
d.ref,
t.Pointee.C,
- C.uint64_t(t.SizeInBits),
- C.uint32_t(t.AlignInBits),
+ C.unsigned(t.SizeInBits),
+ C.unsigned(t.AlignInBits),
+ C.unsigned(t.AddressSpace),
name,
+ C.size_t(len(t.Name)),
)
return Metadata{C: result}
}
@@ -332,12 +336,20 @@ type DISubroutineType struct {
// Parameters contains the subroutine parameter types,
// including the return type at the 0th index.
Parameters []Metadata
+
+ Flags int
}
// CreateSubroutineType creates subroutine type debug metadata.
func (d *DIBuilder) CreateSubroutineType(t DISubroutineType) Metadata {
- params := d.getOrCreateTypeArray(t.Parameters)
- result := C.LLVMDIBuilderCreateSubroutineType(d.ref, t.File.C, params.C)
+ params, length := llvmMetadataRefs(t.Parameters)
+ result := C.LLVMDIBuilderCreateSubroutineType(
+ d.ref,
+ t.File.C,
+ params,
+ length,
+ C.LLVMDIFlags(t.Flags),
+ )
return Metadata{C: result}
}
@@ -351,24 +363,34 @@ type DIStructType struct {
Flags int
DerivedFrom Metadata
Elements []Metadata
+ VTableHolder Metadata // optional
+ UniqueID string
}
// CreateStructType creates struct type debug metadata.
func (d *DIBuilder) CreateStructType(scope Metadata, t DIStructType) Metadata {
- elements := d.getOrCreateArray(t.Elements)
+ elements, length := llvmMetadataRefs(t.Elements)
name := C.CString(t.Name)
+ uniqueID := C.CString(t.UniqueID)
defer C.free(unsafe.Pointer(name))
+ defer C.free(unsafe.Pointer(uniqueID))
result := C.LLVMDIBuilderCreateStructType(
d.ref,
scope.C,
name,
+ C.size_t(len(t.Name)),
t.File.C,
C.unsigned(t.Line),
- C.uint64_t(t.SizeInBits),
- C.uint32_t(t.AlignInBits),
- C.unsigned(t.Flags),
+ C.unsigned(t.SizeInBits),
+ C.unsigned(t.AlignInBits),
+ C.LLVMDIFlags(t.Flags),
t.DerivedFrom.C,
- elements.C,
+ elements,
+ length,
+ C.unsigned(0), // Optional Objective-C runtime version.
+ t.VTableHolder.C,
+ uniqueID,
+ C.uint64_t(len(t.UniqueID)),
)
return Metadata{C: result}
}
@@ -384,23 +406,29 @@ type DIReplaceableCompositeType struct {
SizeInBits uint64
AlignInBits uint32
Flags int
+ UniqueID string
}
// CreateReplaceableCompositeType creates replaceable composite type debug metadata.
func (d *DIBuilder) CreateReplaceableCompositeType(scope Metadata, t DIReplaceableCompositeType) Metadata {
name := C.CString(t.Name)
+ uniqueID := C.CString(t.UniqueID)
defer C.free(unsafe.Pointer(name))
+ defer C.free(unsafe.Pointer(uniqueID))
result := C.LLVMDIBuilderCreateReplaceableCompositeType(
d.ref,
C.unsigned(t.Tag),
name,
+ C.size_t(len(t.Name)),
scope.C,
t.File.C,
C.unsigned(t.Line),
C.unsigned(t.RuntimeLang),
- C.uint64_t(t.SizeInBits),
- C.uint32_t(t.AlignInBits),
- C.unsigned(t.Flags),
+ C.unsigned(t.SizeInBits),
+ C.unsigned(t.AlignInBits),
+ C.LLVMDIFlags(t.Flags),
+ uniqueID,
+ C.size_t(len(t.UniqueID)),
)
return Metadata{C: result}
}
@@ -425,12 +453,13 @@ func (d *DIBuilder) CreateMemberType(scope Metadata, t DIMemberType) Metadata {
d.ref,
scope.C,
name,
+ C.size_t(len(t.Name)),
t.File.C,
C.unsigned(t.Line),
- C.uint64_t(t.SizeInBits),
- C.uint32_t(t.AlignInBits),
- C.uint64_t(t.OffsetInBits),
- C.unsigned(t.Flags),
+ C.unsigned(t.SizeInBits),
+ C.unsigned(t.AlignInBits),
+ C.unsigned(t.OffsetInBits),
+ C.LLVMDIFlags(t.Flags),
t.Type.C,
)
return Metadata{C: result}
@@ -456,13 +485,14 @@ func (d *DIBuilder) CreateArrayType(t DIArrayType) Metadata {
for i, s := range t.Subscripts {
subscriptsSlice[i] = d.getOrCreateSubrange(s.Lo, s.Count)
}
- subscripts := d.getOrCreateArray(subscriptsSlice)
+ subscripts, length := llvmMetadataRefs(subscriptsSlice)
result := C.LLVMDIBuilderCreateArrayType(
d.ref,
- C.uint64_t(t.SizeInBits),
- C.uint32_t(t.AlignInBits),
+ C.unsigned(t.SizeInBits),
+ C.unsigned(t.AlignInBits),
t.ElementType.C,
- subscripts.C,
+ subscripts,
+ length,
)
return Metadata{C: result}
}