Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- DWARFRelocMap.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_DWARF_DWARFRELOCMAP_H
  10. #define LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H
  11.  
  12. #include "llvm/ADT/DenseMap.h"
  13. #include "llvm/Object/ObjectFile.h"
  14. #include "llvm/Object/RelocationResolver.h"
  15. #include <cstdint>
  16.  
  17. namespace llvm {
  18.  
  19. /// RelocAddrEntry contains relocated value and section index.
  20. /// Section index is -1LL if relocation points to absolute symbol.
  21. struct RelocAddrEntry {
  22.   uint64_t SectionIndex;
  23.   object::RelocationRef Reloc;
  24.   uint64_t SymbolValue;
  25.   std::optional<object::RelocationRef> Reloc2;
  26.   uint64_t SymbolValue2;
  27.   object::RelocationResolver Resolver;
  28. };
  29.  
  30. /// In place of applying the relocations to the data we've read from disk we use
  31. /// a separate mapping table to the side and checking that at locations in the
  32. /// dwarf where we expect relocated values. This adds a bit of complexity to the
  33. /// dwarf parsing/extraction at the benefit of not allocating memory for the
  34. /// entire size of the debug info sections.
  35. using RelocAddrMap = DenseMap<uint64_t, RelocAddrEntry>;
  36.  
  37. } // end namespace llvm
  38.  
  39. #endif // LLVM_DEBUGINFO_DWARF_DWARFRELOCMAP_H
  40.