[llvm] [llvm-dwp] Replace MCStreamer with direct ELF writer for zero-copy output (PR #192112)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 16 10:26:57 PDT 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions h,cpp -- llvm/include/llvm/BinaryFormat/ELFWriter.h llvm/lib/BinaryFormat/ELFWriter.cpp llvm/include/llvm/DWP/DWP.h llvm/include/llvm/DWP/DWPStringPool.h llvm/lib/DWP/DWP.cpp llvm/lib/MC/ELFObjectWriter.cpp llvm/tools/llvm-dwp/llvm-dwp.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/include/llvm/BinaryFormat/ELFWriter.h b/llvm/include/llvm/BinaryFormat/ELFWriter.h
index 4a11621db..7b5ecc34e 100644
--- a/llvm/include/llvm/BinaryFormat/ELFWriter.h
+++ b/llvm/include/llvm/BinaryFormat/ELFWriter.h
@@ -26,11 +26,10 @@ void writeHeader(support::endian::Writer &W, bool Is64Bit, uint8_t OSABI,
uint64_t SHOff, uint16_t SHNum, uint16_t SHStrNdx);
/// Write a single ELF section header entry (Elf32_Shdr or Elf64_Shdr).
-void writeSectionHeader(support::endian::Writer &W, bool Is64Bit,
- uint32_t Name, uint32_t Type, uint64_t Flags,
- uint64_t Address, uint64_t Offset, uint64_t Size,
- uint32_t Link, uint32_t Info, uint64_t Alignment,
- uint64_t EntrySize);
+void writeSectionHeader(support::endian::Writer &W, bool Is64Bit, uint32_t Name,
+ uint32_t Type, uint64_t Flags, uint64_t Address,
+ uint64_t Offset, uint64_t Size, uint32_t Link,
+ uint32_t Info, uint64_t Alignment, uint64_t EntrySize);
} // namespace ELF
} // namespace llvm
diff --git a/llvm/lib/BinaryFormat/ELFWriter.cpp b/llvm/lib/BinaryFormat/ELFWriter.cpp
index 4a0fd79d0..2d593d501 100644
--- a/llvm/lib/BinaryFormat/ELFWriter.cpp
+++ b/llvm/lib/BinaryFormat/ELFWriter.cpp
@@ -19,8 +19,8 @@ static void writeWord(support::endian::Writer &W, bool Is64Bit, uint64_t Val) {
}
void ELF::writeHeader(support::endian::Writer &W, bool Is64Bit, uint8_t OSABI,
- uint8_t ABIVersion, uint16_t EMachine, uint32_t EFlags,
- uint64_t SHOff, uint16_t SHNum, uint16_t SHStrNdx) {
+ uint8_t ABIVersion, uint16_t EMachine, uint32_t EFlags,
+ uint64_t SHOff, uint16_t SHNum, uint16_t SHStrNdx) {
W.OS << ElfMagic;
W.OS << char(Is64Bit ? ELFCLASS64 : ELFCLASS32);
W.OS << char(W.Endian == llvm::endianness::little ? ELFDATA2LSB
@@ -46,10 +46,10 @@ void ELF::writeHeader(support::endian::Writer &W, bool Is64Bit, uint8_t OSABI,
}
void ELF::writeSectionHeader(support::endian::Writer &W, bool Is64Bit,
- uint32_t Name, uint32_t Type, uint64_t Flags,
- uint64_t Address, uint64_t Offset, uint64_t Size,
- uint32_t Link, uint32_t Info, uint64_t Alignment,
- uint64_t EntrySize) {
+ uint32_t Name, uint32_t Type, uint64_t Flags,
+ uint64_t Address, uint64_t Offset, uint64_t Size,
+ uint32_t Link, uint32_t Info, uint64_t Alignment,
+ uint64_t EntrySize) {
W.write<uint32_t>(Name);
W.write<uint32_t>(Type);
writeWord(W, Is64Bit, Flags);
diff --git a/llvm/lib/DWP/DWP.cpp b/llvm/lib/DWP/DWP.cpp
index d4286566d..233ace9ac 100644
--- a/llvm/lib/DWP/DWP.cpp
+++ b/llvm/lib/DWP/DWP.cpp
@@ -15,10 +15,10 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/ELF.h"
+#include "llvm/BinaryFormat/ELFWriter.h"
#include "llvm/DWP/DWPError.h"
#include "llvm/Object/Decompressor.h"
#include "llvm/Object/ELFObjectFile.h"
-#include "llvm/BinaryFormat/ELFWriter.h"
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/MathExtras.h"
#include <limits>
@@ -352,9 +352,9 @@ handleCompressedSection(std::deque<SmallString<32>> &UncompressedSections,
return Error::success();
}
-static Error buildDuplicateError(const std::pair<uint64_t, UnitIndexEntry> &PrevE,
- const CompileUnitIdentifiers &ID,
- StringRef DWPName) {
+static Error
+buildDuplicateError(const std::pair<uint64_t, UnitIndexEntry> &PrevE,
+ const CompileUnitIdentifiers &ID, StringRef DWPName) {
return make_error<DWPError>(
std::string("duplicate DWO ID (") + utohexstr(PrevE.first) + ") in " +
buildDWODescription(PrevE.second.Name, PrevE.second.DWPName,
@@ -452,8 +452,7 @@ writeStringsAndOffsets(DWPWriter &Out, DWPStringPool &Strings,
// Fast path: when there is only one input, all strings are unique and offsets
// don't need remapping. Copy both sections directly without any hashing.
- if (SingleInput &&
- StrOffsetsOptValue != Dwarf64StrOffsetsPromotion::Always) {
+ if (SingleInput && StrOffsetsOptValue != Dwarf64StrOffsetsPromotion::Always) {
Out.switchSection(DS_Str);
Out.emitBytes(CurStrSection);
Out.switchSection(DS_StrOffsets);
@@ -780,10 +779,9 @@ Error write(DWPWriter &Out, ArrayRef<std::string> Inputs,
for (const auto &Section : Obj.sections())
if (auto Err = handleSection(
KnownSections, Section, Out, UncompressedSections,
- ContributionOffsets, CurEntry, CurStrSection,
- CurStrOffsetSection, CurTypesSection, CurInfoSection,
- AbbrevSection, CurCUIndexSection, CurTUIndexSection,
- SectionLength))
+ ContributionOffsets, CurEntry, CurStrSection, CurStrOffsetSection,
+ CurTypesSection, CurInfoSection, AbbrevSection, CurCUIndexSection,
+ CurTUIndexSection, SectionLength))
return Err;
if (CurInfoSection.empty())
@@ -1059,7 +1057,8 @@ Error DWPWriter::writeELF(raw_pwrite_stream &OS) {
{DS_Line, ".debug_line.dwo", ELF::SHF_EXCLUDE, 0},
{DS_Rnglists, ".debug_rnglists.dwo", ELF::SHF_EXCLUDE, 0},
{DS_Macro, ".debug_macro.dwo", ELF::SHF_EXCLUDE, 0},
- {DS_Str, ".debug_str.dwo", ELF::SHF_EXCLUDE | ELF::SHF_MERGE | ELF::SHF_STRINGS, 1},
+ {DS_Str, ".debug_str.dwo",
+ ELF::SHF_EXCLUDE | ELF::SHF_MERGE | ELF::SHF_STRINGS, 1},
{DS_StrOffsets, ".debug_str_offsets.dwo", ELF::SHF_EXCLUDE, 0},
{DS_Info, ".debug_info.dwo", ELF::SHF_EXCLUDE, 0},
{DS_Types, ".debug_types.dwo", ELF::SHF_EXCLUDE, 0},
@@ -1087,7 +1086,8 @@ Error DWPWriter::writeELF(raw_pwrite_stream &OS) {
uint32_t NameOff = Strtab.size();
Strtab.append(M.Name);
Strtab.push_back('\0');
- Entries.push_back({&Sections[M.Id], M.Name, M.Flags, M.EntSize, NameOff, 0});
+ Entries.push_back(
+ {&Sections[M.Id], M.Name, M.Flags, M.EntSize, NameOff, 0});
}
// Add .strtab and .symtab name entries.
@@ -1131,7 +1131,7 @@ Error DWPWriter::writeELF(raw_pwrite_stream &OS) {
// --- Write ELF header ---
ELF::writeHeader(Wr, /*Is64Bit=*/true, ELFOSABI, /*ABIVersion=*/0, ELFMachine,
- /*EFlags=*/0, SHTOffset, NumSections, StrtabIdx);
+ /*EFlags=*/0, SHTOffset, NumSections, StrtabIdx);
// --- Write section data ---
for (const auto &E : Entries)
@@ -1154,16 +1154,17 @@ Error DWPWriter::writeELF(raw_pwrite_stream &OS) {
// [1..N] data sections
for (const auto &E : Entries)
ELF::writeSectionHeader(Wr, true, E.NameOffset, ELF::SHT_PROGBITS, E.Flags,
- 0, E.FileOffset, E.Data->totalSize(), 0, 0, 1,
- E.EntSize);
+ 0, E.FileOffset, E.Data->totalSize(), 0, 0, 1,
+ E.EntSize);
// [N+1] .strtab
ELF::writeSectionHeader(Wr, true, StrtabNameOff, ELF::SHT_STRTAB, 0, 0,
- StrtabOffset, Strtab.size(), 0, 0, 1, 0);
+ StrtabOffset, Strtab.size(), 0, 0, 1, 0);
// [N+2] .symtab
ELF::writeSectionHeader(Wr, true, SymtabNameOff, ELF::SHT_SYMTAB, 0, 0,
- SymtabOffset, SymEntSize, StrtabIdx, 1, 8, SymEntSize);
+ SymtabOffset, SymEntSize, StrtabIdx, 1, 8,
+ SymEntSize);
return Error::success();
}
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index d17a2f7e1..99fafcfce 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -19,6 +19,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/ELF.h"
+#include "llvm/BinaryFormat/ELFWriter.h"
#include "llvm/MC/MCAsmBackend.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCAssembler.h"
@@ -28,7 +29,6 @@
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCFixup.h"
#include "llvm/MC/MCObjectWriter.h"
-#include "llvm/BinaryFormat/ELFWriter.h"
#include "llvm/MC/MCSection.h"
#include "llvm/MC/MCSectionELF.h"
#include "llvm/MC/MCSymbol.h"
``````````
</details>
https://github.com/llvm/llvm-project/pull/192112
More information about the llvm-commits
mailing list