Training courses
Kernel and Embedded Linux
Bootlin training courses
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
//===- DWARF.h -----------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===-------------------------------------------------------------------===// #ifndef LLD_ELF_DWARF_H #define LLD_ELF_DWARF_H #include "InputFiles.h" #include "llvm/ADT/STLExtras.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/Object/ELF.h" namespace lld { namespace elf { class InputSection; struct LLDDWARFSection final : public llvm::DWARFSection { InputSectionBase *sec = nullptr; }; template <class ELFT> class LLDDwarfObj final : public llvm::DWARFObject { public: explicit LLDDwarfObj(ObjFile<ELFT> *obj); void forEachInfoSections( llvm::function_ref<void(const llvm::DWARFSection &)> f) const override { f(infoSection); } InputSection *getInfoSection() const { return cast<InputSection>(infoSection.sec); } const llvm::DWARFSection &getLoclistsSection() const override { return loclistsSection; } const llvm::DWARFSection &getRangesSection() const override { return rangesSection; } const llvm::DWARFSection &getRnglistsSection() const override { return rnglistsSection; } const llvm::DWARFSection &getStrOffsetsSection() const override { return strOffsetsSection; } const llvm::DWARFSection &getLineSection() const override { return lineSection; } const llvm::DWARFSection &getAddrSection() const override { return addrSection; } const LLDDWARFSection &getGnuPubnamesSection() const override { return gnuPubnamesSection; } const LLDDWARFSection &getGnuPubtypesSection() const override { return gnuPubtypesSection; } StringRef getFileName() const override { return ""; } StringRef getAbbrevSection() const override { return abbrevSection; } StringRef getStrSection() const override { return strSection; } StringRef getLineStrSection() const override { return lineStrSection; } bool isLittleEndian() const override { return ELFT::TargetEndianness == llvm::support::little; } llvm::Optional<llvm::RelocAddrEntry> find(const llvm::DWARFSection &sec, uint64_t pos) const override; private: template <class RelTy> llvm::Optional<llvm::RelocAddrEntry> findAux(const InputSectionBase &sec, uint64_t pos, ArrayRef<RelTy> rels) const; LLDDWARFSection gnuPubnamesSection; LLDDWARFSection gnuPubtypesSection; LLDDWARFSection infoSection; LLDDWARFSection loclistsSection; LLDDWARFSection rangesSection; LLDDWARFSection rnglistsSection; LLDDWARFSection strOffsetsSection; LLDDWARFSection lineSection; LLDDWARFSection addrSection; StringRef abbrevSection; StringRef strSection; StringRef lineStrSection; }; } // namespace elf } // namespace lld #endif