1//===- DWARFFile.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_DWARFLINKER_DWARFFILE_H
10#define LLVM_DWARFLINKER_DWARFFILE_H
11
12#include "AddressesMap.h"
13#include "llvm/ADT/StringRef.h"
14#include "llvm/DebugInfo/DWARF/DWARFContext.h"
15#include <functional>
16#include <memory>
17
18namespace llvm {
19namespace dwarf_linker {
20
21/// This class represents DWARF information for source file
22/// and it's address map.
23///
24/// May be used asynchroniously for reading.
25class DWARFFile {
26public:
27  using UnloadCallbackTy = std::function<void(StringRef FileName)>;
28
29  DWARFFile(StringRef Name, std::unique_ptr<DWARFContext> Dwarf,
30            std::unique_ptr<AddressesMap> Addresses,
31            UnloadCallbackTy UnloadFunc = nullptr)
32      : FileName(Name), Dwarf(std::move(Dwarf)),
33        Addresses(std::move(Addresses)), UnloadFunc(UnloadFunc) {}
34
35  /// Object file name.
36  StringRef FileName;
37
38  /// Source DWARF information.
39  std::unique_ptr<DWARFContext> Dwarf;
40
41  /// Helpful address information(list of valid address ranges, relocations).
42  std::unique_ptr<AddressesMap> Addresses;
43
44  /// Callback to the module keeping object file to unload.
45  UnloadCallbackTy UnloadFunc;
46
47  /// Unloads object file and corresponding AddressesMap and Dwarf Context.
48  void unload() {
49    Addresses.reset();
50    Dwarf.reset();
51
52    if (UnloadFunc)
53      UnloadFunc(FileName);
54  }
55};
56
57} // namespace dwarf_linker
58} // end namespace llvm
59
60#endif // LLVM_DWARFLINKER_DWARFFILE_H
61