mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[mips] Implement the ".rdata" MIPS assembly directive.
Rather than creating a separate ".rdata" section distinct from the customary ".rodata" in ELF, ".rdata" switches to the ".rodata" section. This patch relands r305949 and r305950 with the correct commit message and addresses nit raised during review. Patch By: John Baldwin! Differential Revision: https://reviews.llvm.org/D34452 llvm-svn: 305995
This commit is contained in:
parent
31fedbb3b8
commit
9efb4e04c7
@ -322,6 +322,7 @@ class MipsAsmParser : public MCTargetAsmParser {
|
||||
bool parseDirectiveSet();
|
||||
bool parseDirectiveOption();
|
||||
bool parseInsnDirective();
|
||||
bool parseRSectionDirective(StringRef Section);
|
||||
bool parseSSectionDirective(StringRef Section, unsigned Type);
|
||||
|
||||
bool parseSetAtDirective();
|
||||
@ -6952,6 +6953,23 @@ bool MipsAsmParser::parseInsnDirective() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// parseRSectionDirective
|
||||
/// ::= .rdata
|
||||
bool MipsAsmParser::parseRSectionDirective(StringRef Section) {
|
||||
// If this is not the end of the statement, report an error.
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement)) {
|
||||
reportParseError("unexpected token, expected end of statement");
|
||||
return false;
|
||||
}
|
||||
|
||||
MCSection *ELFSection = getContext().getELFSection(
|
||||
Section, ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
|
||||
getParser().getStreamer().SwitchSection(ELFSection);
|
||||
|
||||
getParser().Lex(); // Eat EndOfStatement token.
|
||||
return false;
|
||||
}
|
||||
|
||||
/// parseSSectionDirective
|
||||
/// ::= .sbss
|
||||
/// ::= .sdata
|
||||
@ -7499,6 +7517,10 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) {
|
||||
parseInsnDirective();
|
||||
return false;
|
||||
}
|
||||
if (IDVal == ".rdata") {
|
||||
parseRSectionDirective(".rodata");
|
||||
return false;
|
||||
}
|
||||
if (IDVal == ".sbss") {
|
||||
parseSSectionDirective(IDVal, ELF::SHT_NOBITS);
|
||||
return false;
|
||||
|
13
test/MC/Mips/mips-rdata.s
Normal file
13
test/MC/Mips/mips-rdata.s
Normal file
@ -0,0 +1,13 @@
|
||||
# Check that .rdata sections have proper name, flags, and section types.
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o - \
|
||||
# RUN: | llvm-readobj -s | FileCheck %s
|
||||
|
||||
.rdata
|
||||
.word 0
|
||||
|
||||
# CHECK: Name: .rodata
|
||||
# CHECK-NEXT: Type: SHT_PROGBITS
|
||||
# CHECK-NEXT: Flags [ (0x2)
|
||||
# CHECK-NEXT: SHF_ALLOC
|
||||
# CHECK-NEXT: ]
|
Loading…
x
Reference in New Issue
Block a user