[llvm] [BOLT][DWARF] Slice .debug_str from the DWP for each CU (PR #159540)

Alexander Yermolovich via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 2 16:57:48 PST 2025


================
@@ -1723,7 +1723,66 @@ StringRef getSectionName(const SectionRef &Section) {
   return Name;
 }
 
-// Extracts an appropriate slice if input is DWP.
+// Exctracts some appropriate slices of .debug_str.dwo from DWP.
+// Updates the .debug_str_offets.dwo for CUs.
+void UpdateStrAndStrOffsets(StringRef StrDWOContent,
+                            StringRef StrOffsetsContent,
+                            SmallVectorImpl<StringRef> &StrDWOOutData,
+                            std::string &StrOffsetsOutData,
+                            unsigned DwarfVersion, bool IsLittleEndian) {
+  const llvm::endianness Endian =
+      IsLittleEndian ? llvm::endianness::little : llvm::endianness::big;
+  // ignore DWARF64
+  const uint64_t HeaderOffset = (DwarfVersion >= 5) ? 8 : 0;
+  const uint64_t NumOffsets = (StrOffsetsContent.size() - HeaderOffset) / 4;
----------------
ayermolo wrote:

Maybe something like
constexpr sizeOfOffset = sizeof(int32_t);
const uint64_t NumOffsets = (StrOffsetsContent.size() - HeaderOffset) / sizeOfOffset;

...

llvm::support::endian::write32(&StrOffsetsOutData[HeaderOffset + I * sizeOfOffset],
                                     static_cast<uint32_t>(AccumulatedStrLen),
                                     Endian);

https://github.com/llvm/llvm-project/pull/159540


More information about the llvm-commits mailing list