LCOV - code coverage report
Current view: top level - include/llvm/Object - Decompressor.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 3 3 100.0 %
Date: 2017-09-14 15:23:50 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- Decompressor.h ------------------------------------------*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===/
       9             : 
      10             : #ifndef LLVM_OBJECT_DECOMPRESSOR_H
      11             : #define LLVM_OBJECT_DECOMPRESSOR_H
      12             : 
      13             : #include "llvm/ADT/SmallString.h"
      14             : #include "llvm/ADT/StringRef.h"
      15             : #include "llvm/Object/ObjectFile.h"
      16             : 
      17             : namespace llvm {
      18             : namespace object {
      19             : 
      20             : /// @brief Decompressor helps to handle decompression of compressed sections.
      21             : class Decompressor {
      22             : public:
      23             :   /// @brief Create decompressor object.
      24             :   /// @param Name        Section name.
      25             :   /// @param Data        Section content.
      26             :   /// @param IsLE        Flag determines if Data is in little endian form.
      27             :   /// @param Is64Bit     Flag determines if object is 64 bit.
      28             :   static Expected<Decompressor> create(StringRef Name, StringRef Data,
      29             :                                        bool IsLE, bool Is64Bit);
      30             : 
      31             :   /// @brief Resize the buffer and uncompress section data into it.
      32             :   /// @param Out         Destination buffer.
      33          36 :   template <class T> Error resizeAndDecompress(T &Out) {
      34          36 :     Out.resize(DecompressedSize);
      35         108 :     return decompress({Out.data(), (size_t)DecompressedSize});
      36             :   }
      37             : 
      38             :   /// @brief Uncompress section data to raw buffer provided.
      39             :   /// @param Buffer      Destination buffer.
      40             :   Error decompress(MutableArrayRef<char> Buffer);
      41             : 
      42             :   /// @brief Return memory buffer size required for decompression.
      43             :   uint64_t getDecompressedSize() { return DecompressedSize; }
      44             : 
      45             :   /// @brief Return true if section is compressed, including gnu-styled case.
      46             :   static bool isCompressed(const object::SectionRef &Section);
      47             : 
      48             :   /// @brief Return true if section is a ELF compressed one.
      49             :   static bool isCompressedELFSection(uint64_t Flags, StringRef Name);
      50             : 
      51             :   /// @brief Return true if section name matches gnu style compressed one.
      52             :   static bool isGnuStyle(StringRef Name);
      53             : 
      54             : private:
      55             :   Decompressor(StringRef Data);
      56             : 
      57             :   Error consumeCompressedGnuHeader();
      58             :   Error consumeCompressedZLibHeader(bool Is64Bit, bool IsLittleEndian);
      59             : 
      60             :   StringRef SectionData;
      61             :   uint64_t DecompressedSize;
      62             : };
      63             : 
      64             : } // end namespace object
      65             : } // end namespace llvm
      66             : 
      67             : #endif // LLVM_OBJECT_DECOMPRESSOR_H

Generated by: LCOV version 1.13