[PATCH] D144783: [ELF] Move getSectionAndRelocations to ELF.cpp from ELFDumper.cpp
Rahman Lavaee via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 2 09:42:52 PST 2023
rahmanl added inline comments.
================
Comment at: llvm/include/llvm/Object/ELF.h:397
+ Error getSectionAndRelocations(
+ std::function<Expected<bool>(const Elf_Shdr &)> IsMatch,
+ llvm::MapVector<const Elf_Shdr *, const Elf_Shdr *> &SecToRelocMap) const;
----------------
rahmanl wrote:
> Let's not add complexity here. IsMatch should be a simple function which returns true or false.
If adopting the approach I mentioned below, we can keep the return value as `Expected<bool>>` here and just capture the error and store that in the map.
================
Comment at: llvm/lib/Object/ELF.cpp:727-735
+ if (!RelSecOrErr) {
+ IsSuccess = joinErrors(
+ std::move(IsSuccess),
+ make_error<StringError>(std::error_code(),
+ describe(*this, Sec) +
+ ": failed to get a relocated section: " +
+ toString(RelSecOrErr.takeError())));
----------------
jhenderson wrote:
> rahmanl wrote:
> > How about reporting warnings here and changing `SecToRelcMap` type to `llvm::MapVector<const Elf_Shdr *, Expected<const Elf_Shdr *>>` so you can put the errors there? This way you can just let the clients do the error handling on their own.
> This is a library, so we shouldn't be reporting warnings directly here (see also my lightning talk :) https://www.youtube.com/watch?v=YSEY4pg1YB0). Or do you mean something else?
Makes sense. No need to report the warning here. My main suggestion is to avoid both returning by parameter and by return value. So I guess in this case we can return by `llvm::MapVector<const Elf_Shdr *, Expected<const Elf_Shdr *>>`. This way, the client will need to consume the error only when accessing the corresponding map entry. WDYT?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D144783/new/
https://reviews.llvm.org/D144783
More information about the llvm-commits
mailing list