[llvm] [objcopy][coff] Place section name first in strtab (PR #145266)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 22 22:17:20 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-binary-utilities
Author: Haohai Wen (HaohaiWen)
<details>
<summary>Changes</summary>
The prioritized string table builder was introduced in 9cc9efc. This
patch sets highest priority for the section name to place it at the
start of string table to avoid the issue described in 4d2eda2.
---
Full diff: https://github.com/llvm/llvm-project/pull/145266.diff
2 Files Affected:
- (modified) llvm/lib/ObjCopy/COFF/COFFWriter.cpp (+5-2)
- (added) llvm/test/tools/llvm-objcopy/COFF/string-table.test (+24)
``````````diff
diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index 734a1698d515b..350c4aec572c9 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -120,8 +120,11 @@ void COFFWriter::layoutSections() {
Expected<size_t> COFFWriter::finalizeStringTable() {
for (const auto &S : Obj.getSections())
- if (S.Name.size() > COFF::NameSize)
- StrTabBuilder.add(S.Name);
+ if (S.Name.size() > COFF::NameSize) {
+ // Put the section name at the start of strtab to ensure its offset is
+ // less than Max7DecimalOffset. Otherwise, lldb/gdb will not read it.
+ StrTabBuilder.add(S.Name, /*Priority=*/UINT8_MAX);
+ }
for (const auto &S : Obj.getSymbols())
if (S.Name.size() > COFF::NameSize)
diff --git a/llvm/test/tools/llvm-objcopy/COFF/string-table.test b/llvm/test/tools/llvm-objcopy/COFF/string-table.test
new file mode 100644
index 0000000000000..1e984cde59dc0
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/COFF/string-table.test
@@ -0,0 +1,24 @@
+# RUN: yaml2obj %s -o %t
+# RUN: touch %t.sec
+# RUN: llvm-objcopy --add-section=.debug_str=%t.sec %t %t1
+# RUN: llvm-readobj --string-table %t1 | FileCheck %s
+
+# CHECK: StringTable {
+# CHECK-NEXT: Length: 26
+# CHECK-NEXT: [ 4] .debug_str
+# CHECK-NEXT: [ f] symbol_zzz
+# CHECK-NEXT: }
+
+--- !COFF
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+symbols:
+ - Name: symbol_zzz
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
``````````
</details>
https://github.com/llvm/llvm-project/pull/145266
More information about the llvm-commits
mailing list