mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[Debuginfo][NFC] Unify error reporting routines inside DebugInfoDWARF.
Summary: Error reporting in DebugInfoDWARF library currently done in three ways : 1. Direct calls to WithColor::error()/WithColor::warning() 2. ErrorPolicy defaultErrorHandler(Error E); 3. void dumpWarning(Error Warning); additionally, other locations could have more variations: lld/ELF/SyntheticSection.cpp if (Error e = cu->tryExtractDIEsIfNeeded(false)) { error(toString(sec) + ": " + toString(std::move(e))); DebugInfo/DWARF/DWARFUnit.cpp if (Error e = tryExtractDIEsIfNeeded(CUDieOnly)) WithColor::error() << toString(std::move(e)); Thus error reporting could look inconsistent. To have a consistent error messages it is necessary to have a possibility to redefine error reporting functions. This patch creates two handlers and allows to redefine them. It also patches all places inside DebugInfoDWARF to use these handlers. The intention is always to use following handlers for error reporting purposes inside DebugInfoDWARF: DebugInfo/DWARF/DWARFContext.h std::function<void(Error E)> RecoverableErrorHandler = WithColor::defaultErrorHandler; std::function<void(Error E)> WarningHandler = WithColor::defaultWarningHandler; This is last patch from series of patches: D74481, D74635, D75118. Reviewers: jhenderson, dblaikie, probinson, aprantl, JDevlieghere Reviewed By: jhenderson Subscribers: grimar, hiraditya, llvm-commits Tags: #llvm, #debug-info Differential Revision: https://reviews.llvm.org/D74308
This commit is contained in:
parent
4af1e9e981
commit
35d0c4caae
@ -106,7 +106,11 @@ class DWARFContext : public DIContext {
|
||||
|
||||
public:
|
||||
DWARFContext(std::unique_ptr<const DWARFObject> DObj,
|
||||
std::string DWPName = "");
|
||||
std::string DWPName = "",
|
||||
std::function<void(Error)> RecoverableErrorHandler =
|
||||
WithColor::defaultErrorHandler,
|
||||
std::function<void(Error)> WarningHandler =
|
||||
WithColor::defaultWarningHandler);
|
||||
~DWARFContext();
|
||||
|
||||
DWARFContext(DWARFContext &) = delete;
|
||||
@ -350,12 +354,19 @@ public:
|
||||
|
||||
static std::unique_ptr<DWARFContext>
|
||||
create(const object::ObjectFile &Obj, const LoadedObjectInfo *L = nullptr,
|
||||
function_ref<void(Error)> HandleError = WithColor::defaultErrorHandler,
|
||||
std::string DWPName = "");
|
||||
std::string DWPName = "",
|
||||
std::function<void(Error)> RecoverableErrorHandler =
|
||||
WithColor::defaultErrorHandler,
|
||||
std::function<void(Error)> WarningHandler =
|
||||
WithColor::defaultWarningHandler);
|
||||
|
||||
static std::unique_ptr<DWARFContext>
|
||||
create(const StringMap<std::unique_ptr<MemoryBuffer>> &Sections,
|
||||
uint8_t AddrSize, bool isLittleEndian = sys::IsLittleEndianHost);
|
||||
uint8_t AddrSize, bool isLittleEndian = sys::IsLittleEndianHost,
|
||||
std::function<void(Error)> RecoverableErrorHandler =
|
||||
WithColor::defaultErrorHandler,
|
||||
std::function<void(Error)> WarningHandler =
|
||||
WithColor::defaultWarningHandler);
|
||||
|
||||
/// Loads register info for the architecture of the provided object file.
|
||||
/// Improves readability of dumped DWARF expressions. Requires the caller to
|
||||
|
@ -65,8 +65,12 @@ using FileLineInfoKind = DILineInfoSpecifier::FileLineInfoKind;
|
||||
using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind;
|
||||
|
||||
DWARFContext::DWARFContext(std::unique_ptr<const DWARFObject> DObj,
|
||||
std::string DWPName)
|
||||
: DIContext(CK_DWARF), DWPName(std::move(DWPName)), DObj(std::move(DObj)) {}
|
||||
std::string DWPName,
|
||||
std::function<void(Error)> RecoverableErrorHandler,
|
||||
std::function<void(Error)> WarningHandler)
|
||||
: DIContext(CK_DWARF), DWPName(std::move(DWPName)),
|
||||
RecoverableErrorHandler(RecoverableErrorHandler),
|
||||
WarningHandler(WarningHandler), DObj(std::move(DObj)) {}
|
||||
|
||||
DWARFContext::~DWARFContext() = default;
|
||||
|
||||
@ -1885,18 +1889,25 @@ public:
|
||||
|
||||
std::unique_ptr<DWARFContext>
|
||||
DWARFContext::create(const object::ObjectFile &Obj, const LoadedObjectInfo *L,
|
||||
function_ref<void(Error)> HandleError,
|
||||
std::string DWPName) {
|
||||
auto DObj = std::make_unique<DWARFObjInMemory>(Obj, L, HandleError);
|
||||
return std::make_unique<DWARFContext>(std::move(DObj), std::move(DWPName));
|
||||
std::string DWPName,
|
||||
std::function<void(Error)> RecoverableErrorHandler,
|
||||
std::function<void(Error)> WarningHandler) {
|
||||
auto DObj =
|
||||
std::make_unique<DWARFObjInMemory>(Obj, L, RecoverableErrorHandler);
|
||||
return std::make_unique<DWARFContext>(std::move(DObj), std::move(DWPName),
|
||||
RecoverableErrorHandler,
|
||||
WarningHandler);
|
||||
}
|
||||
|
||||
std::unique_ptr<DWARFContext>
|
||||
DWARFContext::create(const StringMap<std::unique_ptr<MemoryBuffer>> &Sections,
|
||||
uint8_t AddrSize, bool isLittleEndian) {
|
||||
uint8_t AddrSize, bool isLittleEndian,
|
||||
std::function<void(Error)> RecoverableErrorHandler,
|
||||
std::function<void(Error)> WarningHandler) {
|
||||
auto DObj =
|
||||
std::make_unique<DWARFObjInMemory>(Sections, AddrSize, isLittleEndian);
|
||||
return std::make_unique<DWARFContext>(std::move(DObj), "");
|
||||
return std::make_unique<DWARFContext>(
|
||||
std::move(DObj), "", RecoverableErrorHandler, WarningHandler);
|
||||
}
|
||||
|
||||
Error DWARFContext::loadRegisterInfo(const object::ObjectFile &Obj) {
|
||||
|
@ -563,8 +563,7 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
|
||||
}
|
||||
}
|
||||
if (!Context)
|
||||
Context = DWARFContext::create(
|
||||
*Objects.second, nullptr, WithColor::defaultErrorHandler, Opts.DWPName);
|
||||
Context = DWARFContext::create(*Objects.second, nullptr, Opts.DWPName);
|
||||
return createModuleInfo(Objects.first, std::move(Context), ModuleName);
|
||||
}
|
||||
|
||||
|
@ -2532,7 +2532,7 @@ TEST(DWARFDebugInfo, TestErrorReporting) {
|
||||
// DWARFContext parses whole file and finds the two errors we expect.
|
||||
int Errors = 0;
|
||||
std::unique_ptr<DWARFContext> Ctx1 =
|
||||
DWARFContext::create(**Obj, nullptr, [&](Error E) {
|
||||
DWARFContext::create(**Obj, nullptr, "", [&](Error E) {
|
||||
++Errors;
|
||||
consumeError(std::move(E));
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user