forked from OSchip/llvm-project
[MC][ELF] Fix accepting abbreviated form with Type change
Follow up to D92052 and D94072, exposed due to D107707 Many assemblers to permit that only the first .section contains all the attributes like '.lds_bss,"w",@nobits' and later section only use the name ('.lds_bss') inheriting those attributes from the first section. I turned out that the case that Type changed was missed when implementing it - and D107707 make it much more likely to hit that issue. That's fixed by this commit. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D114717
This commit is contained in:
parent
6e2aecd759
commit
c01c62c76c
|
@ -676,14 +676,14 @@ EndStmt:
|
|||
getContext().getELFSection(SectionName, Type, Flags, Size, GroupName,
|
||||
IsComdat, UniqueID, LinkedToSym);
|
||||
getStreamer().SwitchSection(Section, Subsection);
|
||||
if (Section->getType() != Type &&
|
||||
// Check that flags are used consistently. However, the GNU assembler permits
|
||||
// to leave out in subsequent uses of the same sections; for compatibility,
|
||||
// do likewise.
|
||||
if (!TypeName.empty() && Section->getType() != Type &&
|
||||
!allowSectionTypeMismatch(getContext().getTargetTriple(), SectionName,
|
||||
Type))
|
||||
Error(loc, "changed section type for " + SectionName + ", expected: 0x" +
|
||||
utohexstr(Section->getType()));
|
||||
// Check that flags are used consistently. However, the GNU assembler permits
|
||||
// to leave out in subsequent uses of the same sections; for compatibility,
|
||||
// do likewise.
|
||||
if ((extraFlags || Size || !TypeName.empty()) && Section->getFlags() != Flags)
|
||||
Error(loc, "changed section flags for " + SectionName + ", expected: 0x" +
|
||||
utohexstr(Section->getFlags()));
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
# CHECK: .section .foo,"aM",@progbits,1
|
||||
# CHECK: .section .rodata.cst8,"aM",@progbits,8
|
||||
# CHECK: .section .lds_bss,"w",@nobits
|
||||
|
||||
.section .foo,"aM",@progbits,1
|
||||
|
||||
|
@ -15,3 +16,7 @@
|
|||
.section .rodata.cst8,"aM",@progbits,8
|
||||
|
||||
.section .rodata.cst8
|
||||
|
||||
# Likewise for Type changes
|
||||
.section .lds_bss,"w",@nobits
|
||||
.section .lds_bss
|
||||
|
|
Loading…
Reference in New Issue