Skip to content

Commit 75bffeb

Browse files
committed
Function name printing to match stack size printing behavior.
1 parent d04fbd0 commit 75bffeb

File tree

2 files changed

+38
-29
lines changed

2 files changed

+38
-29
lines changed

llvm/test/tools/llvm-readobj/ELF/call-graph-info.test

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878

7979
# LLVM: callgraph_info [
8080
# LLVM-NEXT: Function {
81-
# LLVM-NEXT: Name: foo
81+
# LLVM-NEXT: Functions: [foo]
8282
# LLVM-NEXT: Address: 0x1790
8383
# LLVM-NEXT: Version: 0
8484
# LLVM-NEXT: IsIndirectTarget: Yes
@@ -91,7 +91,7 @@
9191
# LLVM-NEXT: ]
9292
# LLVM-NEXT: }
9393
# LLVM-NEXT: Function {
94-
# LLVM-NEXT: Name: bar
94+
# LLVM-NEXT: Functions: [bar]
9595
# LLVM-NEXT: Address: 0x17A0
9696
# LLVM-NEXT: Version: 0
9797
# LLVM-NEXT: IsIndirectTarget: Yes
@@ -104,7 +104,7 @@
104104
# LLVM-NEXT: ]
105105
# LLVM-NEXT: }
106106
# LLVM-NEXT: Function {
107-
# LLVM-NEXT: Name: baz
107+
# LLVM-NEXT: Functions: [baz]
108108
# LLVM-NEXT: Address: 0x17B0
109109
# LLVM-NEXT: Version: 0
110110
# LLVM-NEXT: IsIndirectTarget: Yes
@@ -117,23 +117,23 @@
117117
# LLVM-NEXT: ]
118118
# LLVM-NEXT: }
119119
# LLVM-NEXT: Function {
120-
# LLVM-NEXT: Name: main
120+
# LLVM-NEXT: Functions: [main]
121121
# LLVM-NEXT: Address: 0x17C0
122122
# LLVM-NEXT: Version: 0
123123
# LLVM-NEXT: IsIndirectTarget: Yes
124124
# LLVM-NEXT: TypeId: 0xFA6809609A76AFCA
125125
# LLVM-NEXT: NumDirectCallees: 3
126126
# LLVM-NEXT: DirectCallees [
127127
# LLVM-NEXT: Entry {
128-
# LLVM-NEXT: Name: foo
128+
# LLVM-NEXT: Functions: [foo]
129129
# LLVM-NEXT: Address: 0x1790
130130
# LLVM-NEXT: }
131131
# LLVM-NEXT: Entry {
132-
# LLVM-NEXT: Name: bar
132+
# LLVM-NEXT: Functions: [bar]
133133
# LLVM-NEXT: Address: 0x17A0
134134
# LLVM-NEXT: }
135135
# LLVM-NEXT: Entry {
136-
# LLVM-NEXT: Name: baz
136+
# LLVM-NEXT: Functions: [baz]
137137
# LLVM-NEXT: Address: 0x17B0
138138
# LLVM-NEXT: }
139139
# LLVM-NEXT: ]
@@ -153,7 +153,9 @@
153153
# JSON: "callgraph_info": [
154154
# JSON-NEXT: {
155155
# JSON-NEXT: "Function": {
156-
# JSON-NEXT: "Name": "foo",
156+
# JSON-NEXT: "Functions": [
157+
# JSON-NEXT: "foo"
158+
# JSON-NEXT: ],
157159
# JSON-NEXT: "Address": 6032,
158160
# JSON-NEXT: "Version": 0,
159161
# JSON-NEXT: "IsIndirectTarget": true,
@@ -166,7 +168,9 @@
166168
# JSON-NEXT: },
167169
# JSON-NEXT: {
168170
# JSON-NEXT: "Function": {
169-
# JSON-NEXT: "Name": "bar",
171+
# JSON-NEXT: "Functions": [
172+
# JSON-NEXT: "bar"
173+
# JSON-NEXT: ],
170174
# JSON-NEXT: "Address": 6048,
171175
# JSON-NEXT: "Version": 0,
172176
# JSON-NEXT: "IsIndirectTarget": true,
@@ -179,7 +183,9 @@
179183
# JSON-NEXT: },
180184
# JSON-NEXT: {
181185
# JSON-NEXT: "Function": {
182-
# JSON-NEXT: "Name": "baz",
186+
# JSON-NEXT: "Functions": [
187+
# JSON-NEXT: "baz"
188+
# JSON-NEXT: ],
183189
# JSON-NEXT: "Address": 6064,
184190
# JSON-NEXT: "Version": 0,
185191
# JSON-NEXT: "IsIndirectTarget": true,
@@ -192,7 +198,9 @@
192198
# JSON-NEXT: },
193199
# JSON-NEXT: {
194200
# JSON-NEXT: "Function": {
195-
# JSON-NEXT: "Name": "main",
201+
# JSON-NEXT: "Functions": [
202+
# JSON-NEXT: "main"
203+
# JSON-NEXT: ],
196204
# JSON-NEXT: "Address": 6080,
197205
# JSON-NEXT: "Version": 0,
198206
# JSON-NEXT: "IsIndirectTarget": true,
@@ -201,19 +209,25 @@
201209
# JSON-NEXT: "DirectCallees": [
202210
# JSON-NEXT: {
203211
# JSON-NEXT: "Entry": {
204-
# JSON-NEXT: "Name": "foo",
212+
# JSON-NEXT: "Functions": [
213+
# JSON-NEXT: "foo"
214+
# JSON-NEXT: ],
205215
# JSON-NEXT: "Address": 6032
206216
# JSON-NEXT: }
207217
# JSON-NEXT: },
208218
# JSON-NEXT: {
209219
# JSON-NEXT: "Entry": {
210-
# JSON-NEXT: "Name": "bar",
220+
# JSON-NEXT: "Functions": [
221+
# JSON-NEXT: "bar"
222+
# JSON-NEXT: ],
211223
# JSON-NEXT: "Address": 6048
212224
# JSON-NEXT: }
213225
# JSON-NEXT: },
214226
# JSON-NEXT: {
215227
# JSON-NEXT: "Entry": {
216-
# JSON-NEXT: "Name": "baz",
228+
# JSON-NEXT: "Functions": [
229+
# JSON-NEXT: "baz"
230+
# JSON-NEXT: ],
217231
# JSON-NEXT: "Address": 6064
218232
# JSON-NEXT: }
219233
# JSON-NEXT: }

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -464,16 +464,13 @@ template <typename ELFT> class ELFDumper : public ObjDumper {
464464
mutable SmallVector<std::optional<VersionEntry>, 0> VersionMap;
465465

466466
protected:
467-
std::string getFunctionNamesString(uint64_t FuncAddr) {
467+
SmallVector<std::string> getFunctionNames(uint64_t FuncAddr) {
468468
SmallVector<uint32_t> FuncSymIndexes =
469469
this->getSymbolIndexesForFunctionAddress(FuncAddr, std::nullopt);
470-
if (FuncSymIndexes.empty())
471-
return "";
472-
473470
SmallVector<std::string> FuncSymNames;
474471
for (uint32_t Index : FuncSymIndexes)
475472
FuncSymNames.push_back(this->getStaticSymbolName(Index));
476-
return join(FuncSymNames, ", ");
473+
return FuncSymNames;
477474
}
478475
};
479476

@@ -5490,14 +5487,14 @@ template <class ELFT> void GNUELFDumper<ELFT>::printCallGraphInfo() {
54905487
const Elf_Shdr *RelocSymTab = nullptr;
54915488
this->getCallGraphRelocations(Relocations, RelocSymTab);
54925489

5493-
auto PrintFunc = [](uint64_t FuncEntryPC, std::string FuncSymName,
5490+
auto PrintFunc = [](uint64_t FuncEntryPC, ArrayRef<std::string> FuncNames,
54945491
formatted_raw_ostream &OS) {
54955492
OS.PadToColumn(4);
54965493
OS << "Address:";
54975494
OS.PadToColumn(21);
54985495
OS << to_string(format_hex(FuncEntryPC, 1));
5499-
if (!FuncSymName.empty())
5500-
OS << " <" << FuncSymName << ">";
5496+
if (!FuncNames.empty())
5497+
OS << " <" << join(FuncNames.begin(), FuncNames.end(), ", ") << ">";
55015498
OS << "\n";
55025499
};
55035500

@@ -5537,8 +5534,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printCallGraphInfo() {
55375534

55385535
auto PrintFunctionInfo = [&](uint64_t FuncEntryPC) {
55395536
if (this->Obj.getHeader().e_type != ELF::ET_REL) {
5540-
std::string FuncSymName = this->getFunctionNamesString(FuncEntryPC);
5541-
PrintFunc(FuncEntryPC, FuncSymName, OS);
5537+
PrintFunc(FuncEntryPC, this->getFunctionNames(FuncEntryPC), OS);
55425538
return;
55435539
}
55445540
auto Reloc = llvm::lower_bound(
@@ -8416,10 +8412,10 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printCallGraphInfo() {
84168412
const Elf_Shdr *RelocSymTab = nullptr;
84178413
this->getCallGraphRelocations(Relocations, RelocSymTab);
84188414

8419-
auto PrintFunc = [](uint64_t FuncEntryPC, std::string FuncSymName,
8415+
auto PrintFunc = [](uint64_t FuncEntryPC, ArrayRef<std::string> FuncNames,
84208416
ScopedPrinter &W) {
8421-
if (!FuncSymName.empty())
8422-
W.printString("Name", FuncSymName);
8417+
if (!FuncNames.empty())
8418+
W.printList("Functions", FuncNames);
84238419
W.printHex("Address", FuncEntryPC);
84248420
};
84258421

@@ -8448,8 +8444,7 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printCallGraphInfo() {
84488444

84498445
auto PrintFunctionInfo = [&](uint64_t FuncEntryPC) {
84508446
if (this->Obj.getHeader().e_type != ELF::ET_REL) {
8451-
std::string FuncSymName = this->getFunctionNamesString(FuncEntryPC);
8452-
PrintFunc(FuncEntryPC, FuncSymName, W);
8447+
PrintFunc(FuncEntryPC, this->getFunctionNames(FuncEntryPC), W);
84538448
return;
84548449
}
84558450
auto Reloc = llvm::lower_bound(

0 commit comments

Comments
 (0)