summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/MC/MCParser/ELFAsmParser.cpp3
-rw-r--r--llvm/lib/MC/MCSectionELF.cpp3
-rw-r--r--llvm/test/MC/Hexagon/gprel-shflag.s10
3 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCParser/ELFAsmParser.cpp b/llvm/lib/MC/MCParser/ELFAsmParser.cpp
index 3d9590e1f9f..d568f7a71ee 100644
--- a/llvm/lib/MC/MCParser/ELFAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/ELFAsmParser.cpp
@@ -321,6 +321,9 @@ static unsigned parseSectionFlags(StringRef flagsStr, bool *UseLastGroup) {
case 'y':
flags |= ELF::SHF_ARM_PURECODE;
break;
+ case 's':
+ flags |= ELF::SHF_HEX_GPREL;
+ break;
case 'G':
flags |= ELF::SHF_GROUP;
break;
diff --git a/llvm/lib/MC/MCSectionELF.cpp b/llvm/lib/MC/MCSectionELF.cpp
index 4d77d05cc50..7ee1694ebbf 100644
--- a/llvm/lib/MC/MCSectionELF.cpp
+++ b/llvm/lib/MC/MCSectionELF.cpp
@@ -116,6 +116,9 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
} else if (T.isARM() || T.isThumb()) {
if (Flags & ELF::SHF_ARM_PURECODE)
OS << 'y';
+ } else if (Arch == Triple::hexagon) {
+ if (Flags & ELF::SHF_HEX_GPREL)
+ OS << 's';
}
OS << '"';
diff --git a/llvm/test/MC/Hexagon/gprel-shflag.s b/llvm/test/MC/Hexagon/gprel-shflag.s
new file mode 100644
index 00000000000..6a8a9a027b6
--- /dev/null
+++ b/llvm/test/MC/Hexagon/gprel-shflag.s
@@ -0,0 +1,10 @@
+# RUN: llvm-mc -arch=hexagon -filetype=asm %s | FileCheck %s
+
+# Make sure the assembler can parse and print the "s" flag for Hexaon's
+# small-data section.
+# CHECK: .section .sdata,"aws",@progbits
+
+ .section ".sdata", "aws", @progbits
+var:
+ .word 0
+
OpenPOWER on IntegriCloud