[PATCH] D140291: [llvm-objcopy] Use getNumberOfSymbols() instead of getRawNumberOfSymbols()
Daan De Meyer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 2 02:49:58 PST 2023
DaanDeMeyer updated this revision to Diff 485850.
DaanDeMeyer added a comment.
Added a few checks to the test and modified the python open() command to use a raw string to hopefully fix the test on Windows
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D140291/new/
https://reviews.llvm.org/D140291
Files:
llvm/lib/ObjCopy/COFF/COFFReader.cpp
llvm/test/tools/llvm-objcopy/COFF/Inputs/no-symbol-table.yaml
llvm/test/tools/llvm-objcopy/COFF/no-symbol-table.test
Index: llvm/test/tools/llvm-objcopy/COFF/no-symbol-table.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/COFF/no-symbol-table.test
@@ -0,0 +1,20 @@
+## Test that llvm-objcopy can read a COFF object with symbols but without a
+## symbol table.
+
+# RUN: yaml2obj %p/Inputs/no-symbol-table.yaml -o %t.obj
+
+## Check that we report a single symbol before overriding the symbol table pointer.
+# RUN: llvm-readobj --file-headers %t.obj | FileCheck %s --check-prefix=BEFORE
+# BEFORE: SymbolCount: 1
+
+## Override the symbol table pointer with zeros.
+# RUN: %python -c "with open(r'%t.obj', 'r+b') as input: input.seek(8); input.write(b'\x00' * 4)"
+# RUN: llvm-readobj --file-headers %t.obj | FileCheck %s --check-prefix=POINTER
+# POINTER: PointerToSymbolTable: 0x0
+
+## Make sure we can run llvm-objcopy on the resulting object.
+# RUN: llvm-objcopy %t.obj
+
+## Check that the number of symbols is now reported as zero.
+# RUN: llvm-readobj --file-headers %t.obj | FileCheck %s --check-prefix=COUNT
+# COUNT: SymbolCount: 0
\ No newline at end of file
Index: llvm/test/tools/llvm-objcopy/COFF/Inputs/no-symbol-table.yaml
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/COFF/Inputs/no-symbol-table.yaml
@@ -0,0 +1,17 @@
+--- !COFF
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: []
+# We define a symbol here and override the symbol table pointer in the test to
+# get an object with symbols but without a symbol table.
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+...
Index: llvm/lib/ObjCopy/COFF/COFFReader.cpp
===================================================================
--- llvm/lib/ObjCopy/COFF/COFFReader.cpp
+++ llvm/lib/ObjCopy/COFF/COFFReader.cpp
@@ -83,9 +83,9 @@
Error COFFReader::readSymbols(Object &Obj, bool IsBigObj) const {
std::vector<Symbol> Symbols;
- Symbols.reserve(COFFObj.getRawNumberOfSymbols());
+ Symbols.reserve(COFFObj.getNumberOfSymbols());
ArrayRef<Section> Sections = Obj.getSections();
- for (uint32_t I = 0, E = COFFObj.getRawNumberOfSymbols(); I < E;) {
+ for (uint32_t I = 0, E = COFFObj.getNumberOfSymbols(); I < E;) {
Expected<COFFSymbolRef> SymOrErr = COFFObj.getSymbol(I);
if (!SymOrErr)
return SymOrErr.takeError();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D140291.485850.patch
Type: text/x-patch
Size: 2596 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230102/74ec6382/attachment.bin>
More information about the llvm-commits
mailing list