Teach llvm-bcanalyzer to skip over the header we use on LLVM IR files.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68458 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index 66ccdc2..6f91dda 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1330,48 +1330,6 @@
   return Error("Premature end of bitstream");
 }
 
-/// SkipWrapperHeader - Some systems wrap bc files with a special header for
-/// padding or other reasons.  The format of this header is:
-///
-/// struct bc_header {
-///   uint32_t Magic;         // 0x0B17C0DE
-///   uint32_t Version;       // Version, currently always 0.
-///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
-///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
-///   ... potentially other gunk ...
-/// };
-/// 
-/// This function is called when we find a file with a matching magic number.
-/// In this case, skip down to the subsection of the file that is actually a BC
-/// file.
-static bool SkipWrapperHeader(unsigned char *&BufPtr, unsigned char *&BufEnd) {
-  enum {
-    KnownHeaderSize = 4*4,  // Size of header we read.
-    OffsetField = 2*4,      // Offset in bytes to Offset field.
-    SizeField = 3*4         // Offset in bytes to Size field.
-  };
-  
-  
-  // Must contain the header!
-  if (BufEnd-BufPtr < KnownHeaderSize) return true;
-  
-  unsigned Offset = ( BufPtr[OffsetField  ]        |
-                     (BufPtr[OffsetField+1] << 8)  |
-                     (BufPtr[OffsetField+2] << 16) |
-                     (BufPtr[OffsetField+3] << 24));
-  unsigned Size   = ( BufPtr[SizeField    ]        |
-                     (BufPtr[SizeField  +1] << 8)  |
-                     (BufPtr[SizeField  +2] << 16) |
-                     (BufPtr[SizeField  +3] << 24));
-  
-  // Verify that Offset+Size fits in the file.
-  if (Offset+Size > unsigned(BufEnd-BufPtr))
-    return true;
-  BufPtr += Offset;
-  BufEnd = BufPtr+Size;
-  return false;
-}
-
 bool BitcodeReader::ParseBitcode() {
   TheModule = 0;
   
@@ -1383,9 +1341,8 @@
   
   // If we have a wrapper header, parse it and ignore the non-bc file contents.
   // The magic number is 0x0B17C0DE stored in little endian.
-  if (BufPtr != BufEnd && BufPtr[0] == 0xDE && BufPtr[1] == 0xC0 && 
-      BufPtr[2] == 0x17 && BufPtr[3] == 0x0B)
-    if (SkipWrapperHeader(BufPtr, BufEnd))
+  if (isBitcodeWrapper(BufPtr, BufEnd))
+    if (SkipBitcodeWrapperHeader(BufPtr, BufEnd))
       return Error("Invalid bitcode wrapper header");
   
   Stream.init(BufPtr, BufEnd);