Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- ExtractRanges.h ------------------------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_DEBUGINFO_GSYM_EXTRACTRANGES_H
  10. #define LLVM_DEBUGINFO_GSYM_EXTRACTRANGES_H
  11.  
  12. #include "llvm/ADT/AddressRanges.h"
  13. #include "llvm/Support/Format.h"
  14. #include "llvm/Support/raw_ostream.h"
  15. #include <stdint.h>
  16. #include <vector>
  17.  
  18. #define HEX8(v) llvm::format_hex(v, 4)
  19. #define HEX16(v) llvm::format_hex(v, 6)
  20. #define HEX32(v) llvm::format_hex(v, 10)
  21. #define HEX64(v) llvm::format_hex(v, 18)
  22.  
  23. namespace llvm {
  24. class DataExtractor;
  25. class raw_ostream;
  26.  
  27. namespace gsym {
  28.  
  29. class FileWriter;
  30.  
  31. /// AddressRange objects are encoded and decoded to be relative to a base
  32. /// address. This will be the FunctionInfo's start address if the AddressRange
  33. /// is directly contained in a FunctionInfo, or a base address of the
  34. /// containing parent AddressRange or AddressRanges. This allows address
  35. /// ranges to be efficiently encoded using ULEB128 encodings as we encode the
  36. /// offset and size of each range instead of full addresses. This also makes
  37. /// encoded addresses easy to relocate as we just need to relocate one base
  38. /// address.
  39. /// @{
  40. AddressRange decodeRange(DataExtractor &Data, uint64_t BaseAddr,
  41.                          uint64_t &Offset);
  42. void encodeRange(const AddressRange &Range, FileWriter &O, uint64_t BaseAddr);
  43. /// @}
  44.  
  45. /// Skip an address range object in the specified data a the specified
  46. /// offset.
  47. ///
  48. /// \param Data The binary stream to read the data from.
  49. ///
  50. /// \param Offset The byte offset within \a Data.
  51. void skipRange(DataExtractor &Data, uint64_t &Offset);
  52.  
  53. /// Address ranges are decoded and encoded to be relative to a base address.
  54. /// See the AddressRange comment for the encode and decode methods for full
  55. /// details.
  56. /// @{
  57. void decodeRanges(AddressRanges &Ranges, DataExtractor &Data, uint64_t BaseAddr,
  58.                   uint64_t &Offset);
  59. void encodeRanges(const AddressRanges &Ranges, FileWriter &O,
  60.                   uint64_t BaseAddr);
  61. /// @}
  62.  
  63. /// Skip an address range object in the specified data a the specified
  64. /// offset.
  65. ///
  66. /// \param Data The binary stream to read the data from.
  67. ///
  68. /// \param Offset The byte offset within \a Data.
  69. ///
  70. /// \returns The number of address ranges that were skipped.
  71. uint64_t skipRanges(DataExtractor &Data, uint64_t &Offset);
  72.  
  73. } // namespace gsym
  74.  
  75. raw_ostream &operator<<(raw_ostream &OS, const AddressRange &R);
  76.  
  77. raw_ostream &operator<<(raw_ostream &OS, const AddressRanges &AR);
  78.  
  79. } // namespace llvm
  80.  
  81. #endif // LLVM_DEBUGINFO_GSYM_EXTRACTRANGES_H
  82.