[llvm] [llvm-readobj] Emit valid JSON for Verdef Predecessors (PR #200069)
Shawn Zhong via llvm-commits
llvm-commits at lists.llvm.org
Wed May 27 14:54:14 PDT 2026
https://github.com/ShawnZhong created https://github.com/llvm/llvm-project/pull/200069
Previously, `llvm-readobj` generated invalid JSON with Verdef Predecessors:
```
yaml2obj llvm/test/tools/llvm-readobj/ELF/versioninfo.test
| llvm-readobj --elf-output-style=JSON --pretty-print -V -
| grep Predecessors
```
```
"Name": "VERSION1"Predecessors: []
"Name": "VERSION1"Predecessors: []
"Name": "VERSION1"Predecessors: []
"Name": "VERSION1"Predecessors: []
"Name": "VERSION1"Predecessors: []
"Name": "VERSION2"Predecessors: [VERSION1, VERSION3]
```
>From 3442f43667b8c3be66fe6adf96aeb377152a9ebc Mon Sep 17 00:00:00 2001
From: ShawnZhong <github at shawnzhong.com>
Date: Wed, 27 May 2026 16:36:45 -0500
Subject: [PATCH 1/2] [llvm-readobj][test] Add JSON test for Verdef
Predecessors
---
llvm/test/tools/llvm-readobj/ELF/versioninfo.test | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/llvm/test/tools/llvm-readobj/ELF/versioninfo.test b/llvm/test/tools/llvm-readobj/ELF/versioninfo.test
index 842d6a275b505..e4c1f50bc7da2 100644
--- a/llvm/test/tools/llvm-readobj/ELF/versioninfo.test
+++ b/llvm/test/tools/llvm-readobj/ELF/versioninfo.test
@@ -5,6 +5,8 @@
# RUN: yaml2obj %s --docnum=1 -o %t1
# RUN: llvm-readobj -V %t1 | FileCheck %s --check-prefix=LLVM
# RUN: llvm-readelf -V %t1 | FileCheck %s --check-prefix=GNU
+# RUN: llvm-readobj --elf-output-style=JSON --pretty-print -V %t1 \
+# RUN: | FileCheck %s --check-prefix=JSON
--- !ELF
FileHeader:
@@ -273,3 +275,15 @@ DynamicSymbols:
# GNU-NEXT: 0x0050: Name: v2 Flags: <unknown> Version: 5
# GNU-NEXT: 0x0060: Version: 1 File: verneed2.so.0 Cnt: 1
# GNU-NEXT: 0x0070: Name: v3 Flags: none Version: 6
+
+## --elf-output-style=JSON must emit well-formed JSON for Predecessors.
+# JSON: "VersionDefinitions": [
+# JSON: "Definition": {
+# JSON: "Name": "VERSION1",
+# JSON-NEXT: "Predecessors": []
+# JSON: "Definition": {
+# JSON: "Name": "VERSION2",
+# JSON-NEXT: "Predecessors": [
+# JSON-NEXT: "VERSION1",
+# JSON-NEXT: "VERSION3"
+# JSON-NEXT: ]
>From 49d1bae898a623a08c14ed16bec0c9b266dd9fec Mon Sep 17 00:00:00 2001
From: ShawnZhong <github at shawnzhong.com>
Date: Wed, 27 May 2026 16:37:00 -0500
Subject: [PATCH 2/2] [llvm-readobj] Emit valid JSON for Verdef Predecessors
---
llvm/tools/llvm-readobj/ELFDumper.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 0169e7fb0fff8..9b2c9f12f98dd 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -8074,9 +8074,10 @@ void LLVMELFDumper<ELFT>::printVersionDefinitionSection(const Elf_Shdr *Sec) {
W.printNumber("Index", D.Ndx);
W.printNumber("Hash", D.Hash);
W.printString("Name", D.Name);
- W.printList(
- "Predecessors", D.AuxV,
- [](raw_ostream &OS, const VerdAux &Aux) { OS << Aux.Name.c_str(); });
+ std::vector<std::string> Predecessors;
+ for (const VerdAux &Aux : D.AuxV)
+ Predecessors.push_back(Aux.Name);
+ W.printList("Predecessors", Predecessors);
}
}
More information about the llvm-commits
mailing list