[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