diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
| commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
| tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /include/llvm/DebugInfo/MSF | |
| parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
Notes
Diffstat (limited to 'include/llvm/DebugInfo/MSF')
| -rw-r--r-- | include/llvm/DebugInfo/MSF/MSFBuilder.h | 1 | ||||
| -rw-r--r-- | include/llvm/DebugInfo/MSF/MSFCommon.h | 34 | ||||
| -rw-r--r-- | include/llvm/DebugInfo/MSF/MSFStreamLayout.h | 35 | ||||
| -rw-r--r-- | include/llvm/DebugInfo/MSF/MappedBlockStream.h | 4 | 
4 files changed, 29 insertions, 45 deletions
| diff --git a/include/llvm/DebugInfo/MSF/MSFBuilder.h b/include/llvm/DebugInfo/MSF/MSFBuilder.h index b2c8f2d1c20d..19e5c31b3076 100644 --- a/include/llvm/DebugInfo/MSF/MSFBuilder.h +++ b/include/llvm/DebugInfo/MSF/MSFBuilder.h @@ -128,7 +128,6 @@ private:    uint32_t FreePageMap;    uint32_t Unknown1 = 0;    uint32_t BlockSize; -  uint32_t MininumBlocks;    uint32_t BlockMapAddr;    BitVector FreeBlocks;    std::vector<uint32_t> DirectoryBlocks; diff --git a/include/llvm/DebugInfo/MSF/MSFCommon.h b/include/llvm/DebugInfo/MSF/MSFCommon.h index eca1b8b89ebd..f28415d4e603 100644 --- a/include/llvm/DebugInfo/MSF/MSFCommon.h +++ b/include/llvm/DebugInfo/MSF/MSFCommon.h @@ -59,6 +59,25 @@ struct MSFLayout {    std::vector<ArrayRef<support::ulittle32_t>> StreamMap;  }; +/// \brief Describes the layout of a stream in an MSF layout.  A "stream" here +/// is defined as any logical unit of data which may be arranged inside the MSF +/// file as a sequence of (possibly discontiguous) blocks.  When we want to read +/// from a particular MSF Stream, we fill out a stream layout structure and the +/// reader uses it to determine which blocks in the underlying MSF file contain +/// the data, so that it can be pieced together in the right order. +class MSFStreamLayout { +public: +  uint32_t Length; +  std::vector<support::ulittle32_t> Blocks; +}; + +/// \brief Determine the layout of the FPM stream, given the MSF layout.  An FPM +/// stream spans 1 or more blocks, each at equally spaced intervals throughout +/// the file. +MSFStreamLayout getFpmStreamLayout(const MSFLayout &Msf, +                                   bool IncludeUnusedFpmData = false, +                                   bool AltFpm = false); +  inline bool isValidBlockSize(uint32_t Size) {    switch (Size) {    case 512: @@ -78,7 +97,7 @@ inline uint32_t getMinimumBlockCount() { return 4; }  inline uint32_t getFirstUnreservedBlock() { return 3; }  inline uint64_t bytesToBlocks(uint64_t NumBytes, uint64_t BlockSize) { -  return alignTo(NumBytes, BlockSize) / BlockSize; +  return divideCeil(NumBytes, BlockSize);  }  inline uint64_t blockToOffset(uint64_t BlockNumber, uint64_t BlockSize) { @@ -89,13 +108,14 @@ inline uint32_t getFpmIntervalLength(const MSFLayout &L) {    return L.SB->BlockSize;  } -inline uint32_t getNumFpmIntervals(const MSFLayout &L) { -  uint32_t Length = getFpmIntervalLength(L); -  return alignTo(L.SB->NumBlocks, Length) / Length; -} +inline uint32_t getNumFpmIntervals(const MSFLayout &L, +                                   bool IncludeUnusedFpmData = false) { +  if (IncludeUnusedFpmData) +    return divideCeil(L.SB->NumBlocks, L.SB->BlockSize); -inline uint32_t getFullFpmByteSize(const MSFLayout &L) { -  return alignTo(L.SB->NumBlocks, 8) / 8; +  // We want the minimum number of intervals required, where each interval can +  // represent BlockSize * 8 blocks. +  return divideCeil(L.SB->NumBlocks, 8 * L.SB->BlockSize);  }  Error validateSuperBlock(const SuperBlock &SB); diff --git a/include/llvm/DebugInfo/MSF/MSFStreamLayout.h b/include/llvm/DebugInfo/MSF/MSFStreamLayout.h deleted file mode 100644 index bdde98f52662..000000000000 --- a/include/llvm/DebugInfo/MSF/MSFStreamLayout.h +++ /dev/null @@ -1,35 +0,0 @@ -//===- MSFStreamLayout.h - Describes the layout of a stream -----*- C++ -*-===// -// -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_DEBUGINFO_MSF_MSFSTREAMLAYOUT_H -#define LLVM_DEBUGINFO_MSF_MSFSTREAMLAYOUT_H - -#include "llvm/Support/Endian.h" - -#include <cstdint> -#include <vector> - -namespace llvm { -namespace msf { - -/// \brief Describes the layout of a stream in an MSF layout.  A "stream" here -/// is defined as any logical unit of data which may be arranged inside the MSF -/// file as a sequence of (possibly discontiguous) blocks.  When we want to read -/// from a particular MSF Stream, we fill out a stream layout structure and the -/// reader uses it to determine which blocks in the underlying MSF file contain -/// the data, so that it can be pieced together in the right order. -class MSFStreamLayout { -public: -  uint32_t Length; -  std::vector<support::ulittle32_t> Blocks; -}; -} // namespace msf -} // namespace llvm - -#endif // LLVM_DEBUGINFO_MSF_MSFSTREAMLAYOUT_H diff --git a/include/llvm/DebugInfo/MSF/MappedBlockStream.h b/include/llvm/DebugInfo/MSF/MappedBlockStream.h index 6d88d2be85c9..f65e52922da7 100644 --- a/include/llvm/DebugInfo/MSF/MappedBlockStream.h +++ b/include/llvm/DebugInfo/MSF/MappedBlockStream.h @@ -12,7 +12,7 @@  #include "llvm/ADT/ArrayRef.h"  #include "llvm/ADT/DenseMap.h" -#include "llvm/DebugInfo/MSF/MSFStreamLayout.h" +#include "llvm/DebugInfo/MSF/MSFCommon.h"  #include "llvm/Support/Allocator.h"  #include "llvm/Support/BinaryStream.h"  #include "llvm/Support/BinaryStreamRef.h" @@ -122,7 +122,7 @@ public:    static std::unique_ptr<WritableMappedBlockStream>    createFpmStream(const MSFLayout &Layout, WritableBinaryStreamRef MsfData, -                  BumpPtrAllocator &Allocator); +                  BumpPtrAllocator &Allocator, bool AltFpm = false);    support::endianness getEndian() const override {      return support::little; | 
