|
|
@ -9,6 +9,7 @@ |
|
|
|
#include "Interop.h" |
|
|
|
#include "Interop.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <llvm/Support/Path.h> |
|
|
|
#include <llvm/Support/Path.h> |
|
|
|
|
|
|
|
#include <llvm/Support/raw_ostream.h> |
|
|
|
#include <llvm/Object/Archive.h> |
|
|
|
#include <llvm/Object/Archive.h> |
|
|
|
#include <llvm/Object/ObjectFile.h> |
|
|
|
#include <llvm/Object/ObjectFile.h> |
|
|
|
#include <llvm/IR/LLVMContext.h> |
|
|
|
#include <llvm/IR/LLVMContext.h> |
|
|
@ -508,11 +509,10 @@ void Parser::WalkVTable(clang::CXXRecordDecl* RD, CppSharp::AST::Class^ C) |
|
|
|
auto& VFPtrInfo = *I; |
|
|
|
auto& VFPtrInfo = *I; |
|
|
|
|
|
|
|
|
|
|
|
CppSharp::AST::VFTableInfo Info; |
|
|
|
CppSharp::AST::VFTableInfo Info; |
|
|
|
Info.VBTableIndex = VFPtrInfo.VBTableIndex; |
|
|
|
Info.VFPtrOffset = VFPtrInfo->NonVirtualOffset.getQuantity(); |
|
|
|
Info.VFPtrOffset = VFPtrInfo.VFPtrOffset.getQuantity(); |
|
|
|
Info.VFPtrFullOffset = VFPtrInfo->FullOffsetInMDC.getQuantity(); |
|
|
|
Info.VFPtrFullOffset = VFPtrInfo.VFPtrFullOffset.getQuantity(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto& VTLayout = VTContext.getVFTableLayout(RD, VFPtrInfo.VFPtrFullOffset); |
|
|
|
auto& VTLayout = VTContext.getVFTableLayout(RD, VFPtrInfo->FullOffsetInMDC); |
|
|
|
Info.Layout = WalkVTableLayout(VTLayout); |
|
|
|
Info.Layout = WalkVTableLayout(VTLayout); |
|
|
|
|
|
|
|
|
|
|
|
C->Layout->VFTables->Add(Info); |
|
|
|
C->Layout->VFTables->Add(Info); |
|
|
@ -2644,24 +2644,26 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File, |
|
|
|
for(auto it = Object.get()->symbol_begin(); it != Object.get()->symbol_end(); |
|
|
|
for(auto it = Object.get()->symbol_begin(); it != Object.get()->symbol_end(); |
|
|
|
++it) |
|
|
|
++it) |
|
|
|
{ |
|
|
|
{ |
|
|
|
llvm::StringRef SymRef; |
|
|
|
std::string Sym; |
|
|
|
|
|
|
|
llvm::raw_string_ostream SymStream(Sym); |
|
|
|
|
|
|
|
|
|
|
|
if (it->getName(SymRef)) |
|
|
|
if (it->printName(SymStream)) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
System::String^ SymName = clix::marshalString<clix::E_UTF8>(SymRef); |
|
|
|
System::String^ SymName = clix::marshalString<clix::E_UTF8>(Sym); |
|
|
|
NativeLib->Symbols->Add(SymName); |
|
|
|
NativeLib->Symbols->Add(SymName); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for(auto it = Object.get()->symbol_begin(); it != Object.get()->symbol_end(); |
|
|
|
for(auto it = Object.get()->symbol_begin(); it != Object.get()->symbol_end(); |
|
|
|
++it) |
|
|
|
++it) |
|
|
|
{ |
|
|
|
{ |
|
|
|
llvm::StringRef SymRef; |
|
|
|
std::string Sym; |
|
|
|
|
|
|
|
llvm::raw_string_ostream SymStream(Sym); |
|
|
|
|
|
|
|
|
|
|
|
if (it->getName(SymRef)) |
|
|
|
if (it->printName(SymStream)) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
System::String^ SymName = clix::marshalString<clix::E_UTF8>(SymRef); |
|
|
|
System::String^ SymName = clix::marshalString<clix::E_UTF8>(Sym); |
|
|
|
NativeLib->Symbols->Add(SymName); |
|
|
|
NativeLib->Symbols->Add(SymName); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|