diff --git a/src/AST/SymbolContext.cs b/src/AST/SymbolContext.cs
index b865322d..c6beff8d 100644
--- a/src/AST/SymbolContext.cs
+++ b/src/AST/SymbolContext.cs
@@ -2,6 +2,14 @@
namespace CppSharp.AST
{
+ public enum ArchType
+ {
+ UnknownArch,
+
+ x86, // X86: i[3-9]86
+ x86_64 // X86-64: amd64, x86_64
+ }
+
///
/// Represents a shared library or a static library archive.
///
@@ -24,6 +32,8 @@ namespace CppSharp.AST
///
public string FileName;
+ public ArchType ArchType { get; set; }
+
///
/// Symbols gathered from the library.
///
diff --git a/src/Core/Parser/Parser.cs b/src/Core/Parser/Parser.cs
index cdb0cdd4..a3455101 100644
--- a/src/Core/Parser/Parser.cs
+++ b/src/Core/Parser/Parser.cs
@@ -1,4 +1,5 @@
using System;
+using CppSharp.AST;
using CppSharp.Parser;
using ASTContext = CppSharp.Parser.AST.ASTContext;
using NativeLibrary = CppSharp.Parser.AST.NativeLibrary;
@@ -95,7 +96,11 @@ namespace CppSharp
public static AST.NativeLibrary ConvertLibrary(NativeLibrary library)
{
- var newLibrary = new AST.NativeLibrary { FileName = library.FileName };
+ var newLibrary = new AST.NativeLibrary
+ {
+ FileName = library.FileName,
+ ArchType = (ArchType) library.ArchType
+ };
for (uint i = 0; i < library.SymbolsCount; ++i)
{
diff --git a/src/CppParser/AST.cpp b/src/CppParser/AST.cpp
index 964bbb28..3f0afa09 100644
--- a/src/CppParser/AST.cpp
+++ b/src/CppParser/AST.cpp
@@ -578,6 +578,11 @@ TranslationUnit::TranslationUnit() { Kind = DeclarationKind::TranslationUnit; }
DEF_STRING(TranslationUnit, FileName)
DEF_VECTOR(TranslationUnit, MacroDefinition*, Macros)
+NativeLibrary::NativeLibrary()
+ : ArchType(ArchType::UnknownArch)
+{
+}
+
// NativeLibrary
DEF_STRING(NativeLibrary, FileName)
DEF_VECTOR_STRING(NativeLibrary, Symbols)
diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h
index fed306ea..744b1705 100644
--- a/src/CppParser/AST.h
+++ b/src/CppParser/AST.h
@@ -796,9 +796,19 @@ public:
VECTOR(MacroDefinition*, Macros)
};
-struct CS_API NativeLibrary
+enum class ArchType
{
+ UnknownArch,
+ x86,
+ x86_64
+};
+
+class CS_API NativeLibrary
+{
+public:
+ NativeLibrary();
STRING(FileName)
+ ArchType ArchType;
VECTOR_STRING(Symbols)
VECTOR_STRING(Dependencies)
};
diff --git a/src/CppParser/Bindings/CLI/AST.cpp b/src/CppParser/Bindings/CLI/AST.cpp
index 2fc066b5..8ed42504 100644
--- a/src/CppParser/Bindings/CLI/AST.cpp
+++ b/src/CppParser/Bindings/CLI/AST.cpp
@@ -2940,6 +2940,11 @@ CppSharp::Parser::AST::NativeLibrary::NativeLibrary(System::IntPtr native)
NativePtr = __native;
}
+CppSharp::Parser::AST::NativeLibrary::NativeLibrary()
+{
+ NativePtr = new ::CppSharp::CppParser::AST::NativeLibrary();
+}
+
System::String^ CppSharp::Parser::AST::NativeLibrary::getSymbols(unsigned int i)
{
auto __ret = ((::CppSharp::CppParser::AST::NativeLibrary*)NativePtr)->getSymbols(i);
@@ -2978,11 +2983,6 @@ void CppSharp::Parser::AST::NativeLibrary::clearDependencies()
((::CppSharp::CppParser::AST::NativeLibrary*)NativePtr)->clearDependencies();
}
-CppSharp::Parser::AST::NativeLibrary::NativeLibrary()
-{
- NativePtr = new ::CppSharp::CppParser::AST::NativeLibrary();
-}
-
System::IntPtr CppSharp::Parser::AST::NativeLibrary::__Instance::get()
{
return System::IntPtr(NativePtr);
@@ -3019,6 +3019,16 @@ unsigned int CppSharp::Parser::AST::NativeLibrary::DependenciesCount::get()
return __ret;
}
+CppSharp::Parser::AST::ArchType CppSharp::Parser::AST::NativeLibrary::ArchType::get()
+{
+ return (CppSharp::Parser::AST::ArchType)((::CppSharp::CppParser::AST::NativeLibrary*)NativePtr)->ArchType;
+}
+
+void CppSharp::Parser::AST::NativeLibrary::ArchType::set(CppSharp::Parser::AST::ArchType value)
+{
+ ((::CppSharp::CppParser::AST::NativeLibrary*)NativePtr)->ArchType = (::CppSharp::CppParser::AST::ArchType)value;
+}
+
CppSharp::Parser::AST::ASTContext::ASTContext(::CppSharp::CppParser::AST::ASTContext* native)
{
NativePtr = native;
diff --git a/src/CppParser/Bindings/CLI/AST.h b/src/CppParser/Bindings/CLI/AST.h
index 47e2c2ef..3e4f6149 100644
--- a/src/CppParser/Bindings/CLI/AST.h
+++ b/src/CppParser/Bindings/CLI/AST.h
@@ -11,6 +11,7 @@ namespace CppSharp
namespace AST
{
enum struct AccessSpecifier;
+ enum struct ArchType;
enum struct CXXMethodKind;
enum struct CXXOperatorKind;
enum struct CallingConvention;
@@ -292,6 +293,13 @@ namespace CppSharp
FunctionBody = 5
};
+ public enum struct ArchType
+ {
+ UnknownArch = 0,
+ x86 = 1,
+ x86_64 = 2
+ };
+
public ref class Type : ICppInstance
{
public:
@@ -1963,6 +1971,12 @@ namespace CppSharp
unsigned int get();
}
+ property CppSharp::Parser::AST::ArchType ArchType
+ {
+ CppSharp::Parser::AST::ArchType get();
+ void set(CppSharp::Parser::AST::ArchType);
+ }
+
System::String^ getSymbols(unsigned int i);
void addSymbols(System::String^ s);
diff --git a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
index 441b81f3..ab7be822 100644
--- a/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
+++ b/src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/AST.cs
@@ -216,6 +216,13 @@ namespace CppSharp
FunctionBody = 5
}
+ public enum ArchType
+ {
+ UnknownArch = 0,
+ x86 = 1,
+ x86_64 = 2
+ }
+
public unsafe partial class Type : IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
@@ -7562,13 +7569,16 @@ namespace CppSharp
public unsafe partial class NativeLibrary : IDisposable
{
- [StructLayout(LayoutKind.Explicit, Size = 36)]
+ [StructLayout(LayoutKind.Explicit, Size = 40)]
public partial struct Internal
{
+ [FieldOffset(12)]
+ public CppSharp.Parser.AST.ArchType ArchType;
+
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser3AST13NativeLibraryC2Ev")]
- internal static extern void ctor_1(global::System.IntPtr instance);
+ internal static extern void ctor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
@@ -7640,7 +7650,7 @@ namespace CppSharp
private static global::System.IntPtr __CopyValue(NativeLibrary.Internal native)
{
- var ret = Marshal.AllocHGlobal(36);
+ var ret = Marshal.AllocHGlobal(40);
CppSharp.Parser.AST.NativeLibrary.Internal.cctor_2(ret, new global::System.IntPtr(&native));
return ret;
}
@@ -7657,8 +7667,8 @@ namespace CppSharp
public NativeLibrary()
{
- __Instance = Marshal.AllocHGlobal(36);
- Internal.ctor_1(__Instance);
+ __Instance = Marshal.AllocHGlobal(40);
+ Internal.ctor_0(__Instance);
}
public void Dispose()
@@ -7745,6 +7755,21 @@ namespace CppSharp
return __ret;
}
}
+
+ public CppSharp.Parser.AST.ArchType ArchType
+ {
+ get
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ return __ptr->ArchType;
+ }
+
+ set
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ __ptr->ArchType = value;
+ }
+ }
}
public unsafe partial class ASTContext : IDisposable
diff --git a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
index b82a6fe0..19eecda6 100644
--- a/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
+++ b/src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/AST.cs
@@ -216,6 +216,13 @@ namespace CppSharp
FunctionBody = 5
}
+ public enum ArchType
+ {
+ UnknownArch = 0,
+ x86 = 1,
+ x86_64 = 2
+ }
+
public unsafe partial class Type : IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
@@ -7562,17 +7569,20 @@ namespace CppSharp
public unsafe partial class NativeLibrary : IDisposable
{
- [StructLayout(LayoutKind.Explicit, Size = 48)]
+ [StructLayout(LayoutKind.Explicit, Size = 52)]
public partial struct Internal
{
+ [FieldOffset(24)]
+ public CppSharp.Parser.AST.ArchType ArchType;
+
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??0NativeLibrary@AST@CppParser@CppSharp@@QAE@XZ")]
- internal static extern global::System.IntPtr ctor_1(global::System.IntPtr instance);
+ internal static extern global::System.IntPtr ctor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
- EntryPoint="??0NativeLibrary@AST@CppParser@CppSharp@@QAE@ABU0123@@Z")]
+ EntryPoint="??0NativeLibrary@AST@CppParser@CppSharp@@QAE@ABV0123@@Z")]
internal static extern global::System.IntPtr cctor_2(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
@@ -7640,7 +7650,7 @@ namespace CppSharp
private static global::System.IntPtr __CopyValue(NativeLibrary.Internal native)
{
- var ret = Marshal.AllocHGlobal(48);
+ var ret = Marshal.AllocHGlobal(52);
CppSharp.Parser.AST.NativeLibrary.Internal.cctor_2(ret, new global::System.IntPtr(&native));
return ret;
}
@@ -7657,8 +7667,8 @@ namespace CppSharp
public NativeLibrary()
{
- __Instance = Marshal.AllocHGlobal(48);
- Internal.ctor_1(__Instance);
+ __Instance = Marshal.AllocHGlobal(52);
+ Internal.ctor_0(__Instance);
}
public void Dispose()
@@ -7745,6 +7755,21 @@ namespace CppSharp
return __ret;
}
}
+
+ public CppSharp.Parser.AST.ArchType ArchType
+ {
+ get
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ return __ptr->ArchType;
+ }
+
+ set
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ __ptr->ArchType = value;
+ }
+ }
}
public unsafe partial class ASTContext : IDisposable
diff --git a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
index e104a0d3..3a92c6c0 100644
--- a/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
+++ b/src/CppParser/Bindings/CSharp/x86_64-linux-gnu/AST.cs
@@ -216,6 +216,13 @@ namespace CppSharp
FunctionBody = 5
}
+ public enum ArchType
+ {
+ UnknownArch = 0,
+ x86 = 1,
+ x86_64 = 2
+ }
+
public unsafe partial class Type : IDisposable
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
@@ -7561,18 +7568,21 @@ namespace CppSharp
public unsafe partial class NativeLibrary : IDisposable
{
- [StructLayout(LayoutKind.Explicit, Size = 56)]
+ [StructLayout(LayoutKind.Explicit, Size = 64)]
public partial struct Internal
{
+ [FieldOffset(8)]
+ public CppSharp.Parser.AST.ArchType ArchType;
+
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
- EntryPoint="_ZN8CppSharp9CppParser3AST13NativeLibraryC2ERKS2_")]
- internal static extern void cctor_0(global::System.IntPtr instance, global::System.IntPtr _0);
+ EntryPoint="_ZN8CppSharp9CppParser3AST13NativeLibraryC2Ev")]
+ internal static extern void ctor_0(global::System.IntPtr instance);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
- EntryPoint="_ZN8CppSharp9CppParser3AST13NativeLibraryC2Ev")]
- internal static extern void ctor_2(global::System.IntPtr instance);
+ EntryPoint="_ZN8CppSharp9CppParser3AST13NativeLibraryC2ERKS2_")]
+ internal static extern void cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
@@ -7639,8 +7649,8 @@ namespace CppSharp
private static global::System.IntPtr __CopyValue(NativeLibrary.Internal native)
{
- var ret = Marshal.AllocHGlobal(56);
- CppSharp.Parser.AST.NativeLibrary.Internal.cctor_0(ret, new global::System.IntPtr(&native));
+ var ret = Marshal.AllocHGlobal(64);
+ CppSharp.Parser.AST.NativeLibrary.Internal.cctor_1(ret, new global::System.IntPtr(&native));
return ret;
}
@@ -7656,8 +7666,8 @@ namespace CppSharp
public NativeLibrary()
{
- __Instance = Marshal.AllocHGlobal(56);
- Internal.ctor_2(__Instance);
+ __Instance = Marshal.AllocHGlobal(64);
+ Internal.ctor_0(__Instance);
}
public void Dispose()
@@ -7744,6 +7754,21 @@ namespace CppSharp
return __ret;
}
}
+
+ public CppSharp.Parser.AST.ArchType ArchType
+ {
+ get
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ return __ptr->ArchType;
+ }
+
+ set
+ {
+ var __ptr = (Internal*)__Instance.ToPointer();
+ __ptr->ArchType = value;
+ }
+ }
}
public unsafe partial class ASTContext : IDisposable
diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp
index 5459628b..b25e0db9 100644
--- a/src/CppParser/Parser.cpp
+++ b/src/CppParser/Parser.cpp
@@ -3043,8 +3043,20 @@ ParserResultKind Parser::ParseArchive(llvm::StringRef File,
return ParserResultKind::Success;
}
+static ArchType ConvertArchType(unsigned int archType)
+{
+ switch (archType)
+ {
+ case llvm::Triple::ArchType::x86:
+ return ArchType::x86;
+ case llvm::Triple::ArchType::x86_64:
+ return ArchType::x86_64;
+ }
+ return ArchType::UnknownArch;
+}
+
template
-void ReadELFDependencies(const llvm::object::ELFFile* ELFFile, CppSharp::CppParser::NativeLibrary*& NativeLib)
+static void ReadELFDependencies(const llvm::object::ELFFile* ELFFile, CppSharp::CppParser::NativeLibrary*& NativeLib)
{
for (const auto &Entry : ELFFile->dynamic_table())
if (Entry.d_tag == llvm::ELF::DT_NEEDED)
@@ -3058,6 +3070,7 @@ ParserResultKind Parser::ParseSharedLib(llvm::StringRef File,
auto LibName = File;
NativeLib = new NativeLibrary();
NativeLib->FileName = LibName;
+ NativeLib->ArchType = ConvertArchType(ObjectFile->getArch());
if (ObjectFile->isELF())
{
@@ -3142,7 +3155,7 @@ ParserResultKind Parser::ReadSymbols(llvm::StringRef File,
return ParserResultKind::Success;
}
- ParserResult* Parser::ParseLibrary(const std::string& File, ParserResult* res)
+ParserResult* Parser::ParseLibrary(const std::string& File, ParserResult* res)
{
if (File.empty())
{