[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

llvm-svn: 335405
This commit is contained in:
Fangrui Song 2018-06-23 00:15:33 +00:00
parent e737e75491
commit 4ef42a83f9
2 changed files with 4 additions and 3 deletions

View File

@ -709,8 +709,9 @@ bool ELFObjectFile<ELFT>::isSectionText(DataRefImpl Sec) const {
template <class ELFT>
bool ELFObjectFile<ELFT>::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 <class ELFT>

View File

@ -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