brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 19b1764 Raw
106 lines · c
1//===- DWARF.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-exception6//7//===-------------------------------------------------------------------===//8 9#ifndef LLD_ELF_DWARF_H10#define LLD_ELF_DWARF_H11 12#include "InputFiles.h"13#include "InputSection.h"14#include "llvm/ADT/STLExtras.h"15#include "llvm/ADT/STLFunctionalExtras.h"16#include "llvm/DebugInfo/DWARF/DWARFContext.h"17#include "llvm/Object/ELF.h"18#include <optional>19 20namespace lld::elf {21 22class InputSection;23 24struct LLDDWARFSection final : public llvm::DWARFSection {25  InputSectionBase *sec = nullptr;26};27 28template <class ELFT> class LLDDwarfObj final : public llvm::DWARFObject {29public:30  explicit LLDDwarfObj(ObjFile<ELFT> *obj);31 32  void forEachInfoSections(33      llvm::function_ref<void(const llvm::DWARFSection &)> f) const override {34    f(infoSection);35  }36 37  InputSection *getInfoSection() const {38    return cast<InputSection>(infoSection.sec);39  }40 41  const llvm::DWARFSection &getAddrSection() const override {42    return addrSection;43  }44  const llvm::DWARFSection &getLineSection() const override {45    return lineSection;46  }47  const llvm::DWARFSection &getLoclistsSection() const override {48    return loclistsSection;49  }50  const llvm::DWARFSection &getRangesSection() const override {51    return rangesSection;52  }53  const llvm::DWARFSection &getRnglistsSection() const override {54    return rnglistsSection;55  }56  const llvm::DWARFSection &getStrOffsetsSection() const override {57    return strOffsetsSection;58  }59 60  const LLDDWARFSection &getGnuPubnamesSection() const override {61    return gnuPubnamesSection;62  }63  const LLDDWARFSection &getGnuPubtypesSection() const override {64    return gnuPubtypesSection;65  }66  const LLDDWARFSection &getNamesSection() const override {67    return namesSection;68  }69 70  StringRef getFileName() const override { return ""; }71  StringRef getAbbrevSection() const override { return abbrevSection; }72  StringRef getStrSection() const override { return strSection; }73  StringRef getLineStrSection() const override { return lineStrSection; }74 75  bool isLittleEndian() const override {76    return ELFT::Endianness == llvm::endianness::little;77  }78 79  std::optional<llvm::RelocAddrEntry> find(const llvm::DWARFSection &sec,80                                           uint64_t pos) const override;81 82private:83  template <class RelTy>84  std::optional<llvm::RelocAddrEntry> findAux(const InputSectionBase &sec,85                                              uint64_t pos,86                                              ArrayRef<RelTy> rels) const;87 88  LLDDWARFSection addrSection;89  LLDDWARFSection gnuPubnamesSection;90  LLDDWARFSection gnuPubtypesSection;91  LLDDWARFSection infoSection;92  LLDDWARFSection lineSection;93  LLDDWARFSection loclistsSection;94  LLDDWARFSection namesSection;95  LLDDWARFSection rangesSection;96  LLDDWARFSection rnglistsSection;97  LLDDWARFSection strOffsetsSection;98  StringRef abbrevSection;99  StringRef lineStrSection;100  StringRef strSection;101};102 103} // namespace lld::elf104 105#endif106