//===- DWARFFile.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 LLVM_DWARFLINKER_DWARFFILE_H #define LLVM_DWARFLINKER_DWARFFILE_H #include "AddressesMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include #include namespace llvm { namespace dwarf_linker { /// This class represents DWARF information for source file /// and it's address map. /// /// May be used asynchroniously for reading. class DWARFFile { public: using UnloadCallbackTy = std::function; DWARFFile(StringRef Name, std::unique_ptr Dwarf, std::unique_ptr Addresses, UnloadCallbackTy UnloadFunc = nullptr) : FileName(Name), Dwarf(std::move(Dwarf)), Addresses(std::move(Addresses)), UnloadFunc(UnloadFunc) {} /// Object file name. StringRef FileName; /// Source DWARF information. std::unique_ptr Dwarf; /// Helpful address information(list of valid address ranges, relocations). std::unique_ptr Addresses; /// Callback to the module keeping object file to unload. UnloadCallbackTy UnloadFunc; /// Unloads object file and corresponding AddressesMap and Dwarf Context. void unload() { Addresses.reset(); Dwarf.reset(); if (UnloadFunc) UnloadFunc(FileName); } }; } // namespace dwarf_linker } // end namespace llvm #endif // LLVM_DWARFLINKER_DWARFFILE_H