Index: include/llvm/Object/ELFObjectFile.h =================================================================== --- include/llvm/Object/ELFObjectFile.h +++ include/llvm/Object/ELFObjectFile.h @@ -709,15 +709,16 @@ 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 bool ELFObjectFile::isSectionBSS(DataRefImpl Sec) const { const Elf_Shdr *EShdr = getSection(Sec); - return EShdr->sh_flags & (ELF::SHF_ALLOC | ELF::SHF_WRITE) && - EShdr->sh_type == ELF::SHT_NOBITS; + return EShdr->sh_type == ELF::SHT_NOBITS && + EShdr->sh_flags & ELF::SHF_ALLOC; } template Index: test/Object/objdump-sectionheaders.test =================================================================== --- test/Object/objdump-sectionheaders.test +++ 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