[mips] Implemented the .hword directive.

Summary:
In order to pass the tests, this required marking R_MIPS_16 relocations
as needing to point to the symbol and not the section.

Reviewers: vkalintiris, dsanders

Subscribers: dsanders, llvm-commits

Differential Revision: http://reviews.llvm.org/D17200

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260896 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Scott Egerton 2016-02-15 16:11:51 +00:00
parent 5e17ebd723
commit 4f17f73d87
3 changed files with 14 additions and 3 deletions

View File

@ -6216,6 +6216,11 @@ bool MipsAsmParser::ParseDirective(AsmToken DirectiveID) {
return false;
}
if (IDVal == ".hword") {
parseDataDirective(2, DirectiveID.getLoc());
return false;
}
if (IDVal == ".option")
return parseDirectiveOption();

View File

@ -412,6 +412,7 @@ bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
case ELF::R_MICROMIPS_LO16:
return true;
case ELF::R_MIPS_16:
case ELF::R_MIPS_32:
if (cast<MCSymbolELF>(Sym).getOther() & ELF::STO_MIPS_MICROMIPS)
return true;

View File

@ -7,14 +7,16 @@
# CHECK-ASM: .4byte 3735929054
# CHECK-ASM: .8byte -2401050962867405073
# CHECK-ASM: .2byte 49374
# CHECK-ASM: .4byte label
# CHECK-ASM: .8byte label
# CHECK-ASM: .2byte label
# Checking if the data and reloations were correctly emitted
# CHECK-OBJ: Section {
# CHECK-OBJ: Name: .data
# CHECK-OBJ: SectionData (
# CHECK-OBJ: 0000: DEADC0DE DEADC0DE DEADBEEF 00000000
# CHECK-OBJ: 0000: DEADC0DE DEADC0DE DEADBEEF C0DE0000
# CHECK-OBJ: 0010: 00000000 00000000
# CHECK-OBJ: )
# CHECK-OBJ: }
@ -22,8 +24,9 @@
# CHECK-OBJ: Section {
# CHECK-OBJ: Name: .rel.data
# CHECK-OBJ: Relocations [
# CHECK-OBJ: 0xC R_MIPS_32 .data 0x0
# CHECK-OBJ: 0x10 R_MIPS_64 .data 0x0
# CHECK-OBJ: 0xE R_MIPS_32 .data 0x0
# CHECK-OBJ: 0x12 R_MIPS_64 .data 0x0
# CHECK-OBJ: 0x1A R_MIPS_16 .data 0x0
# CHECK-OBJ: ]
# CHECK-OBJ: }
@ -31,6 +34,8 @@
label:
.word 0xdeadc0de
.dword 0xdeadc0dedeadbeef
.hword 0xc0de
.word label
.dword label
.hword label