[PATCH] D82877: [llvm-readobj] - Don't crash when checking the number of dynamic symbols.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 1 02:40:02 PDT 2020
This revision was automatically updated to reflect the committed changes.
grimar marked 2 inline comments as done.
Closed by commit rG61f967dccaba: [llvm-readobj] - Don't crash when checking the number of dynamic symbols. (authored by grimar).
Changed prior to commit:
https://reviews.llvm.org/D82877?vs=274467&id=274729#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82877/new/
https://reviews.llvm.org/D82877
Files:
llvm/test/tools/llvm-readobj/ELF/dyn-symbols-size-from-hash-table.test
llvm/tools/llvm-readobj/ELFDumper.cpp
Index: llvm/tools/llvm-readobj/ELFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/ELFDumper.cpp
+++ llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -2215,13 +2215,17 @@
// equal nchain". Check to see if the DT_HASH hash table nchain value
// conflicts with the number of symbols in the dynamic symbol table
// according to the section header.
- if (HashTable &&
- HashTable->nchain != DynSymRegion->Size / DynSymRegion->EntSize)
- reportUniqueWarning(createError(
- "hash table nchain (" + Twine(HashTable->nchain) +
- ") differs from symbol count derived from SHT_DYNSYM section "
- "header (" +
- Twine(DynSymRegion->Size / DynSymRegion->EntSize) + ")"));
+ if (HashTable) {
+ if (DynSymRegion->EntSize == 0)
+ reportUniqueWarning(
+ createError("SHT_DYNSYM section has sh_entsize == 0"));
+ else if (HashTable->nchain != DynSymRegion->Size / DynSymRegion->EntSize)
+ reportUniqueWarning(createError(
+ "hash table nchain (" + Twine(HashTable->nchain) +
+ ") differs from symbol count derived from SHT_DYNSYM section "
+ "header (" +
+ Twine(DynSymRegion->Size / DynSymRegion->EntSize) + ")"));
+ }
}
// Delay the creation of the actual dynamic symbol table until now, so that
Index: llvm/test/tools/llvm-readobj/ELF/dyn-symbols-size-from-hash-table.test
===================================================================
--- llvm/test/tools/llvm-readobj/ELF/dyn-symbols-size-from-hash-table.test
+++ llvm/test/tools/llvm-readobj/ELF/dyn-symbols-size-from-hash-table.test
@@ -158,6 +158,20 @@
# RUN: FileCheck %s --check-prefixes=GNU2,GNU2-MORE,GNU2-ALL,WARN \
# RUN: --implicit-check-not=warning: -DNCHAIN=4
+# WARN: warning: '{{.*}}2-{{.*}}': hash table nchain ([[NCHAIN]]) differs from symbol count derived from SHT_DYNSYM section header (3)
+
+## Show we report a warning when the sh_entsize of the SHT_DYNSYM section is zero and therefore we are unable
+## to derive the number of dynamic symbols from SHT_DYNSYM section header.
+# RUN: yaml2obj --docnum=2 %s -o %t2-zero-entsize -DCHAIN="[1, 2, 3, 4]" -DENTSIZE=0
+# RUN: llvm-readobj --dyn-symbols %t2-zero-entsize 2>&1 | \
+# RUN: FileCheck %s -DFILE=%t2-zero-entsize --check-prefixes=LLVM2,LLVM2-MORE,LLVM2-ALL,WARN-ENTSIZE \
+# RUN: --implicit-check-not=warning:
+# RUN: llvm-readelf --dyn-symbols %t2-zero-entsize 2>&1 | \
+# RUN: FileCheck %s -DFILE=%t2-zero-entsize --check-prefixes=GNU2,GNU2-MORE,GNU2-ALL,WARN-ENTSIZE \
+# RUN: --implicit-check-not=warning: -DNCHAIN=4
+
+## WARN-ENTSIZE: warning: '[[FILE]]': SHT_DYNSYM section has sh_entsize == 0
+
## Show there's no warning if the sizes match
# RUN: yaml2obj --docnum=2 %s -o %t2-same -DCHAIN="[1, 2, 3]"
# RUN: llvm-readobj --dyn-symbols %t2-same 2>&1 | \
@@ -166,8 +180,6 @@
# RUN: FileCheck %s --check-prefixes=GNU2,GNU2-MORE \
# RUN: --implicit-check-not=warning: -DNCHAIN=3
-# WARN: warning: '{{.*}}2-{{.*}}': hash table nchain ([[NCHAIN]]) differs from symbol count derived from SHT_DYNSYM section header (3)
-
# LLVM2: DynamicSymbols [
# LLVM2-NEXT: Symbol {
# LLVM2-NEXT: Name: (0)
@@ -236,6 +248,8 @@
ShSize: 0x48
Address: 0x400
AddressAlign: 0x400
+## 0x18 is the standard entsize value.
+ EntSize: [[ENTSIZE=0x18]]
- Name: .hash
Type: SHT_HASH
Flags: [ SHF_ALLOC ]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82877.274729.patch
Type: text/x-patch
Size: 3588 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200701/180fafaf/attachment-0001.bin>
More information about the llvm-commits
mailing list