diff --git a/llvm/lib/MC/MCParser/ELFAsmParser.cpp b/llvm/lib/MC/MCParser/ELFAsmParser.cpp --- a/llvm/lib/MC/MCParser/ELFAsmParser.cpp +++ b/llvm/lib/MC/MCParser/ELFAsmParser.cpp @@ -317,15 +317,23 @@ flags |= ELF::SHF_TLS; break; case 'c': + if (TT.getArch() != Triple::xcore) + return -1U; flags |= ELF::XCORE_SHF_CP_SECTION; break; case 'd': + if (TT.getArch() != Triple::xcore) + return -1U; flags |= ELF::XCORE_SHF_DP_SECTION; break; case 'y': + if (!(TT.isARM() || TT.isThumb())) + return -1U; flags |= ELF::SHF_ARM_PURECODE; break; case 's': + if (TT.getArch() != Triple::hexagon) + return -1U; flags |= ELF::SHF_HEX_GPREL; break; case 'G': diff --git a/llvm/test/MC/ELF/section-flags-unknown.s b/llvm/test/MC/ELF/section-flags-unknown.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/ELF/section-flags-unknown.s @@ -0,0 +1,14 @@ +## Some section flags are processor-specific. Reject them for other targets. +# RUN: not llvm-mc -triple=x86_64 %s -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error: + +# CHECK: {{.*}}.s:[[# @LINE+1]]:34: error: unknown flag +.section XCORE_SHF_CP_SECTION,"c",@progbits + +# CHECK: {{.*}}.s:[[# @LINE+1]]:34: error: unknown flag +.section XCORE_SHF_CP_SECTION,"d",@progbits + +# CHECK: {{.*}}.s:[[# @LINE+1]]:27: error: unknown flag +.section SHF_HEX_GPREL,"s",@progbits + +# CHECK: {{.*}}.s:[[# @LINE+1]]:30: error: unknown flag +.section SHF_ARM_PURECODE,"y",@progbits