From 98ae3708b44f546ab42189bc6fc2efee48acf331 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 23 Jun 2018 00:15:33 +0000 Subject: [PATCH] [ELF] Change isSectionData to exclude SHF_EXECINSTR Summary: This affects what sections are displayed as "DATA" in llvm-objdump. The other user llvm-size is unaffected. Before, a "TEXT" section is also "DATA", which seems weird. The sh_flags condition matches that of bfd's SEC_DATA but the sh_type condition uses (== SHF_PROGBITS) instead of bfd's (!= SHT_NOBITS). bfd's SEC_DATA is not appealing as so many sections will be shown as DATA. Reviewers: jyknight, Bigcheese Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D48472 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@335405 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/ELFObjectFile.h | 5 +++-- test/Object/objdump-sectionheaders.test | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 82e4aa459a7..4e9e81a7b9e 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -709,8 +709,9 @@ bool ELFObjectFile::isSectionText(DataRefImpl Sec) const { template bool ELFObjectFile::isSectionData(DataRefImpl Sec) const { const Elf_Shdr *EShdr = getSection(Sec); - return EShdr->sh_flags & (ELF::SHF_ALLOC | ELF::SHF_WRITE) && - EShdr->sh_type == ELF::SHT_PROGBITS; + return EShdr->sh_type == ELF::SHT_PROGBITS && + EShdr->sh_flags & ELF::SHF_ALLOC && + !(EShdr->sh_flags & ELF::SHF_EXECINSTR); } template diff --git a/test/Object/objdump-sectionheaders.test b/test/Object/objdump-sectionheaders.test index bc2478cea2f..efdd6bb5fc9 100644 --- a/test/Object/objdump-sectionheaders.test +++ b/test/Object/objdump-sectionheaders.test @@ -7,7 +7,7 @@ ; CHECK: Sections: ; CHECK: Idx Name Size Address Type ; CHECK: 0 00000000 0000000000000000 -; CHECK: 1 .text 00000026 0000000000000000 TEXT DATA +; CHECK: 1 .text 00000026 0000000000000000 TEXT ; CHECK: 2 .rodata.str1.1 0000000d 0000000000000026 DATA ; CHECK: 3 .note.GNU-stack 00000000 0000000000000033 ; CHECK: 4 .rela.text 00000048 0000000000000038