diff options
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; |
