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 @@ -339,6 +339,11 @@ case 'G': flags |= ELF::SHF_GROUP; break; + case 'l': + if (TT.getArch() != Triple::x86_64) + return -1U; + flags |= ELF::SHF_X86_64_LARGE; + break; case 'R': if (TT.isOSSolaris()) flags |= ELF::SHF_SUNW_NODISCARD; diff --git a/llvm/test/MC/ELF/section-flags-unknown.s b/llvm/test/MC/ELF/section-flags-unknown.s --- a/llvm/test/MC/ELF/section-flags-unknown.s +++ b/llvm/test/MC/ELF/section-flags-unknown.s @@ -1,5 +1,6 @@ ## 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: +# REQUIRES: riscv-registered-target +# RUN: not llvm-mc -triple=riscv32 %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 @@ -12,3 +13,6 @@ # CHECK: {{.*}}.s:[[# @LINE+1]]:30: error: unknown flag .section SHF_ARM_PURECODE,"y",@progbits + +# CHECK: {{.*}}.s:[[# @LINE+1]]:30: error: unknown flag +.section SHF_X86_64_LARGE,"l",@progbits diff --git a/llvm/test/MC/ELF/section.s b/llvm/test/MC/ELF/section.s --- a/llvm/test/MC/ELF/section.s +++ b/llvm/test/MC/ELF/section.s @@ -268,6 +268,14 @@ // CHECK-NEXT: SHF_WRITE // CHECK-NEXT: ] +.section .large,"l" +// CHECK: Section { +// CHECK: Name: .large +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_X86_64_LARGE +// CHECK-NEXT: ] + // Test SHT_LLVM_ODRTAB .section .odrtab,"e",@llvm_odrtab