forked from OSchip/llvm-project
[mips] Extend MipsAsmParser class to handle %got(sym + const) expressions
Now the parser supports `%got(sym)` expressions only but `%got(sym + const)` variant is also valid and accepted by GAS. Differential Revision: http://reviews.llvm.org/D16885 llvm-svn: 260305
This commit is contained in:
parent
6d870d2e84
commit
2fc1e3b154
llvm
|
@ -4018,6 +4018,7 @@ const MCExpr *MipsAsmParser::evaluateRelocExpr(const MCExpr *Expr,
|
|||
Val = MCE->getValue() & 0xffff;
|
||||
break;
|
||||
case MCSymbolRefExpr::VK_Mips_ABS_HI:
|
||||
case MCSymbolRefExpr::VK_Mips_GOT:
|
||||
// Get the 2nd 16-bits. Also add 1 if bit 15 is 1, to compensate for low
|
||||
// 16 bits being negative.
|
||||
Val = ((MCE->getValue() + 0x8000) >> 16) & 0xffff;
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# Check that llvm-mc accepts arithmetic expression
|
||||
# as an argument of the %got relocation.
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s \
|
||||
# RUN: | llvm-objdump -d -r - | FileCheck %s
|
||||
|
||||
.text
|
||||
foo:
|
||||
lw $t0,%got($loc+0x10004)($gp)
|
||||
# CHECK: 0: 8f 88 00 01 lw $8, 1($gp)
|
||||
# CHECK: 00000000: R_MIPS_GOT16 $loc
|
||||
addi $t0,$t0,%lo($loc+0x10004)
|
||||
# CHECK: 4: 21 08 00 04 addi $8, $8, 4
|
||||
# CHECK: 00000004: R_MIPS_LO16 $loc
|
||||
|
||||
.data
|
||||
$loc:
|
||||
.word 0
|
||||
.space 0x10000
|
||||
.word 0
|
Loading…
Reference in New Issue