From 910ebbadff4785f29253c74731d7deeb65ddb3cc Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Tue, 11 Feb 2020 16:53:03 -0500 Subject: [PATCH] Add support for LLVM 10. --- backports.cpp | 13 +++++++++++++ backports.h | 5 +++++ dibuilder.go | 16 +++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/backports.cpp b/backports.cpp index 0dd3378..260923c 100644 --- a/backports.cpp +++ b/backports.cpp @@ -3,6 +3,7 @@ #include "llvm/IR/Instructions.h" #include "llvm/Transforms/IPO/PassManagerBuilder.h" #include "llvm/Transforms/Coroutines.h" +#include "llvm-c/DebugInfo.h" namespace llvm { @@ -26,3 +27,15 @@ void LLVMGlobalObjectAddMetadata(LLVMValueRef Global, unsigned KindID, LLVMMetad llvm::GlobalObject *O = llvm::unwrap(Global); O->addMetadata(KindID, *N); } + +LLVMMetadataRef +LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type, + const char *Name, size_t NameLen, + LLVMMetadataRef File, unsigned LineNo, + LLVMMetadataRef Scope, uint32_t AlignInBits) { +#if LLVM_VERSION_MAJOR >= 10 + return LLVMDIBuilderCreateTypedef(Builder, Type, Name, NameLen, File, LineNo, Scope, AlignInBits); +#else + return LLVMDIBuilderCreateTypedef(Builder, Type, Name, NameLen, File, LineNo, Scope); +#endif +} diff --git a/backports.h b/backports.h index ca4d274..5495f63 100644 --- a/backports.h +++ b/backports.h @@ -10,6 +10,11 @@ void LLVMPassManagerBuilderAddCoroutinePassesToExtensionPoints_backport(LLVMPass void LLVMGlobalObjectAddMetadata(LLVMValueRef objValue, unsigned KindID, LLVMMetadataRef md); +LLVMMetadataRef +LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type, + const char *Name, size_t NameLen, + LLVMMetadataRef File, unsigned LineNo, + LLVMMetadataRef Scope, uint32_t AlignInBits); #ifdef __cplusplus } #endif /* defined(__cplusplus) */ diff --git a/dibuilder.go b/dibuilder.go index 775706a..04ce0fd 100644 --- a/dibuilder.go +++ b/dibuilder.go @@ -45,7 +45,7 @@ const ( FlagProtected FlagFwdDecl FlagAppleBlock - FlagBlockByrefStruct + FlagReserved FlagVirtual FlagArtificial FlagExplicit @@ -537,18 +537,19 @@ func (d *DIBuilder) CreateArrayType(t DIArrayType) Metadata { // DITypedef holds the values for creating typedef type debug metadata. type DITypedef struct { - Type Metadata - Name string - File Metadata - Line int - Context Metadata + Type Metadata + Name string + File Metadata + Line int + Context Metadata + AlignInBits uint32 } // CreateTypedef creates typedef type debug metadata. func (d *DIBuilder) CreateTypedef(t DITypedef) Metadata { name := C.CString(t.Name) defer C.free(unsafe.Pointer(name)) - result := C.LLVMDIBuilderCreateTypedef( + result := C.LLVMGoDIBuilderCreateTypedef( d.ref, t.Type.C, name, @@ -556,6 +557,7 @@ func (d *DIBuilder) CreateTypedef(t DITypedef) Metadata { t.File.C, C.unsigned(t.Line), t.Context.C, + C.uint32_t(t.AlignInBits), ) return Metadata{C: result} }