[llvm] [dsymutil] Use DebugMapFilter when parsing --allow/--disallow YAML input (PR #185061)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 6 09:42:23 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-debuginfo
Author: Roy Shi (royitaqi)
<details>
<summary>Changes</summary>
PR https://github.com/llvm/llvm-project/pull/182083 forgot to switch over to use the newly added `DebugMapFilter` class when parsing the `--allow/--disallow` YAML input. It was still using `ObjectFileList`/`ObjectFileEntry`, which was added initially in the same PR and was later intended to be removed by https://github.com/llvm/llvm-project/pull/182083/changes/27e5c1eefa39580e356dbce67a8635e2723495a9 (which also didn't happen).
This patch does the switch over and removes.
---
Full diff: https://github.com/llvm/llvm-project/pull/185061.diff
3 Files Affected:
- (modified) llvm/tools/dsymutil/DebugMap.cpp (+23-7)
- (modified) llvm/tools/dsymutil/DebugMap.h (+42-1)
- (modified) llvm/tools/dsymutil/dsymutil.cpp (+4-31)
``````````diff
diff --git a/llvm/tools/dsymutil/DebugMap.cpp b/llvm/tools/dsymutil/DebugMap.cpp
index 220666cf0af48..a25367b0047c3 100644
--- a/llvm/tools/dsymutil/DebugMap.cpp
+++ b/llvm/tools/dsymutil/DebugMap.cpp
@@ -230,17 +230,33 @@ SequenceTraits<std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>>>::
return seq.size();
}
-dsymutil::DebugMapObject &
+dsymutil::DebugMapObjectFilter &
SequenceTraits<std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>>>::
element(IO &io,
std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>> &seq,
size_t index) {
- auto &Objects = reinterpret_cast<
- std::vector<std::unique_ptr<dsymutil::DebugMapObject>> &>(seq);
- return SequenceTraits<
- std::vector<std::unique_ptr<dsymutil::DebugMapObject>>>::element(io,
- Objects,
- index);
+ if (index >= seq.size()) {
+ seq.resize(index + 1);
+ seq[index].reset(new dsymutil::DebugMapObjectFilter);
+ }
+ return *seq[index];
+}
+
+void MappingTraits<dsymutil::DebugMapObjectFilter>::mapping(
+ IO &io, dsymutil::DebugMapObjectFilter &DMOF) {
+ io.mapRequired("filename", DMOF.Filename);
+}
+
+void MappingTraits<dsymutil::DebugMapFilter>::mapping(
+ IO &io, dsymutil::DebugMapFilter &DMF) {
+ io.mapRequired("objects", DMF.Objects);
+}
+
+void MappingTraits<std::unique_ptr<dsymutil::DebugMapFilter>>::mapping(
+ IO &io, std::unique_ptr<dsymutil::DebugMapFilter> &DMF) {
+ if (!DMF)
+ DMF.reset(new DebugMapFilter());
+ io.mapRequired("objects", DMF->Objects);
}
void MappingTraits<dsymutil::DebugMap>::mapping(IO &io,
diff --git a/llvm/tools/dsymutil/DebugMap.h b/llvm/tools/dsymutil/DebugMap.h
index 5176ed74793bd..ad63d3f2c7b26 100644
--- a/llvm/tools/dsymutil/DebugMap.h
+++ b/llvm/tools/dsymutil/DebugMap.h
@@ -51,8 +51,37 @@ class DebugMapObject;
class DebugMapObjectFilter;
class DebugMapFilter {
+ using ObjectContainer = std::vector<std::unique_ptr<DebugMapObjectFilter>>;
+
+public:
+ virtual ~DebugMapFilter() = default;
+ using const_iterator = ObjectContainer::const_iterator;
+
+ iterator_range<const_iterator> objects() const {
+ return make_range(begin(), end());
+ }
+
+ const_iterator begin() const { return Objects.begin(); }
+
+ const_iterator end() const { return Objects.end(); }
+
protected:
std::vector<std::unique_ptr<DebugMapObjectFilter>> Objects;
+
+private:
+ friend class DebugMap;
+
+ /// For YAML IO support.
+ ///@{
+ friend yaml::MappingTraits<std::unique_ptr<DebugMapFilter>>;
+ friend yaml::MappingTraits<DebugMapFilter>;
+
+ DebugMapFilter() = default;
+
+public:
+ DebugMapFilter(DebugMapFilter &&) = default;
+ DebugMapFilter &operator=(DebugMapFilter &&) = default;
+ ///@}
};
/// The DebugMap object stores the list of object files to query for debug
@@ -278,13 +307,17 @@ struct SequenceTraits<std::vector<std::unique_ptr<dsymutil::DebugMapObject>>> {
size_t index);
};
+template <> struct MappingTraits<dsymutil::DebugMapObjectFilter> {
+ static void mapping(IO &io, dsymutil::DebugMapObjectFilter &DMO);
+};
+
template <>
struct SequenceTraits<
std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>>> {
static size_t
size(IO &io,
std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>> &seq);
- static dsymutil::DebugMapObject &
+ static dsymutil::DebugMapObjectFilter &
element(IO &,
std::vector<std::unique_ptr<dsymutil::DebugMapObjectFilter>> &seq,
size_t index);
@@ -298,6 +331,14 @@ template <> struct MappingTraits<std::unique_ptr<dsymutil::DebugMap>> {
static void mapping(IO &io, std::unique_ptr<dsymutil::DebugMap> &DM);
};
+template <> struct MappingTraits<dsymutil::DebugMapFilter> {
+ static void mapping(IO &io, dsymutil::DebugMapFilter &DMF);
+};
+
+template <> struct MappingTraits<std::unique_ptr<dsymutil::DebugMapFilter>> {
+ static void mapping(IO &io, std::unique_ptr<dsymutil::DebugMapFilter> &DMF);
+};
+
} // end namespace yaml
} // end namespace llvm
diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp
index 2f32a48b38804..108b840ce1c68 100644
--- a/llvm/tools/dsymutil/dsymutil.cpp
+++ b/llvm/tools/dsymutil/dsymutil.cpp
@@ -59,33 +59,6 @@ using namespace llvm::dsymutil;
using namespace object;
using namespace llvm::dwarf_linker;
-/// YAML structure for --allow / --disallow object list files.
-struct ObjectFileEntry {
- std::string Filename;
-};
-
-struct ObjectFileList {
- std::vector<ObjectFileEntry> Objects;
-};
-
-LLVM_YAML_IS_SEQUENCE_VECTOR(ObjectFileEntry)
-
-namespace llvm {
-namespace yaml {
-template <> struct MappingTraits<ObjectFileEntry> {
- static void mapping(IO &IO, ObjectFileEntry &Entry) {
- IO.mapRequired("filename", Entry.Filename);
- }
-};
-
-template <> struct MappingTraits<ObjectFileList> {
- static void mapping(IO &IO, ObjectFileList &List) {
- IO.mapOptional("objects", List.Objects);
- }
-};
-} // namespace yaml
-} // namespace llvm
-
namespace {
enum ID {
OPT_INVALID = 0, // This is not an option ID.
@@ -754,15 +727,15 @@ int dsymutil_main(int argc, char **argv, const llvm::ToolContext &) {
StringRef Content = (*BufOrErr)->getBuffer();
if (!Content.trim().empty()) {
yaml::Input YAMLIn(Content);
- ObjectFileList ObjList;
- YAMLIn >> ObjList;
+ std::unique_ptr<DebugMapFilter> DebugMapFilter;
+ YAMLIn >> DebugMapFilter;
if (YAMLIn.error())
return make_error<StringError>(
Twine("cannot parse allow/disallow file '") + FilePath + "'",
YAMLIn.error());
- for (const auto &Entry : ObjList.Objects) {
+ for (const auto &Entry : *DebugMapFilter) {
SmallString<80> Path(Options.LinkOpts.PrependPath);
- sys::path::append(Path, Entry.Filename);
+ sys::path::append(Path, Entry->getObjectFilename());
Result.insert(Path);
}
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/185061
More information about the llvm-commits
mailing list