summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/Mips/AsmParser/MipsAsmParser.cpp59
-rw-r--r--lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp14
-rw-r--r--lib/Target/Mips/MipsAsmPrinter.cpp26
-rw-r--r--lib/Target/Mips/MipsAsmPrinter.h6
-rw-r--r--lib/Target/Mips/MipsTargetStreamer.h6
-rw-r--r--test/CodeGen/Mips/elf_eflags.ll121
-rw-r--r--test/MC/Mips/elf_eflags.ll69
-rw-r--r--test/MC/Mips/elf_eflags.s20
-rw-r--r--test/MC/Mips/elf_st_other.ll (renamed from test/CodeGen/Mips/elf_st_other.ll)5
9 files changed, 120 insertions, 206 deletions
diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index 35ad7680be6..aae2dcd16e7 100644
--- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -21,9 +21,6 @@
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/MC/MCTargetAsmParser.h"
-#include "llvm/Support/ELF.h"
-#include "llvm/Support/TargetRegistry.h"
-#include "llvm/ADT/APInt.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/TargetRegistry.h"
@@ -197,6 +194,7 @@ class MipsAsmParser : public MCTargetAsmParser {
bool isEvaluated(const MCExpr *Expr);
bool parseDirectiveSet();
+ bool parseDirectiveMipsHackELFFlags();
bool parseDirectiveOption();
bool parseSetAtDirective();
@@ -259,9 +257,6 @@ class MipsAsmParser : public MCTargetAsmParser {
// Example: INSERT.B $w0[n], $1 => 16 > n >= 0
bool validateMSAIndex(int Val, int RegKind);
- // Set ELF flags based on defaults and commandline arguments.
- void processInitialEFlags();
-
public:
MipsAsmParser(MCSubtargetInfo &sti, MCAsmParser &parser,
const MCInstrInfo &MII)
@@ -269,7 +264,6 @@ public:
hasConsumedDollar(false) {
// Initialize the set of available features.
setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
- processInitialEFlags();
}
MCAsmParser &getParser() const { return Parser; }
@@ -2435,6 +2429,17 @@ bool MipsAsmParser::parseDirectiveSet() {
return true;
}
+bool MipsAsmParser::parseDirectiveMipsHackELFFlags() {
+ int64_t Flags = 0;
+ if (Parser.parseAbsoluteExpression(Flags)) {
+ TokError("unexpected token");
+ return false;
+ }
+
+ getTargetStreamer().emitMipsHackELFFlags(Flags);
+ return false;
+}
+
/// parseDirectiveWord
/// ::= .word [ expression (, expression)* ]
bool MipsAsmParser::parseDirectiveWord(unsigned Size, SMLoc L) {
@@ -2553,6 +2558,9 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) {
return false;
}
+ if (IDVal == ".mips_hack_elf_flags")
+ return parseDirectiveMipsHackELFFlags();
+
if (IDVal == ".option")
return parseDirectiveOption();
@@ -2569,43 +2577,6 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) {
return true;
}
-void MipsAsmParser::processInitialEFlags() {
- // Start will a clean slate.
- unsigned EFlags = 0;
- unsigned FeatureBits = STI.getFeatureBits();
-
- // Default settings
- EFlags |= ELF::EF_MIPS_NOREORDER | ELF::EF_MIPS_PIC | ELF::EF_MIPS_ABI_O32;
-
- // ISA
- if (FeatureBits & Mips::FeatureMips64r2) {
- EFlags |= ELF::EF_MIPS_ARCH_64R2;
- EFlags &= ~ELF::EF_MIPS_ABI_O32;
- } else if (FeatureBits & Mips::FeatureMips64) {
- EFlags |= ELF::EF_MIPS_ARCH_64;
- EFlags &= ~ELF::EF_MIPS_ABI_O32;
- } else if (FeatureBits & Mips::FeatureMips32r2)
- EFlags |= ELF::EF_MIPS_ARCH_32R2;
- else if (FeatureBits & Mips::FeatureMips32)
- EFlags |= ELF::EF_MIPS_ARCH_32;
- else if (FeatureBits & Mips::FeatureO32)
- EFlags |= ELF::EF_MIPS_ABI_O32; // This is really a zero
-
- // ASE
- if (FeatureBits & Mips::FeatureMicroMips)
- EFlags |= ELF::EF_MIPS_MICROMIPS;
- else if (FeatureBits & Mips::FeatureMips16)
- EFlags |= ELF::EF_MIPS_ARCH_ASE_M16;
-
- // ABI
- // TODO: n32/eabi
-
- // Linkage model
- // TODO: pic/cpic/static
-
- getTargetStreamer().emitMipsELFFlags(EFlags);
-}
-
extern "C" void LLVMInitializeMipsAsmParser() {
RegisterMCAsmParser<MipsAsmParser> X(TheMipsTarget);
RegisterMCAsmParser<MipsAsmParser> Y(TheMipselTarget);
diff --git a/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp b/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
index d026471d0fd..6b57dff2c83 100644
--- a/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
+++ b/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
@@ -21,13 +21,23 @@
using namespace llvm;
+static cl::opt<bool> PrintHackDirectives("print-hack-directives",
+ cl::init(false), cl::Hidden);
+
// Pin vtable to this file.
void MipsTargetStreamer::anchor() {}
MipsTargetAsmStreamer::MipsTargetAsmStreamer(formatted_raw_ostream &OS)
: OS(OS) {}
-void MipsTargetAsmStreamer::emitMipsELFFlags(unsigned Flags) { return; }
+void MipsTargetAsmStreamer::emitMipsHackELFFlags(unsigned Flags) {
+ if (!PrintHackDirectives)
+ return;
+
+ OS << "\t.mips_hack_elf_flags 0x";
+ OS.write_hex(Flags);
+ OS << '\n';
+}
void MipsTargetAsmStreamer::emitDirectiveSetMicroMips() {
OS << "\t.set\tmicromips\n";
@@ -75,7 +85,7 @@ MCELFStreamer &MipsTargetELFStreamer::getStreamer() {
return static_cast<MCELFStreamer &>(*Streamer);
}
-void MipsTargetELFStreamer::emitMipsELFFlags(unsigned Flags) {
+void MipsTargetELFStreamer::emitMipsHackELFFlags(unsigned Flags) {
MCAssembler &MCA = getStreamer().getAssembler();
MCA.setELFHeaderEFlags(Flags);
}
diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp
index 24c3b61b010..2f49e74ab82 100644
--- a/lib/Target/Mips/MipsAsmPrinter.cpp
+++ b/lib/Target/Mips/MipsAsmPrinter.cpp
@@ -108,6 +108,7 @@ void MipsAsmPrinter::EmitInstruction(const MachineInstr *MI) {
return;
}
+
MachineBasicBlock::const_instr_iterator I = MI;
MachineBasicBlock::const_instr_iterator E = MI->getParent()->instr_end();
@@ -633,12 +634,8 @@ void MipsAsmPrinter::EmitStartOfAsmFile(Module &M) {
}
-void MipsAsmPrinter::processInitialEFlags() {
- // Not having this check would work too, but would have us chew through
- // code that it doesn't use for RawText.
- if (OutStreamer.hasRawTextSupport())
- return;
-
+static void emitELFHeaderFlagsCG(MipsTargetStreamer &TargetStreamer,
+ const MipsSubtarget &Subtarget) {
// Update e_header flags
unsigned EFlags = 0;
@@ -646,30 +643,30 @@ void MipsAsmPrinter::processInitialEFlags() {
// Currently we assume that -mabicalls is the default.
EFlags |= ELF::EF_MIPS_CPIC;
- if (Subtarget->inMips16Mode())
+ if (Subtarget.inMips16Mode())
EFlags |= ELF::EF_MIPS_ARCH_ASE_M16;
else
EFlags |= ELF::EF_MIPS_NOREORDER;
// Architecture
- if (Subtarget->hasMips64r2())
+ if (Subtarget.hasMips64r2())
EFlags |= ELF::EF_MIPS_ARCH_64R2;
- else if (Subtarget->hasMips64())
+ else if (Subtarget.hasMips64())
EFlags |= ELF::EF_MIPS_ARCH_64;
- else if (Subtarget->hasMips32r2())
+ else if (Subtarget.hasMips32r2())
EFlags |= ELF::EF_MIPS_ARCH_32R2;
else
EFlags |= ELF::EF_MIPS_ARCH_32;
- if (Subtarget->inMicroMipsMode())
+ if (Subtarget.inMicroMipsMode())
EFlags |= ELF::EF_MIPS_MICROMIPS;
// ABI
- if (Subtarget->isABI_O32())
+ if (Subtarget.isABI_O32())
EFlags |= ELF::EF_MIPS_ABI_O32;
// Relocation Model
- Reloc::Model RM = Subtarget->getRelocationModel();
+ Reloc::Model RM = Subtarget.getRelocationModel();
if (RM == Reloc::PIC_ || RM == Reloc::Default)
EFlags |= ELF::EF_MIPS_PIC;
else if (RM == Reloc::Static)
@@ -677,13 +674,14 @@ void MipsAsmPrinter::processInitialEFlags() {
else
llvm_unreachable("Unsupported relocation model for e_flags");
- getTargetStreamer().emitMipsELFFlags(EFlags);
+ TargetStreamer.emitMipsHackELFFlags(EFlags);
}
void MipsAsmPrinter::EmitEndOfAsmFile(Module &M) {
// Emit Mips ELF register info
Subtarget->getMReginfo().emitMipsReginfoSectionCG(
OutStreamer, getObjFileLowering(), *Subtarget);
+ emitELFHeaderFlagsCG(getTargetStreamer(), *Subtarget);
}
void MipsAsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
diff --git a/lib/Target/Mips/MipsAsmPrinter.h b/lib/Target/Mips/MipsAsmPrinter.h
index 9f07914396f..b3060ad9306 100644
--- a/lib/Target/Mips/MipsAsmPrinter.h
+++ b/lib/Target/Mips/MipsAsmPrinter.h
@@ -50,10 +50,6 @@ private:
/// pool entries so we can properly mark them as data regions.
bool InConstantPool;
- // If object output, set initial eflags.
- // This includes both default and commandline flags that affect the output
- // ELF header flags.
- void processInitialEFlags();
public:
@@ -65,7 +61,6 @@ public:
: AsmPrinter(TM, Streamer), MCP(0), InConstantPool(false),
MCInstLowering(*this) {
Subtarget = &TM.getSubtarget<MipsSubtarget>();
- processInitialEFlags();
}
virtual const char *getPassName() const {
@@ -108,7 +103,6 @@ public:
void EmitStartOfAsmFile(Module &M);
void EmitEndOfAsmFile(Module &M);
void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
-
};
}
diff --git a/lib/Target/Mips/MipsTargetStreamer.h b/lib/Target/Mips/MipsTargetStreamer.h
index 16591686fd8..d6d0bf1a8e3 100644
--- a/lib/Target/Mips/MipsTargetStreamer.h
+++ b/lib/Target/Mips/MipsTargetStreamer.h
@@ -18,7 +18,7 @@ class MipsTargetStreamer : public MCTargetStreamer {
virtual void anchor();
public:
- virtual void emitMipsELFFlags(unsigned Flags) = 0;
+ virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
virtual void emitDirectiveSetMicroMips() = 0;
virtual void emitDirectiveSetNoMicroMips() = 0;
virtual void emitDirectiveSetMips16() = 0;
@@ -34,7 +34,7 @@ class MipsTargetAsmStreamer : public MipsTargetStreamer {
public:
MipsTargetAsmStreamer(formatted_raw_ostream &OS);
- virtual void emitMipsELFFlags(unsigned Flags);
+ virtual void emitMipsHackELFFlags(unsigned Flags);
virtual void emitDirectiveSetMicroMips();
virtual void emitDirectiveSetNoMicroMips();
virtual void emitDirectiveSetMips16();
@@ -56,7 +56,7 @@ public:
virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
// FIXME: emitMipsHackELFFlags() will be removed from this class.
- virtual void emitMipsELFFlags(unsigned Flags);
+ virtual void emitMipsHackELFFlags(unsigned Flags);
virtual void emitDirectiveSetMicroMips();
virtual void emitDirectiveSetNoMicroMips();
virtual void emitDirectiveSetMips16();
diff --git a/test/CodeGen/Mips/elf_eflags.ll b/test/CodeGen/Mips/elf_eflags.ll
deleted file mode 100644
index c7cb590a31f..00000000000
--- a/test/CodeGen/Mips/elf_eflags.ll
+++ /dev/null
@@ -1,121 +0,0 @@
-; This tests for directives that will result in
-; ELF EFLAGS setting with direct object.
-
-; Non-shared (static) is the absence of pic and or cpic.
-
-; EF_MIPS_NOREORDER (0x00000001) is always on by default currently
-; EF_MIPS_PIC (0x00000002)
-; EF_MIPS_CPIC (0x00000004) - See note below
-; EF_MIPS_ABI2 (0x00000020) - n32 not tested yet
-; EF_MIPS_ARCH_32 (0x50000000)
-; EF_MIPS_ARCH_64 (0x60000000)
-; EF_MIPS_ARCH_32R2 (0x70000000)
-; EF_MIPS_ARCH_64R2 (0x80000000)
-
-; Note that EF_MIPS_CPIC is set by -mabicalls which is the default on Linux
-; TODO need to support -mno-abicalls
-
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32 \
-; RUN: -relocation-model=static %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32 %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32 %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32_PIC %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 \
-; RUN: -relocation-model=static %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32R2 %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32R2_PIC %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 \
-; RUN: -mattr=+micromips -relocation-model=static %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32R2-MICROMIPS %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 \
-; RUN: -mattr=+micromips %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE32R2-MICROMIPS_PIC %s
-
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64 \
-; RUN: -relocation-model=static %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE64 %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64 %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE64_PIC %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64r2 \
-; RUN: -relocation-model=static %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE64R2 %s
-;
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64r2 %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-BE64R2_PIC %s
-
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 \
-; RUN: -mattr=+mips16 -relocation-model=pic %s -o - | \
-; RUN: FileCheck -check-prefix=CHECK-LE32R2-MIPS16 %s
-
-; 32(R1) bit with NO_REORDER and static
-; CHECK-BE32: .abicalls
-; CHECK-BE32: .option pic0
-; CHECK-BE32: .set noreorder
-; TODO: Need .set mips32
-;
-; 32(R1) bit with NO_REORDER and PIC
-; CHECK-BE32_PIC: .abicalls
-; CHECK-BE32_PIC: .set noreorder
-; TODO: Need .set mips32 and check absence of .option pic0
-;
-; 32R2 bit with NO_REORDER and static
-; CHECK-BE32R2: .abicalls
-; CHECK-BE32R2: .option pic0
-; CHECK-BE32R2: .set noreorder
-; TODO: Need .set mips32r2
-;
-; 32R2 bit with NO_REORDER and PIC
-; CHECK-BE32R2_PIC:.abicalls
-; CHECK-BE32R2_PIC:.set noreorder
-; TODO: Need .set mips32r2 and check absence of .option pic0
-;
-; 32R2 bit MICROMIPS with NO_REORDER and static
-; CHECK-BE32R2-MICROMIPS: .abicalls
-; CHECK-BE32R2-MICROMIPS: .option pic0
-; CHECK-BE32R2-MICROMIPS: .set micromips
-; CHECK-BE32R2-MICROMIPS: .set noreorder
-; TODO: Need .set mips32r2
-;
-; 32R2 bit MICROMIPS with NO_REORDER and PIC
-; CHECK-BE32R2-MICROMIPS_PIC: .abicalls
-; CHECK-BE32R2-MICROMIPS_PIC: .set micromips
-; CHECK-BE32R2-MICROMIPS_PIC: .set noreorder
-; TODO: Need .set mips32r2 and check absence of .option pic0
-;
-; 64(R1) bit with NO_REORDER and static
-; CHECK-BE64: .abicalls
-; CHECK-BE64: .set noreorder
-; TODO: Need .set mips64 and .option pic0
-;
-; 64(R1) bit with NO_REORDER and PIC
-; CHECK-BE64_PIC: .abicalls
-; CHECK-BE64_PIC: .set noreorder
-; TODO: Need .set mips64 and check absence of .option pic0
-;
-; 64R2 bit with NO_REORDER and static
-; CHECK-BE64R2: .abicalls
-; CHECK-BE64R2: .set noreorder
-; TODO: Need .set mips64r2 and .option pic0
-;
-; 64R2 bit with NO_REORDER and PIC
-; CHECK-BE64R2_PIC: .abicalls
-; CHECK-BE64R2_PIC: .set noreorder
-; TODO: Need .set mips64r2 and check absence of .option pic0
-;
-; 32R2 bit MIPS16 with PIC
-; CHECK-LE32R2-MIPS16: .abicalls
-; CHECK-LE32R2-MIPS16: .set mips16
-; TODO: Need .set mips32r2 and check absence of .option pic0 and noreorder
-
-define i32 @main() nounwind {
-entry:
- ret i32 0
-}
diff --git a/test/MC/Mips/elf_eflags.ll b/test/MC/Mips/elf_eflags.ll
new file mode 100644
index 00000000000..8216a90aa30
--- /dev/null
+++ b/test/MC/Mips/elf_eflags.ll
@@ -0,0 +1,69 @@
+; This tests ELF EFLAGS setting with direct object.
+; When the assembler is ready a .s file for it will
+; be created.
+
+; Non-shared (static) is the absence of pic and or cpic.
+
+; EF_MIPS_NOREORDER (0x00000001) is always on by default currently
+; EF_MIPS_PIC (0x00000002)
+; EF_MIPS_CPIC (0x00000004) - See note below
+; EF_MIPS_ABI2 (0x00000020) - n32 not tested yet
+; EF_MIPS_ARCH_32 (0x50000000)
+; EF_MIPS_ARCH_64 (0x60000000)
+; EF_MIPS_ARCH_32R2 (0x70000000)
+; EF_MIPS_ARCH_64R2 (0x80000000)
+
+; Note that EF_MIPS_CPIC is set by -mabicalls which is the default on Linux
+; TODO need to support -mno-abicalls
+
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32 -relocation-model=static %s -print-hack-directives -o - | FileCheck -check-prefix=CHECK-BE32 %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32 -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE32_PIC %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -relocation-model=static %s -print-hack-directives -o - | FileCheck -check-prefix=CHECK-BE32R2 %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE32R2_PIC %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -mattr=+micromips -relocation-model=static -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE32R2-MICROMIPS %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -mattr=+micromips -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE32R2-MICROMIPS_PIC %s
+
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64 -relocation-model=static %s -print-hack-directives -o - | FileCheck -check-prefix=CHECK-BE64 %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64 %s -print-hack-directives -o - | FileCheck -check-prefix=CHECK-BE64_PIC %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64r2 -relocation-model=static -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE64R2 %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips64r2 -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-BE64R2_PIC %s
+
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -mattr=+mips16 -relocation-model=pic -print-hack-directives %s -o - | FileCheck -check-prefix=CHECK-LE32R2-MIPS16 %s
+
+; 32(R1) bit with NO_REORDER and static
+; CHECK-BE32: .mips_hack_elf_flags 0x50001005
+;
+; 32(R1) bit with NO_REORDER and PIC
+; CHECK-BE32_PIC: .mips_hack_elf_flags 0x50001007
+;
+; 32R2 bit with NO_REORDER and static
+; CHECK-BE32R2: .mips_hack_elf_flags 0x70001005
+;
+; 32R2 bit with NO_REORDER and PIC
+; CHECK-BE32R2_PIC: .mips_hack_elf_flags 0x70001007
+;
+; 32R2 bit MICROMIPS with NO_REORDER and static
+; CHECK-BE32R2-MICROMIPS: .mips_hack_elf_flags 0x72001005
+;
+; 32R2 bit MICROMIPS with NO_REORDER and PIC
+; CHECK-BE32R2-MICROMIPS_PIC: .mips_hack_elf_flags 0x72001007
+;
+; 64(R1) bit with NO_REORDER and static
+; CHECK-BE64: .mips_hack_elf_flags 0x60000005
+;
+; 64(R1) bit with NO_REORDER and PIC
+; CHECK-BE64_PIC: .mips_hack_elf_flags 0x60000007
+;
+; 64R2 bit with NO_REORDER and static
+; CHECK-BE64R2: .mips_hack_elf_flags 0x80000005
+;
+; 64R2 bit with NO_REORDER and PIC
+; CHECK-BE64R2_PIC: .mips_hack_elf_flags 0x80000007
+;
+; 32R2 bit MIPS16 with PIC
+; CHECK-LE32R2-MIPS16: .mips_hack_elf_flags 0x74001006
+
+define i32 @main() nounwind {
+entry:
+ ret i32 0
+}
diff --git a/test/MC/Mips/elf_eflags.s b/test/MC/Mips/elf_eflags.s
index c2849a5efce..f459689bb92 100644
--- a/test/MC/Mips/elf_eflags.s
+++ b/test/MC/Mips/elf_eflags.s
@@ -1,21 +1,15 @@
-// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux %s -o - | \
-// RUN: llvm-readobj -h | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux %s -o -| llvm-readobj -h | FileCheck %s
+// The initial value will be set at 0x50001003 and
+// we will override that with the negation of 0x2 (option pic0
+// the addition of 0x4 (.abicalls)
-// From the commandline and defaults the following should be set:
-// EF_MIPS_ARCH_32 (0x50000000)
-// EF_MIPS_ABI_O32 (0x00001000)
-// EF_MIPS_NOREORDER (0x00000001)
-// EF_MIPS_PIC (0x00000002)
-
-// Inline directives should set or unset the following:
-// EF_MIPS_CPIC (0x00000004) : .abicalls
-// EF_MIPS_ARCH_ASE_M16 (0x04000000) : .set mips16
-// The negation of EF_MIPS_PIC : .option pic0
+ .mips_hack_elf_flags 0x50001003
// CHECK: Flags [ (0x54001005)
.abicalls
.option pic0
-
+
+ // Set EF_MIPS_ARCH_ASE_M16 (0x04000000)
.set mips16
diff --git a/test/CodeGen/Mips/elf_st_other.ll b/test/MC/Mips/elf_st_other.ll
index 47828fe4b48..68cad48ffdf 100644
--- a/test/CodeGen/Mips/elf_st_other.ll
+++ b/test/MC/Mips/elf_st_other.ll
@@ -1,13 +1,12 @@
; This tests value of ELF st_other field for function symbol table entries.
; For microMIPS value should be equal to STO_MIPS_MICROMIPS.
-; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -mattr=+micromips %s \
-; RUN: -o - | FileCheck %s
+; RUN: llc -mtriple mipsel-unknown-linux -mcpu=mips32r2 -mattr=+micromips -print-hack-directives %s -o - | FileCheck %s
define i32 @main() nounwind {
entry:
ret i32 0
}
-; CHECK: .set micromips
+; CHECK: .set micromips
; CHECK: main: