1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple mips-unknown-linux < %s -show-encoding \ 2*9880d681SAndroid Build Coastguard Worker// RUN: | FileCheck -check-prefixes=ENCBE,FIXUP %s 3*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple mipsel-unknown-linux < %s -show-encoding \ 4*9880d681SAndroid Build Coastguard Worker// RUN: | FileCheck -check-prefixes=ENCLE,FIXUP %s 5*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s \ 6*9880d681SAndroid Build Coastguard Worker// RUN: | llvm-readobj -r | FileCheck -check-prefix=RELOC %s 7*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -filetype=obj -triple mips-unknown-linux < %s \ 8*9880d681SAndroid Build Coastguard Worker// RUN: | llvm-readobj -sections -section-data \ 9*9880d681SAndroid Build Coastguard Worker// RUN: | FileCheck -check-prefix=DATA %s 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker// Test that we produce the correct relocation. 12*9880d681SAndroid Build Coastguard Worker// FIXME: move more relocation only tests here. 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker// Check prefixes: 15*9880d681SAndroid Build Coastguard Worker// RELOC - Check the relocation in the object. 16*9880d681SAndroid Build Coastguard Worker// FIXUP - Check the fixup on the instruction. 17*9880d681SAndroid Build Coastguard Worker// ENCBE - Check the big-endian encoding on the instruction. 18*9880d681SAndroid Build Coastguard Worker// ENCLE - Check the little-endian encoding on the instruction. 19*9880d681SAndroid Build Coastguard Worker// ????? - Placeholder. Relocation is defined but the way of generating it is 20*9880d681SAndroid Build Coastguard Worker// unknown. 21*9880d681SAndroid Build Coastguard Worker// FIXME - Placeholder. Generation method is known but doesn't work. 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker// RELOC-LABEL: .rel.text { 24*9880d681SAndroid Build Coastguard Worker// DATA-LABEL: Name: .text 25*9880d681SAndroid Build Coastguard Worker// DATA: SectionData ( 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0000: 00000004 00000000 00000004 0C000000 28*9880d681SAndroid Build Coastguard Worker .short foo // RELOC: R_MIPS_16 foo 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker .short bar // RELOC: R_MIPS_16 .data 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerbaz: .long foo // RELOC: R_MIPS_32 foo 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker .long bar // RELOC: R_MIPS_32 .data 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_REL32 foo 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker jal foo // RELOC: R_MIPS_26 foo 39*9880d681SAndroid Build Coastguard Worker // ENCBE: jal foo # encoding: [0b000011AA,A,A,A] 40*9880d681SAndroid Build Coastguard Worker // ENCLE: jal foo # encoding: [A,A,A,0b000011AA] 41*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_26 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker// The nop from the jal is at 0x0010 44*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0010: 00000000 0C000001 00000000 24620000 45*9880d681SAndroid Build Coastguard Worker jal baz // RELOC: R_MIPS_26 .text 46*9880d681SAndroid Build Coastguard Worker // ENCBE: jal baz # encoding: [0b000011AA,A,A,A] 47*9880d681SAndroid Build Coastguard Worker // ENCLE: jal baz # encoding: [A,A,A,0b000011AA] 48*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: baz, kind: fixup_Mips_26 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %hi(foo) // RELOC: R_MIPS_HI16 foo 51*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %hi(foo) # encoding: [0x24,0x62,A,A] 52*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %hi(foo) # encoding: [A,A,0x62,0x24] 53*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %hi(foo), kind: fixup_Mips_HI16 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0020: 24620000 24620000 24620004 24620000 56*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %lo(foo) // RELOC: R_MIPS_LO16 foo 57*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %lo(foo) # encoding: [0x24,0x62,A,A] 58*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %lo(foo) # encoding: [A,A,0x62,0x24] 59*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(foo), kind: fixup_Mips_LO16 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %hi(bar) // RELOC: R_MIPS_HI16 .data 62*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x24,0x62,A,A] 63*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %hi(bar) # encoding: [A,A,0x62,0x24] 64*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_Mips_HI16 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %lo(bar) // RELOC: R_MIPS_LO16 .data 67*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %lo(bar) # encoding: [0x24,0x62,A,A] 68*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %lo(bar) # encoding: [A,A,0x62,0x24] 69*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_Mips_LO16 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %gp_rel(foo) // RELOC: R_MIPS_GPREL16 foo 72*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %gp_rel(foo) # encoding: [0x24,0x62,A,A] 73*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %gp_rel(foo) # encoding: [A,A,0x62,0x24] 74*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %gp_rel(foo), kind: fixup_Mips_GPREL 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0030: 24620004 24620000 24420000 24620000 77*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %gp_rel(bar) // RELOC: R_MIPS_GPREL16 .data 78*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %gp_rel(bar) # encoding: [0x24,0x62,A,A] 79*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %gp_rel(bar) # encoding: [A,A,0x62,0x24] 80*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %gp_rel(bar), kind: fixup_Mips_GPREL 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_LITERAL foo 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(foo) // RELOC: R_MIPS_GOT16 foo 85*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(foo) # encoding: [0x24,0x62,A,A] 86*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(foo) # encoding: [A,A,0x62,0x24] 87*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(foo), kind: fixup_Mips_GOT 88*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 89*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(foo) 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(bar) // RELOC: R_MIPS_GOT16 .data 92*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x24,0x62,A,A] 93*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(bar) # encoding: [A,A,0x62,0x24] 94*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_Mips_GOT 95*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0040: 24420004 0000FFBE 24620000 96*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 97*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(bar) 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker .short foo-. // RELOC: R_MIPS_PC16 foo 100*9880d681SAndroid Build Coastguard Worker .short baz-. // RELOC-NOT: R_MIPS_PC16 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %call16(foo) // RELOC: R_MIPS_CALL16 foo 103*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %call16(foo) # encoding: [0x24,0x62,A,A] 104*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %call16(foo) # encoding: [A,A,0x62,0x24] 105*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %call16(foo), kind: fixup_Mips_CALL16 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker .p2align 4 108*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0050: 00000000 00000000 00000000 00000004 109*9880d681SAndroid Build Coastguard Worker .quad foo // RELOC: R_MIPS_64 foo 110*9880d681SAndroid Build Coastguard Worker .quad bar // RELOC: R_MIPS_64 .data 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_GPREL32 foo 113*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_UNUSED1 foo 114*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_UNUSED2 foo 115*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_UNUSED3 foo 116*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_SHIFT5 foo 117*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_SHIFT6 foo 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0060: 24620000 24620000 24620000 24620000 120*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got_disp(foo) // RELOC: R_MIPS_GOT_DISP foo 121*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got_disp(foo) # encoding: [0x24,0x62,A,A] 122*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got_disp(foo) # encoding: [A,A,0x62,0x24] 123*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got_disp(foo), kind: fixup_Mips_GOT_DISP 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got_page(foo) // RELOC: R_MIPS_GOT_PAGE foo 126*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got_page(foo) # encoding: [0x24,0x62,A,A] 127*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got_page(foo) # encoding: [A,A,0x62,0x24] 128*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got_page(foo), kind: fixup_Mips_GOT_PAGE 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got_ofst(foo) // RELOC: R_MIPS_GOT_OFST foo 131*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got_ofst(foo) # encoding: [0x24,0x62,A,A] 132*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got_ofst(foo) # encoding: [A,A,0x62,0x24] 133*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got_ofst(foo), kind: fixup_Mips_GOT_OFST 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got_hi(foo) // RELOC: R_MIPS_GOT_HI16 foo 136*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got_hi(foo) # encoding: [0x24,0x62,A,A] 137*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got_hi(foo) # encoding: [A,A,0x62,0x24] 138*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got_hi(foo), kind: fixup_Mips_GOT_HI16 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0070: 24620000 64620000 64620000 24620000 141*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got_lo(foo) // RELOC: R_MIPS_GOT_LO16 foo 142*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got_lo(foo) # encoding: [0x24,0x62,A,A] 143*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got_lo(foo) # encoding: [A,A,0x62,0x24] 144*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got_lo(foo), kind: fixup_Mips_GOT_LO16 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker// addiu $2, $3, %neg(foo) // FIXME: R_MIPS_SUB foo 147*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_INSERT_A 148*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_INSERT_B 149*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_DELETE 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker .set mips64 152*9880d681SAndroid Build Coastguard Worker daddiu $2, $3, %higher(foo) // RELOC: R_MIPS_HIGHER foo 153*9880d681SAndroid Build Coastguard Worker // ENCBE: daddiu $2, $3, %higher(foo) # encoding: [0x64,0x62,A,A] 154*9880d681SAndroid Build Coastguard Worker // ENCLE: daddiu $2, $3, %higher(foo) # encoding: [A,A,0x62,0x64] 155*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_Mips_HIGHER 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker daddiu $2, $3, %highest(foo) // RELOC: R_MIPS_HIGHEST foo 158*9880d681SAndroid Build Coastguard Worker // ENCBE: daddiu $2, $3, %highest(foo) # encoding: [0x64,0x62,A,A] 159*9880d681SAndroid Build Coastguard Worker // ENCLE: daddiu $2, $3, %highest(foo) # encoding: [A,A,0x62,0x64] 160*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_Mips_HIGHEST 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker .set mips0 163*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %call_hi(foo) // RELOC: R_MIPS_CALL_HI16 foo 164*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %call_hi(foo) # encoding: [0x24,0x62,A,A] 165*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %call_hi(foo) # encoding: [A,A,0x62,0x24] 166*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %call_hi(foo), kind: fixup_Mips_CALL_HI16 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0080: 24620000 24620000 24620000 24620000 169*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %call_lo(foo) // RELOC: R_MIPS_CALL_LO16 foo 170*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %call_lo(foo) # encoding: [0x24,0x62,A,A] 171*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %call_lo(foo) # encoding: [A,A,0x62,0x24] 172*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %call_lo(foo), kind: fixup_Mips_CALL_LO16 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_SCN_DISP foo 175*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_REL16 foo 176*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_ADD_IMMEDIATE foo 177*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_PJUMP foo 178*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_RELGOT foo 179*9880d681SAndroid Build Coastguard Worker// jalr $25 // ?????: R_MIPS_JALR foo 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_TLS_DTPMOD32 foo 182*9880d681SAndroid Build Coastguard Worker// .dtprelword foo // FIXME: R_MIPS_TLS_DTPREL32 foo 183*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_TLS_DTPMOD64 foo 184*9880d681SAndroid Build Coastguard Worker// .dtpreldword foo // FIXME: R_MIPS_TLS_DTPREL64 foo 185*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %tlsgd(foo) // RELOC: R_MIPS_TLS_GD foo 186*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %tlsgd(foo) # encoding: [0x24,0x62,A,A] 187*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %tlsgd(foo) # encoding: [A,A,0x62,0x24] 188*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %tlsgd(foo), kind: fixup_Mips_TLSGD 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %tlsldm(foo) // RELOC: R_MIPS_TLS_LDM foo 191*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %tlsldm(foo) # encoding: [0x24,0x62,A,A] 192*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %tlsldm(foo) # encoding: [A,A,0x62,0x24] 193*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %tlsldm(foo), kind: fixup_Mips_TLSLDM 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %dtprel_hi(foo) // RELOC: R_MIPS_TLS_DTPREL_HI16 foo 196*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %dtprel_hi(foo) # encoding: [0x24,0x62,A,A] 197*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %dtprel_hi(foo) # encoding: [A,A,0x62,0x24] 198*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %dtprel_hi(foo), kind: fixup_Mips_DTPREL_HI 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %dtprel_lo(foo) // RELOC: R_MIPS_TLS_DTPREL_LO16 foo 201*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %dtprel_lo(foo) # encoding: [0x24,0x62,A,A] 202*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %dtprel_lo(foo) # encoding: [A,A,0x62,0x24] 203*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %dtprel_lo(foo), kind: fixup_Mips_DTPREL_LO 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %gottprel(foo) // RELOC: R_MIPS_TLS_GOTTPREL foo 206*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x24,0x62,A,A] 207*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [A,A,0x62,0x24] 208*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_Mips_GOTTPREL 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Worker// .tprelword foo // FIXME: R_MIPS_TLS_TPREL32 foo 211*9880d681SAndroid Build Coastguard Worker// .tpreldword foo // FIXME: R_MIPS_TLS_TPREL64 foo 212*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %tprel_hi(foo) // RELOC: R_MIPS_TLS_TPREL_HI16 foo 213*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %tprel_hi(foo) # encoding: [0x24,0x62,A,A] 214*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %tprel_hi(foo) # encoding: [A,A,0x62,0x24] 215*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %tprel_hi(foo), kind: fixup_Mips_TPREL_HI 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %tprel_lo(foo) // RELOC: R_MIPS_TLS_TPREL_LO16 foo 218*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %tprel_lo(foo) # encoding: [0x24,0x62,A,A] 219*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %tprel_lo(foo) # encoding: [A,A,0x62,0x24] 220*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %tprel_lo(foo), kind: fixup_Mips_TPREL_LO 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_GLOB_DAT foo 223*9880d681SAndroid Build Coastguard Worker .set mips32r6 224*9880d681SAndroid Build Coastguard Worker beqzc $2, foo // RELOC: R_MIPS_PC21_S2 foo 225*9880d681SAndroid Build Coastguard Worker // ENCBE: beqzc $2, foo # encoding: [0xd8,0b010AAAAA,A,A] 226*9880d681SAndroid Build Coastguard Worker // ENCLE: beqzc $2, foo # encoding: [A,A,0b010AAAAA,0xd8] 227*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC21_S2 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker bc foo // RELOC: R_MIPS_PC26_S2 foo 230*9880d681SAndroid Build Coastguard Worker // ENCBE: bc foo # encoding: [0b110010AA,A,A,A] 231*9880d681SAndroid Build Coastguard Worker // ENCLE: bc foo # encoding: [A,A,A,0b110010AA] 232*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC26_S2 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Worker .set mips64r6 235*9880d681SAndroid Build Coastguard Worker ldpc $2, foo // RELOC: R_MIPS_PC18_S3 foo 236*9880d681SAndroid Build Coastguard Worker // ENCBE: ldpc $2, foo # encoding: [0xec,0b010110AA,A,A] 237*9880d681SAndroid Build Coastguard Worker // ENCLE: ldpc $2, foo # encoding: [A,A,0b010110AA,0xec] 238*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_PC18_S3 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker .set mips32r6 241*9880d681SAndroid Build Coastguard Worker lwpc $2, foo // RELOC: R_MIPS_PC19_S2 foo 242*9880d681SAndroid Build Coastguard Worker // ENCBE: lwpc $2, foo # encoding: [0xec,0b01001AAA,A,A] 243*9880d681SAndroid Build Coastguard Worker // ENCLE: lwpc $2, foo # encoding: [A,A,0b01001AAA,0xec] 244*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_MIPS_PC19_S2 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %pcrel_hi(foo) // RELOC: R_MIPS_PCHI16 foo 247*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %pcrel_hi(foo) # encoding: [0x24,0x62,A,A] 248*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %pcrel_hi(foo) # encoding: [A,A,0x62,0x24] 249*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_MIPS_PCHI16 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %pcrel_lo(foo) // RELOC: R_MIPS_PCLO16 foo 252*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %pcrel_lo(foo) # encoding: [0x24,0x62,A,A] 253*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %pcrel_lo(foo) # encoding: [A,A,0x62,0x24] 254*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_MIPS_PCLO16 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker .set mips0 257*9880d681SAndroid Build Coastguard Worker // FIXME: R_MIPS16_* 258*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_COPY foo 259*9880d681SAndroid Build Coastguard Worker // ?????: R_MIPS_JUMP_SLOT foo 260*9880d681SAndroid Build Coastguard Worker // FIXME: R_MICROMIPS_* 261*9880d681SAndroid Build Coastguard Worker .long foo-. // RELOC: R_MIPS_PC32 foo 262*9880d681SAndroid Build Coastguard Worker// .ehword foo // FIXME: R_MIPS_EH foo 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker .data 265*9880d681SAndroid Build Coastguard Worker .word 0 266*9880d681SAndroid Build Coastguard Workerbar: 267*9880d681SAndroid Build Coastguard Worker .word 1 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker .section .text_mm, "ax", @progbits 270*9880d681SAndroid Build Coastguard Worker .set micromips 271*9880d681SAndroid Build Coastguard Workermm: 272*9880d681SAndroid Build Coastguard Worker// RELOC-LABEL: .rel.text_mm { 273*9880d681SAndroid Build Coastguard Worker// ENCBE-LABEL: mm: 274*9880d681SAndroid Build Coastguard Worker// ENCLE-LABEL: mm: 275*9880d681SAndroid Build Coastguard Worker// DATA-LABEL: Name: .text_mm 276*9880d681SAndroid Build Coastguard Worker// DATA: SectionData ( 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0000: 30430000 30420000 30430000 30420004 279*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(foo_mm) // RELOC: R_MICROMIPS_GOT16 foo_mm 280*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(foo_mm) # encoding: [0x30,0x43,A,A] 281*9880d681SAndroid Build Coastguard Worker // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian. 282*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00] 283*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(foo_mm), kind: fixup_MICROMIPS_GOT16 284*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 285*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(foo_mm) // RELOC: R_MICROMIPS_LO16 foo_mm 286*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A] 287*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00] 288*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Workerfoo_mm: 291*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(bar) // RELOC: R_MICROMIPS_GOT16 .data 292*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x30,0x43,A,A] 293*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(bar) # encoding: [0x43'A',0x30'A',0x00,0x00] 294*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_MICROMIPS_GOT16 295*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 296*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(bar) // RELOC: R_MICROMIPS_LO16 .data 297*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A] 298*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00] 299*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0010: 30430000 30420004 30430001 30420030 302*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(baz) // RELOC: R_MICROMIPS_GOT16 .text 303*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(baz) # encoding: [0x30,0x43,A,A] 304*9880d681SAndroid Build Coastguard Worker // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian. 305*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(baz) # encoding: [0x43'A',0x30'A',0x00,0x00] 306*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(baz), kind: fixup_MICROMIPS_GOT16 307*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 308*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(baz) // RELOC: R_MICROMIPS_LO16 .text 309*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(baz) # encoding: [0x30,0x42,A,A] 310*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(baz) # encoding: [0x42'A',0x30'A',0x00,0x00] 311*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(baz), kind: fixup_MICROMIPS_LO16 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %got(long_mm) // RELOC: R_MICROMIPS_GOT16 .text 314*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %got(long_mm) # encoding: [0x30,0x43,A,A] 315*9880d681SAndroid Build Coastguard Worker // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian. 316*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %got(long_mm) # encoding: [0x43'A',0x30'A',0x00,0x00] 317*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %got(long_mm), kind: fixup_MICROMIPS_GOT16 318*9880d681SAndroid Build Coastguard Worker // %got requires a %lo pair 319*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(long_mm) // RELOC: R_MICROMIPS_LO16 .text 320*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(long_mm) # encoding: [0x30,0x42,A,A] 321*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(long_mm) # encoding: [0x42'A',0x30'A',0x00,0x00] 322*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(long_mm), kind: fixup_MICROMIPS_LO16 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Worker// DATA-NEXT: 0020: 30430000 30420000 30430000 30420004 325*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %hi(foo_mm) // RELOC: R_MICROMIPS_HI16 foo_mm 326*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %hi(foo_mm) # encoding: [0x30,0x43,A,A] 327*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %hi(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00] 328*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %hi(foo_mm), kind: fixup_MICROMIPS_HI16 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(foo_mm) // RELOC: R_MICROMIPS_LO16 foo_mm 331*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A] 332*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00] 333*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16 334*9880d681SAndroid Build Coastguard Worker 335*9880d681SAndroid Build Coastguard Worker addiu $2, $3, %hi(bar) // RELOC: R_MICROMIPS_HI16 .data 336*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x30,0x43,A,A] 337*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $3, %hi(bar) # encoding: [0x43'A',0x30'A',0x00,0x00] 338*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_MICROMIPS_HI16 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker addiu $2, $2, %lo(bar) // RELOC: R_MICROMIPS_LO16 .data 341*9880d681SAndroid Build Coastguard Worker // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A] 342*9880d681SAndroid Build Coastguard Worker // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00] 343*9880d681SAndroid Build Coastguard Worker // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Worker .space 65536, 0 346*9880d681SAndroid Build Coastguard Workerlong_mm: 347