[MCParser] Reject processor-specific section flags not known by the current target
authorFangrui Song <i@maskray.me>
Fri, 14 Apr 2023 23:06:12 +0000 (16:06 -0700)
committerFangrui Song <i@maskray.me>
Fri, 14 Apr 2023 23:06:12 +0000 (16:06 -0700)
Catch accidentally used flags and match MCSectionELF.cpp
`MCSectionELF::printSwitchToSection`.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D148386

llvm/lib/MC/MCParser/ELFAsmParser.cpp
llvm/test/MC/ELF/section-flags-unknown.s [new file with mode: 0644]

index a5981d1..bb42852 100644 (file)
@@ -317,15 +317,23 @@ static unsigned parseSectionFlags(const Triple &TT, StringRef flagsStr,
       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 (file)
index 0000000..29fb8bd
--- /dev/null
@@ -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