Added C and Ocaml bindings for functions, basic blocks, and
[oota-llvm.git] / lib / Archive / ArchiveInternals.h
index 77d2d5481bc2cb17223aa18315f756305f0294f6..8648bbbf29b8f53c97707de5765c3b05aa24daf2 100644 (file)
@@ -1,36 +1,37 @@
-//===-- lib/Bytecode/ArchiveInternals.h -------------------------*- C++ -*-===//
-// 
+//===-- lib/Archive/ArchiveInternals.h -------------------------*- C++ -*-===//
+//
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by Reid Spencer and is distributed under the 
+// This file was developed by Reid Spencer and is distributed under the
 // University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
 // Internal implementation header for LLVM Archive files.
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LIB_BYTECODE_ARCHIVEINTERNALS_H
-#define LIB_BYTECODE_ARCHIVEINTERNALS_H
+#ifndef LIB_ARCHIVE_ARCHIVEINTERNALS_H
+#define LIB_ARCHIVE_ARCHIVEINTERNALS_H
 
-#include "llvm/Bytecode/Archive.h"
+#include "llvm/Bitcode/Archive.h"
 #include "llvm/System/TimeValue.h"
 #include "llvm/ADT/StringExtras.h"
 
-#define ARFILE_MAGIC "!<arch>\n"                   ///< magic string 
-#define ARFILE_MAGIC_LEN (sizeof(ARFILE_MAGIC)-1)  ///< length of magic string 
-#define ARFILE_SYMTAB_NAME "/               "      ///< regular symtab entry
-#define ARFILE_STRTAB_NAME "//              "      ///< Name of string table
-#define ARFILE_LLVM_SYMTAB_NAME "#_LLVM_SYM_TAB_#" ///< LLVM's symtab entry
+#define ARFILE_MAGIC "!<arch>\n"                   ///< magic string
+#define ARFILE_MAGIC_LEN (sizeof(ARFILE_MAGIC)-1)  ///< length of magic string
+#define ARFILE_SVR4_SYMTAB_NAME "/               " ///< SVR4 symtab entry name
+#define ARFILE_LLVM_SYMTAB_NAME "#_LLVM_SYM_TAB_#" ///< LLVM symtab entry name
+#define ARFILE_BSD4_SYMTAB_NAME "__.SYMDEF SORTED" ///< BSD4 symtab entry name
+#define ARFILE_STRTAB_NAME      "//              " ///< Name of string table
 #define ARFILE_PAD "\n"                            ///< inter-file align padding
 #define ARFILE_MEMBER_MAGIC "`\n"                  ///< fmag field magic #
 
 namespace llvm {
 
-  /// The ArchiveMemberHeader structure is used internally for bytecode 
-  /// archives. 
-  /// The header precedes each file member in the archive. This structure is 
+  /// The ArchiveMemberHeader structure is used internally for bitcode
+  /// archives.
+  /// The header precedes each file member in the archive. This structure is
   /// defined using character arrays for direct and correct interpretation
   /// regardless of the endianess of the machine that produced it.
   /// @brief Archive File Member Header
@@ -38,7 +39,7 @@ namespace llvm {
     /// @name Data
     /// @{
     public:
-      char name[16];///< Name of the file member. 
+      char name[16];  ///< Name of the file member.
       char date[12];  ///< File date, decimal seconds since Epoch
       char uid[6];    ///< user id in ASCII decimal
       char gid[6];    ///< group id in ASCII decimal
@@ -64,9 +65,17 @@ namespace llvm {
     bool checkSignature() {
       return 0 == memcmp(fmag, ARFILE_MEMBER_MAGIC,2);
     }
-
   };
-
+  
+  // Get just the externally visible defined symbols from the bitcode
+  bool GetBitcodeSymbols(const sys::Path& fName,
+                          std::vector<std::string>& symbols,
+                          std::string* ErrMsg);
+  
+  ModuleProvider* GetBitcodeSymbols(const unsigned char*Buffer,unsigned Length,
+                                    const std::string& ModuleID,
+                                    std::vector<std::string>& symbols,
+                                    std::string* ErrMsg);
 }
 
 #endif