move archive-specific stuff out of bcreader into archive library.
authorChris Lattner <sabre@nondot.org>
Wed, 7 Feb 2007 23:53:17 +0000 (23:53 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 7 Feb 2007 23:53:17 +0000 (23:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34022 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bytecode/Reader.h
lib/Archive/Archive.cpp
lib/Archive/ArchiveInternals.h
lib/Bytecode/Archive/Archive.cpp
lib/Bytecode/Archive/ArchiveInternals.h
lib/Bytecode/Reader/ReaderWrappers.cpp

index e33e3101d46218881be1877863d6f122ce21faa1..f4c575bf16b5941c42f26a087421b9b0c2becce2 100644 (file)
@@ -81,36 +81,6 @@ Module* ParseBytecodeBuffer(
   std::string *ErrMsg = 0         ///< Optional place to return an error message
 );
 
-
-/// This function will read only the necessary parts of a bytecode file in order
-/// to obtain a list of externally visible global symbols that the bytecode
-/// module defines. This is used for archiving and linking when only the list
-/// of symbols the module defines is needed.
-/// @returns true on error, false otherwise
-/// @brief Get a bytecode file's externally visibile defined global symbols.
-bool GetBytecodeSymbols(
-  const sys::Path& fileName,       ///< Filename to read bytecode from
-  std::vector<std::string>& syms,  ///< Vector to return symbols in
-  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
-  std::string* ErrMsg = 0          ///< Optional error message holder
-);
-
-/// This function will read only the necessary parts of a bytecode buffer in
-/// order to obtain a list of externally visible global symbols that the
-/// bytecode module defines. This is used for archiving and linking when only
-/// the list of symbols the module defines is needed and the bytecode is
-/// already in memory.
-/// @returns the ModuleProvider on success, 0 if the bytecode can't be parsed
-/// @brief Get a bytecode file's externally visibile defined global symbols.
-ModuleProvider* GetBytecodeSymbols(
-  const unsigned char*Buffer,        ///< The buffer to be parsed
-  unsigned Length,                   ///< The length of \p Buffer
-  const std::string& ModuleID,       ///< An identifier for the module
-  std::vector<std::string>& symbols, ///< The symbols defined in the module
-  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
-  std::string* ErrMsg = 0            ///< Optional error message holder
-);
-
 } // End llvm namespace
 
 #endif
index d299694383a0eb3d444b8919da921ff638d1cf4e..1c0b205e9e25d7c7aae828422ec59ca1ef9eefb8 100644 (file)
@@ -14,8 +14,9 @@
 
 #include "ArchiveInternals.h"
 #include "llvm/ModuleProvider.h"
+#include "llvm/Module.h"
+#include "llvm/Bytecode/Reader.h"
 #include "llvm/System/Process.h"
-
 using namespace llvm;
 
 // getMemberSize - compute the actual physical size of the file member as seen
@@ -190,3 +191,70 @@ Archive::~Archive() {
   cleanUpMemory();
 }
 
+
+
+static void getSymbols(Module*M, std::vector<std::string>& symbols) {
+  // Loop over global variables
+  for (Module::global_iterator GI = M->global_begin(), GE=M->global_end(); GI != GE; ++GI)
+    if (!GI->isDeclaration() && !GI->hasInternalLinkage())
+      if (!GI->getName().empty())
+        symbols.push_back(GI->getName());
+  
+  // Loop over functions.
+  for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI)
+    if (!FI->isDeclaration() && !FI->hasInternalLinkage())
+      if (!FI->getName().empty())
+        symbols.push_back(FI->getName());
+}
+
+// Get just the externally visible defined symbols from the bytecode
+bool llvm::GetBytecodeSymbols(const sys::Path& fName,
+                              std::vector<std::string>& symbols,
+                              BCDecompressor_t *BCDC,
+                              std::string* ErrMsg) {
+  ModuleProvider *MP = getBytecodeModuleProvider(fName.toString(), BCDC,ErrMsg);
+  if (!MP)
+    return true;
+  
+  // Get the module from the provider
+  Module* M = MP->materializeModule();
+  if (M == 0) {
+    delete MP;
+    return true;
+  }
+  
+  // Get the symbols
+  getSymbols(M, symbols);
+  
+  // Done with the module.
+  delete MP;
+  return true;
+}
+
+ModuleProvider*
+llvm::GetBytecodeSymbols(const unsigned char*Buffer, unsigned Length,
+                         const std::string& ModuleID,
+                         std::vector<std::string>& symbols,
+                         BCDecompressor_t *BCDC,
+                         std::string* ErrMsg) {
+  // Get the module provider
+  ModuleProvider* MP = 
+  getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, BCDC, ErrMsg, 0);
+  if (!MP)
+    return 0;
+  
+  // Get the module from the provider
+  Module* M = MP->materializeModule();
+  if (M == 0) {
+    delete MP;
+    return 0;
+  }
+  
+  // Get the symbols
+  getSymbols(M, symbols);
+  
+  // Done with the module. Note that ModuleProvider will delete the
+  // Module when it is deleted. Also note that its the caller's responsibility
+  // to delete the ModuleProvider.
+  return MP;
+}
index 86d282700975cfcd41c08be22618bc054a02d0f7..7a918a965359b3da091c544c7fe92f523dc7857a 100644 (file)
@@ -65,9 +65,18 @@ namespace llvm {
     bool checkSignature() {
       return 0 == memcmp(fmag, ARFILE_MEMBER_MAGIC,2);
     }
-
   };
-
+  
+  // Get just the externally visible defined symbols from the bytecode
+  bool GetBytecodeSymbols(const sys::Path& fName,
+                          std::vector<std::string>& symbols,
+                          BCDecompressor_t *BCDC, std::string* ErrMsg);
+  
+  ModuleProvider* GetBytecodeSymbols(const unsigned char*Buffer,unsigned Length,
+                                     const std::string& ModuleID,
+                                     std::vector<std::string>& symbols,
+                                     BCDecompressor_t *BCDC,
+                                     std::string* ErrMsg);
 }
 
 #endif
index d299694383a0eb3d444b8919da921ff638d1cf4e..1c0b205e9e25d7c7aae828422ec59ca1ef9eefb8 100644 (file)
@@ -14,8 +14,9 @@
 
 #include "ArchiveInternals.h"
 #include "llvm/ModuleProvider.h"
+#include "llvm/Module.h"
+#include "llvm/Bytecode/Reader.h"
 #include "llvm/System/Process.h"
-
 using namespace llvm;
 
 // getMemberSize - compute the actual physical size of the file member as seen
@@ -190,3 +191,70 @@ Archive::~Archive() {
   cleanUpMemory();
 }
 
+
+
+static void getSymbols(Module*M, std::vector<std::string>& symbols) {
+  // Loop over global variables
+  for (Module::global_iterator GI = M->global_begin(), GE=M->global_end(); GI != GE; ++GI)
+    if (!GI->isDeclaration() && !GI->hasInternalLinkage())
+      if (!GI->getName().empty())
+        symbols.push_back(GI->getName());
+  
+  // Loop over functions.
+  for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI)
+    if (!FI->isDeclaration() && !FI->hasInternalLinkage())
+      if (!FI->getName().empty())
+        symbols.push_back(FI->getName());
+}
+
+// Get just the externally visible defined symbols from the bytecode
+bool llvm::GetBytecodeSymbols(const sys::Path& fName,
+                              std::vector<std::string>& symbols,
+                              BCDecompressor_t *BCDC,
+                              std::string* ErrMsg) {
+  ModuleProvider *MP = getBytecodeModuleProvider(fName.toString(), BCDC,ErrMsg);
+  if (!MP)
+    return true;
+  
+  // Get the module from the provider
+  Module* M = MP->materializeModule();
+  if (M == 0) {
+    delete MP;
+    return true;
+  }
+  
+  // Get the symbols
+  getSymbols(M, symbols);
+  
+  // Done with the module.
+  delete MP;
+  return true;
+}
+
+ModuleProvider*
+llvm::GetBytecodeSymbols(const unsigned char*Buffer, unsigned Length,
+                         const std::string& ModuleID,
+                         std::vector<std::string>& symbols,
+                         BCDecompressor_t *BCDC,
+                         std::string* ErrMsg) {
+  // Get the module provider
+  ModuleProvider* MP = 
+  getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, BCDC, ErrMsg, 0);
+  if (!MP)
+    return 0;
+  
+  // Get the module from the provider
+  Module* M = MP->materializeModule();
+  if (M == 0) {
+    delete MP;
+    return 0;
+  }
+  
+  // Get the symbols
+  getSymbols(M, symbols);
+  
+  // Done with the module. Note that ModuleProvider will delete the
+  // Module when it is deleted. Also note that its the caller's responsibility
+  // to delete the ModuleProvider.
+  return MP;
+}
index 86d282700975cfcd41c08be22618bc054a02d0f7..7a918a965359b3da091c544c7fe92f523dc7857a 100644 (file)
@@ -65,9 +65,18 @@ namespace llvm {
     bool checkSignature() {
       return 0 == memcmp(fmag, ARFILE_MEMBER_MAGIC,2);
     }
-
   };
-
+  
+  // Get just the externally visible defined symbols from the bytecode
+  bool GetBytecodeSymbols(const sys::Path& fName,
+                          std::vector<std::string>& symbols,
+                          BCDecompressor_t *BCDC, std::string* ErrMsg);
+  
+  ModuleProvider* GetBytecodeSymbols(const unsigned char*Buffer,unsigned Length,
+                                     const std::string& ModuleID,
+                                     std::vector<std::string>& symbols,
+                                     BCDecompressor_t *BCDC,
+                                     std::string* ErrMsg);
 }
 
 #endif
index 63b5fe9b672d330275a4079d3105d51e5ac07d4d..ea1495ecc5ca47be3a0f59536d9ce6ef51178190 100644 (file)
@@ -254,70 +254,3 @@ Module *llvm::ParseBytecodeFile(const std::string &Filename,
   delete MP;
   return M;
 }
-
-
-static void getSymbols(Module*M, std::vector<std::string>& symbols) {
-  // Loop over global variables
-  for (Module::global_iterator GI = M->global_begin(), GE=M->global_end(); GI != GE; ++GI)
-    if (!GI->isDeclaration() && !GI->hasInternalLinkage())
-      if (!GI->getName().empty())
-        symbols.push_back(GI->getName());
-
-  // Loop over functions.
-  for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ++FI)
-    if (!FI->isDeclaration() && !FI->hasInternalLinkage())
-      if (!FI->getName().empty())
-        symbols.push_back(FI->getName());
-}
-
-// Get just the externally visible defined symbols from the bytecode
-bool llvm::GetBytecodeSymbols(const sys::Path& fName,
-                              std::vector<std::string>& symbols,
-                               BCDecompressor_t *BCDC,
-                              std::string* ErrMsg) {
-  ModuleProvider *MP = getBytecodeModuleProvider(fName.toString(), BCDC,ErrMsg);
-  if (!MP)
-    return true;
-
-  // Get the module from the provider
-  Module* M = MP->materializeModule();
-  if (M == 0) {
-    delete MP;
-    return true;
-  }
-
-  // Get the symbols
-  getSymbols(M, symbols);
-
-  // Done with the module.
-  delete MP;
-  return true;
-}
-
-ModuleProvider*
-llvm::GetBytecodeSymbols(const unsigned char*Buffer, unsigned Length,
-                         const std::string& ModuleID,
-                         std::vector<std::string>& symbols,
-                          BCDecompressor_t *BCDC,
-                         std::string* ErrMsg) {
-  // Get the module provider
-  ModuleProvider* MP = 
-    getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, BCDC, ErrMsg, 0);
-  if (!MP)
-    return 0;
-
-  // Get the module from the provider
-  Module* M = MP->materializeModule();
-  if (M == 0) {
-    delete MP;
-    return 0;
-  }
-
-  // Get the symbols
-  getSymbols(M, symbols);
-
-  // Done with the module. Note that ModuleProvider will delete the
-  // Module when it is deleted. Also note that its the caller's responsibility
-  // to delete the ModuleProvider.
-  return MP;
-}