[llvm] [llvm-gsymutil] Print a DWO file missing warning under --quiet flag (PR #68062)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 2 19:12:43 PDT 2023
https://github.com/kusmour created https://github.com/llvm/llvm-project/pull/68062
Create binary with split-dwarf:
```
clang++ -g -gdwarf-4 -gsplit-dwarf helloworld.cpp -o hello_split
```
Remane the dwo file to a different name so llvm-gsymutil can't find it
```
mv hello_split-helloworld.dwo hello_split-helloworld--.dwo
```
Now run llvm-gsymutil conversion, it should print out warning with and without the `--quiet` flag
```
$ ./bin/llvm-gsymutil --convert=./hello_split
Input file: ./hello_split
Output file (x86_64): ./hello_split.gsym
warning: Unable to retrieve DWO .debug_info section for hello_split-helloworld.dwo
Loaded 0 functions from DWARF.
Loaded 0 functions from symbol table.
Pruned 0 functions, ended with 0 total
DWARF conversion failed: : no functions to encode
```
```
$ ./bin/llvm-gsymutil --convert=./hello_split --quiet
Input file: ./hello_split
Output file (x86_64): ./hello_split.gsym
warning: Unable to retrieve DWO .debug_info section for some object files. (Remove the --quiet flag for full output)
Pruned 0 functions, ended with 0 total
DWARF conversion failed: : no functions to encode
```
>From a7899c6f0bd15c6aca5f723cd26ed94561db0b3f Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Mon, 2 Oct 2023 17:50:18 -0700
Subject: [PATCH] [llvm-gsymutil] Print one-time DWO file missing warning under
--quiet flag
Create binary with split-dwarf:
```
clang++ -g -gdwarf-4 -gsplit-dwarf helloworld.cpp -o hello_split
```
Remane the dwo file to a different name so llvm-gsymutil can't find it
```
mv hello_split-helloworld.dwo hello_split-helloworld--.dwo
```
Now run llvm-gsymutil conversion, it should print out warning with and without the `--quiet` flag
```
$ ./bin/llvm-gsymutil --convert=./hello_split
Input file: ./hello_split
Output file (x86_64): ./hello_split.gsym
warning: Unable to retrieve DWO .debug_info section for hello_split-helloworld.dwo
Loaded 0 functions from DWARF.
Loaded 0 functions from symbol table.
Pruned 0 functions, ended with 0 total
DWARF conversion failed: : no functions to encode
```
```
$ ./bin/llvm-gsymutil --convert=./hello_split --quiet
Input file: ./hello_split
Output file (x86_64): ./hello_split.gsym
warning: Unable to retrieve DWO .debug_info section for some object files. (Remove the --quiet flag for full output)
Pruned 0 functions, ended with 0 total
DWARF conversion failed: : no functions to encode
```
---
llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp | 22 +++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp
index e38347f15e3ae8b..f239950d28b84b8 100644
--- a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp
+++ b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp
@@ -502,17 +502,25 @@ void DwarfTransformer::handleDie(raw_ostream *OS, CUInfo &CUI, DWARFDie Die) {
Error DwarfTransformer::convert(uint32_t NumThreads, raw_ostream *OS) {
size_t NumBefore = Gsym.getNumFunctionInfos();
+ std::once_flag flag;
auto getDie = [&](DWARFUnit &DwarfUnit) -> DWARFDie {
DWARFDie ReturnDie = DwarfUnit.getUnitDIE(false);
if (DwarfUnit.getDWOId()) {
DWARFUnit *DWOCU = DwarfUnit.getNonSkeletonUnitDIE(false).getDwarfUnit();
- if (OS && !DWOCU->isDWOUnit()) {
- std::string DWOName = dwarf::toString(
- DwarfUnit.getUnitDIE().find(
- {dwarf::DW_AT_dwo_name, dwarf::DW_AT_GNU_dwo_name}),
- "");
- *OS << "warning: Unable to retrieve DWO .debug_info section for "
- << DWOName << "\n";
+ if (!DWOCU->isDWOUnit()) {
+ if (OS) {
+ std::string DWOName = dwarf::toString(
+ DwarfUnit.getUnitDIE().find(
+ {dwarf::DW_AT_dwo_name, dwarf::DW_AT_GNU_dwo_name}),
+ "");
+ *OS << "warning: Unable to retrieve DWO .debug_info section for "
+ << DWOName << "\n";
+ } else {
+ std::call_once(flag, [](){
+ outs() << "warning: Unable to retrieve DWO .debug_info section for some "
+ "object files. (Remove the --quiet flag for full output)\n";
+ });
+ }
} else {
ReturnDie = DWOCU->getUnitDIE(false);
}
More information about the llvm-commits
mailing list