[llvm] a4ad6a3 - [MCParser] Reject processor-specific section flags not known by the current target

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 14 16:06:18 PDT 2023


Author: Fangrui Song
Date: 2023-04-14T16:06:12-07:00
New Revision: a4ad6a3b2db0afcc4558d874397fb7ae7264d77f

URL: https://github.com/llvm/llvm-project/commit/a4ad6a3b2db0afcc4558d874397fb7ae7264d77f
DIFF: https://github.com/llvm/llvm-project/commit/a4ad6a3b2db0afcc4558d874397fb7ae7264d77f.diff

LOG: [MCParser] Reject processor-specific section flags not known by the current target

Catch accidentally used flags and match MCSectionELF.cpp
`MCSectionELF::printSwitchToSection`.

Reviewed By: aeubanks

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

Added: 
    llvm/test/MC/ELF/section-flags-unknown.s

Modified: 
    llvm/lib/MC/MCParser/ELFAsmParser.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCParser/ELFAsmParser.cpp b/llvm/lib/MC/MCParser/ELFAsmParser.cpp
index a5981d15013f6..bb4285289c0ba 100644
--- a/llvm/lib/MC/MCParser/ELFAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/ELFAsmParser.cpp
@@ -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
index 0000000000000..29fb8bdb878ff
--- /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", at progbits
+
+# CHECK: {{.*}}.s:[[# @LINE+1]]:34: error: unknown flag
+.section XCORE_SHF_CP_SECTION,"d", at progbits
+
+# CHECK: {{.*}}.s:[[# @LINE+1]]:27: error: unknown flag
+.section SHF_HEX_GPREL,"s", at progbits
+
+# CHECK: {{.*}}.s:[[# @LINE+1]]:30: error: unknown flag
+.section SHF_ARM_PURECODE,"y", at progbits


        


More information about the llvm-commits mailing list