File: Dwarf.h

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,696 kB
  • sloc: cpp: 7,438,781; ansic: 1,393,871; asm: 1,012,926; python: 241,771; f90: 86,635; objc: 75,411; lisp: 42,144; pascal: 17,286; sh: 8,596; ml: 5,082; perl: 4,730; makefile: 3,591; awk: 3,523; javascript: 2,251; xml: 892; fortran: 672
file content (61 lines) | stat: -rw-r--r-- 1,821 bytes parent folder | download | duplicates (16)
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
//===- 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_MACHO_DWARF_H
#define LLD_MACHO_DWARF_H

#include "llvm/ADT/StringRef.h"
#include "llvm/DebugInfo/DWARF/DWARFObject.h"

namespace lld::macho {

class ObjFile;

// Implements the interface between LLVM's DWARF-parsing utilities and LLD's
// InputSection structures.
class DwarfObject final : public llvm::DWARFObject {
public:
  bool isLittleEndian() const override { return true; }

  std::optional<llvm::RelocAddrEntry> find(const llvm::DWARFSection &sec,
                                           uint64_t pos) const override {
    // TODO: implement this
    return std::nullopt;
  }

  void forEachInfoSections(
      llvm::function_ref<void(const llvm::DWARFSection &)> f) const override {
    f(infoSection);
  }

  llvm::StringRef getAbbrevSection() const override { return abbrevSection; }
  llvm::StringRef getStrSection() const override { return strSection; }

  llvm::DWARFSection const &getLineSection() const override {
    return lineSection;
  }

  llvm::DWARFSection const &getStrOffsetsSection() const override {
    return strOffsSection;
  }

  // Returns an instance of DwarfObject if the given object file has the
  // relevant DWARF debug sections.
  static std::unique_ptr<DwarfObject> create(ObjFile *);

private:
  llvm::DWARFSection infoSection;
  llvm::DWARFSection lineSection;
  llvm::DWARFSection strOffsSection;
  llvm::StringRef abbrevSection;
  llvm::StringRef strSection;
};

} // namespace lld::macho

#endif