From 791ddaf763824f5693119ee5fd52f6631e4bfa14 Mon Sep 17 00:00:00 2001 From: georgerim Date: Fri, 25 Oct 2019 11:55:11 +0300 Subject: [PATCH] [llvm/Object] - Fix the error message reported for a broken SHT_SYMTAB_SHNDX section. SHT_SYMTAB_SHNDX should have the same number of entries as the symbol table associated (https://www.sco.com/developers/gabi/latest/ch4.sheader.html) We currently can report the following message: "SHT_SYMTAB_SHNDX section has sh_size (24) which is not equal to the number of symbols (2)" It is just broken. This patch refines/fixes it. Differential revision: https://reviews.llvm.org/D69305 --- include/llvm/Object/ELF.h | 11 ++++++----- test/Object/invalid.test | 2 +- test/tools/obj2yaml/elf-sht-symtab-shndx.yaml | 3 +-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/llvm/Object/ELF.h b/include/llvm/Object/ELF.h index 28b00c8413d..5a13097a927 100644 --- a/include/llvm/Object/ELF.h +++ b/include/llvm/Object/ELF.h @@ -641,11 +641,12 @@ ELFFile::getSHNDXTable(const Elf_Shdr &Section, SymTable.sh_type) + " section (expected SHT_SYMTAB/SHT_DYNSYM)"); - if (V.size() != (SymTable.sh_size / sizeof(Elf_Sym))) - return createError("SHT_SYMTAB_SHNDX section has sh_size (" + - Twine(SymTable.sh_size) + - ") which is not equal to the number of symbols (" + - Twine(V.size()) + ")"); + uint64_t Syms = SymTable.sh_size / sizeof(Elf_Sym); + if (V.size() != Syms) + return createError("SHT_SYMTAB_SHNDX has " + Twine(V.size()) + + " entries, but the symbol table associated has " + + Twine(Syms)); + return V; } diff --git a/test/Object/invalid.test b/test/Object/invalid.test index 56372bf37c2..396776c5f91 100644 --- a/test/Object/invalid.test +++ b/test/Object/invalid.test @@ -213,7 +213,7 @@ Sections: # RUN: yaml2obj %s --docnum=11 -o %t11 # RUN: not llvm-readobj --symbols %t11 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s -# INVALID-XINDEX-SIZE: error: {{.*}}: SHT_SYMTAB_SHNDX section has sh_size (24) which is not equal to the number of symbols (2) +# INVALID-XINDEX-SIZE: error: {{.*}}: SHT_SYMTAB_SHNDX has 2 entries, but the symbol table associated has 1 --- !ELF FileHeader: diff --git a/test/tools/obj2yaml/elf-sht-symtab-shndx.yaml b/test/tools/obj2yaml/elf-sht-symtab-shndx.yaml index 735ad6ed4ab..e0078b9f6be 100644 --- a/test/tools/obj2yaml/elf-sht-symtab-shndx.yaml +++ b/test/tools/obj2yaml/elf-sht-symtab-shndx.yaml @@ -98,8 +98,7 @@ Symbols: # RUN: yaml2obj --docnum=4 %s -o %t4 # RUN: not obj2yaml %t4 2>&1 | FileCheck %s -DFILE=%t4 --check-prefix=CASE4 -## FIXME: The error message below needs rewording. Size should not be equal to the number of symbols. -## CASE4: Error reading file: [[FILE]]: SHT_SYMTAB_SHNDX section has sh_size (48) which is not equal to the number of symbols (3) +## CASE4: Error reading file: [[FILE]]: SHT_SYMTAB_SHNDX has 3 entries, but the symbol table associated has 2 --- !ELF FileHeader: