398 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			398 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
// RUN: llvm-mc -triple mips-unknown-linux < %s -show-encoding \
 | 
						|
// RUN:     | FileCheck -check-prefixes=ENCBE,FIXUP %s
 | 
						|
// RUN: llvm-mc -triple mipsel-unknown-linux < %s -show-encoding \
 | 
						|
// RUN:     | FileCheck -check-prefixes=ENCLE,FIXUP %s
 | 
						|
// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s \
 | 
						|
// RUN:     | llvm-readobj -r - | FileCheck -check-prefix=RELOC %s
 | 
						|
// RUN: llvm-mc -filetype=obj -triple mips-unknown-linux < %s \
 | 
						|
// RUN:     | llvm-readobj --sections --section-data - \
 | 
						|
// RUN:     | FileCheck -check-prefix=DATA %s
 | 
						|
 | 
						|
// Test that we produce the correct relocation.
 | 
						|
// FIXME: move more relocation only tests here.
 | 
						|
 | 
						|
// Check prefixes:
 | 
						|
// RELOC - Check the relocation in the object.
 | 
						|
// FIXUP - Check the fixup on the instruction.
 | 
						|
// ENCBE - Check the big-endian encoding on the instruction.
 | 
						|
// ENCLE - Check the little-endian encoding on the instruction.
 | 
						|
// ????? - Placeholder. Relocation is defined but the way of generating it is
 | 
						|
//         unknown.
 | 
						|
// FIXME - Placeholder. Generation method is known but doesn't work.
 | 
						|
 | 
						|
// RELOC-LABEL: .rel.text {
 | 
						|
// DATA-LABEL: Name: .text
 | 
						|
// DATA:       SectionData (
 | 
						|
 | 
						|
// DATA-NEXT:  0000: 00000004 00000000 00000004 0C000000
 | 
						|
        .short foo                         // RELOC: R_MIPS_16 foo
 | 
						|
 | 
						|
        .short bar                         // RELOC: R_MIPS_16 .data
 | 
						|
 | 
						|
baz:    .long foo                          // RELOC: R_MIPS_32 foo
 | 
						|
 | 
						|
        .long bar                          // RELOC: R_MIPS_32 .data
 | 
						|
 | 
						|
                                           // ?????: R_MIPS_REL32 foo
 | 
						|
 | 
						|
        jal foo                            // RELOC: R_MIPS_26 foo
 | 
						|
                                           // ENCBE: jal foo # encoding: [0b000011AA,A,A,A]
 | 
						|
                                           // ENCLE: jal foo # encoding: [A,A,A,0b000011AA]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_26
 | 
						|
 | 
						|
// The nop from the jal is at 0x0010
 | 
						|
// DATA-NEXT:  0010: 00000000 0C000001 00000000 24620000
 | 
						|
        jal baz                            // RELOC: R_MIPS_26 .text
 | 
						|
                                           // ENCBE: jal baz # encoding: [0b000011AA,A,A,A]
 | 
						|
                                           // ENCLE: jal baz # encoding: [A,A,A,0b000011AA]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: baz, kind: fixup_Mips_26
 | 
						|
 | 
						|
        addiu $2, $3, %hi(foo)             // RELOC: R_MIPS_HI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %hi(foo), kind: fixup_Mips_HI16
 | 
						|
 | 
						|
// DATA-NEXT:  0020: 24620000 24620000 24620004 24620000
 | 
						|
        addiu $2, $3, %lo(foo)             // RELOC: R_MIPS_LO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo), kind: fixup_Mips_LO16
 | 
						|
 | 
						|
        addiu $2, $3, %hi(bar)             // RELOC: R_MIPS_HI16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %hi(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_Mips_HI16
 | 
						|
 | 
						|
        addiu $2, $3, %lo(bar)             // RELOC: R_MIPS_LO16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %lo(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %lo(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_Mips_LO16
 | 
						|
 | 
						|
        addiu $2, $3, %gp_rel(foo)         // RELOC: R_MIPS_GPREL16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %gp_rel(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %gp_rel(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %gp_rel(foo), kind: fixup_Mips_GPREL
 | 
						|
 | 
						|
// DATA-NEXT:  0030: 24620004 24620000 24420000 24620000
 | 
						|
        addiu $2, $3, %gp_rel(bar)         // RELOC: R_MIPS_GPREL16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %gp_rel(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %gp_rel(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %gp_rel(bar), kind: fixup_Mips_GPREL
 | 
						|
 | 
						|
                                           // ?????: R_MIPS_LITERAL foo
 | 
						|
 | 
						|
        addiu $2, $3, %got(foo)            // RELOC: R_MIPS_GOT16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(foo), kind: fixup_Mips_GOT
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(foo)
 | 
						|
 | 
						|
        addiu $2, $3, %got(bar)            // RELOC: R_MIPS_GOT16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_Mips_GOT
 | 
						|
// DATA-NEXT:  0040: 24420004 0000FFBE 24620000
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(bar)
 | 
						|
 | 
						|
        .short foo-.                       // RELOC: R_MIPS_PC16 foo
 | 
						|
        .short baz-.                       // RELOC-NOT: R_MIPS_PC16
 | 
						|
 | 
						|
        addiu $2, $3, %call16(foo)         // RELOC: R_MIPS_CALL16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %call16(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %call16(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %call16(foo), kind: fixup_Mips_CALL16
 | 
						|
 | 
						|
	.p2align 4
 | 
						|
// DATA-NEXT:  0050: 00000000 00000000 00000000 00000004
 | 
						|
        .quad foo                          // RELOC: R_MIPS_64 foo
 | 
						|
        .quad bar                          // RELOC: R_MIPS_64 .data
 | 
						|
 | 
						|
                                           // ?????: R_MIPS_GPREL32 foo
 | 
						|
                                           // ?????: R_MIPS_UNUSED1 foo
 | 
						|
                                           // ?????: R_MIPS_UNUSED2 foo
 | 
						|
                                           // ?????: R_MIPS_UNUSED3 foo
 | 
						|
                                           // ?????: R_MIPS_SHIFT5 foo
 | 
						|
                                           // ?????: R_MIPS_SHIFT6 foo
 | 
						|
 | 
						|
// DATA-NEXT:  0060: 24620000 24620000 24620004 24620000
 | 
						|
        addiu $2, $3, %got_disp(foo)       // RELOC: R_MIPS_GOT_DISP foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_disp(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_disp(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_disp(foo), kind: fixup_Mips_GOT_DISP
 | 
						|
 | 
						|
        addiu $2, $3, %got_page(foo)       // RELOC: R_MIPS_GOT_PAGE foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_page(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_page(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_page(foo), kind: fixup_Mips_GOT_PAGE
 | 
						|
 | 
						|
        addiu $2, $3, %got_page(bar)       // RELOC: R_MIPS_GOT_PAGE .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_page(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_page(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_Mips_GOT_PAGE
 | 
						|
 | 
						|
        addiu $2, $3, %got_ofst(foo)       // RELOC: R_MIPS_GOT_OFST foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_ofst(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_ofst(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_ofst(foo), kind: fixup_Mips_GOT_OFST
 | 
						|
 | 
						|
// DATA-NEXT:  0070: 24620004 24620000 24620000 64620000
 | 
						|
        addiu $2, $3, %got_ofst(bar)       // RELOC: R_MIPS_GOT_OFST .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_ofst(bar) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_ofst(bar) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_Mips_GOT_OFST
 | 
						|
 | 
						|
        addiu $2, $3, %got_hi(foo)         // RELOC: R_MIPS_GOT_HI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_hi(foo), kind: fixup_Mips_GOT_HI16
 | 
						|
 | 
						|
        addiu $2, $3, %got_lo(foo)         // RELOC: R_MIPS_GOT_LO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_lo(foo), kind: fixup_Mips_GOT_LO16
 | 
						|
 | 
						|
        // It turns out that %neg() isn't actually usable for anything. It's
 | 
						|
        // not supported in .quad and it doesn't make sense to use a 64-bit
 | 
						|
        // reloc on a 32-bit instruction.
 | 
						|
        // .quad %neg(foo)                 // ?????: R_MIPS_SUB foo
 | 
						|
                                           // ?????: R_MIPS_INSERT_A
 | 
						|
                                           // ?????: R_MIPS_INSERT_B
 | 
						|
                                           // ?????: R_MIPS_DELETE
 | 
						|
 | 
						|
        .set mips64
 | 
						|
        daddiu $2, $3, %higher(foo)        // RELOC: R_MIPS_HIGHER foo
 | 
						|
                                           // ENCBE: daddiu $2, $3, %higher(foo) # encoding: [0x64,0x62,A,A]
 | 
						|
                                           // ENCLE: daddiu $2, $3, %higher(foo) # encoding: [A,A,0x62,0x64]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_Mips_HIGHER
 | 
						|
 | 
						|
// DATA-NEXT:  0080: 64620000 24620000 24620000 00000000
 | 
						|
        daddiu $2, $3, %highest(foo)       // RELOC: R_MIPS_HIGHEST foo
 | 
						|
                                           // ENCBE: daddiu $2, $3, %highest(foo) # encoding: [0x64,0x62,A,A]
 | 
						|
                                           // ENCLE: daddiu $2, $3, %highest(foo) # encoding: [A,A,0x62,0x64]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_Mips_HIGHEST
 | 
						|
 | 
						|
        .set mips0
 | 
						|
        addiu $2, $3, %call_hi(foo)        // RELOC: R_MIPS_CALL_HI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %call_hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %call_hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %call_hi(foo), kind: fixup_Mips_CALL_HI16
 | 
						|
 | 
						|
        addiu $2, $3, %call_lo(foo)        // RELOC: R_MIPS_CALL_LO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %call_lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %call_lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %call_lo(foo), kind: fixup_Mips_CALL_LO16
 | 
						|
 | 
						|
                                           // ?????: R_MIPS_SCN_DISP foo
 | 
						|
                                           // ?????: R_MIPS_REL16 foo
 | 
						|
                                           // ?????: R_MIPS_ADD_IMMEDIATE foo
 | 
						|
                                           // ?????: R_MIPS_PJUMP foo
 | 
						|
                                           // ?????: R_MIPS_RELGOT foo
 | 
						|
//      jalr $25                           // ?????: R_MIPS_JALR foo
 | 
						|
 | 
						|
                                           // ?????: R_MIPS_TLS_DTPMOD32 foo
 | 
						|
        .dtprelword foo                    // RELOC: R_MIPS_TLS_DTPREL32 foo
 | 
						|
 | 
						|
// DATA-NEXT:  0090: 00000000 00000000 24620000 24620000
 | 
						|
                                           // ?????: R_MIPS_TLS_DTPMOD64 foo
 | 
						|
        .dtpreldword foo                   // RELOC: R_MIPS_TLS_DTPREL64 foo
 | 
						|
        addiu $2, $3, %tlsgd(foo)          // RELOC: R_MIPS_TLS_GD foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %tlsgd(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %tlsgd(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %tlsgd(foo), kind: fixup_Mips_TLSGD
 | 
						|
 | 
						|
        addiu $2, $3, %tlsldm(foo)         // RELOC: R_MIPS_TLS_LDM foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %tlsldm(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %tlsldm(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %tlsldm(foo), kind: fixup_Mips_TLSLDM
 | 
						|
 | 
						|
// DATA-NEXT:  00A0: 24620000 24620000 24620000 00000000
 | 
						|
        addiu $2, $3, %dtprel_hi(foo)      // RELOC: R_MIPS_TLS_DTPREL_HI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %dtprel_hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %dtprel_hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %dtprel_hi(foo), kind: fixup_Mips_DTPREL_HI
 | 
						|
 | 
						|
        addiu $2, $3, %dtprel_lo(foo)      // RELOC: R_MIPS_TLS_DTPREL_LO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %dtprel_lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %dtprel_lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %dtprel_lo(foo), kind: fixup_Mips_DTPREL_LO
 | 
						|
 | 
						|
        addiu $2, $3, %gottprel(foo)       // RELOC: R_MIPS_TLS_GOTTPREL foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_Mips_GOTTPREL
 | 
						|
 | 
						|
        .tprelword foo                     // RELOC: R_MIPS_TLS_TPREL32 foo
 | 
						|
 | 
						|
// DATA-NEXT:  00B0: 00000000 00000000 24620000 24620000
 | 
						|
        .tpreldword foo                    // RELOC: R_MIPS_TLS_TPREL64 foo
 | 
						|
        addiu $2, $3, %tprel_hi(foo)       // RELOC: R_MIPS_TLS_TPREL_HI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %tprel_hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %tprel_hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %tprel_hi(foo), kind: fixup_Mips_TPREL_HI
 | 
						|
 | 
						|
        addiu $2, $3, %tprel_lo(foo)       // RELOC: R_MIPS_TLS_TPREL_LO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %tprel_lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %tprel_lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %tprel_lo(foo), kind: fixup_Mips_TPREL_LO
 | 
						|
 | 
						|
// DATA-NEXT:  00C0: D85FFFFF CBFFFFFF EC580000 EC480000
 | 
						|
                                           // ?????: R_MIPS_GLOB_DAT foo
 | 
						|
        .set mips32r6
 | 
						|
        beqzc $2, foo                      // RELOC: R_MIPS_PC21_S2 foo
 | 
						|
                                           // ENCBE: beqzc $2, foo # encoding: [0xd8,0b010AAAAA,A,A]
 | 
						|
                                           // ENCLE: beqzc $2, foo # encoding: [A,A,0b010AAAAA,0xd8]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC21_S2
 | 
						|
 | 
						|
        bc foo                             // RELOC: R_MIPS_PC26_S2 foo
 | 
						|
                                           // ENCBE: bc foo # encoding: [0b110010AA,A,A,A]
 | 
						|
                                           // ENCLE: bc foo # encoding: [A,A,A,0b110010AA]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC26_S2
 | 
						|
 | 
						|
        .set mips64r6
 | 
						|
        ldpc $2, foo                       // RELOC: R_MIPS_PC18_S3 foo
 | 
						|
                                           // ENCBE: ldpc $2, foo # encoding: [0xec,0b010110AA,A,A]
 | 
						|
                                           // ENCLE: ldpc $2, foo # encoding: [A,A,0b010110AA,0xec]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_PC18_S3
 | 
						|
 | 
						|
        .set mips32r6
 | 
						|
        lwpc $2, foo                       // RELOC: R_MIPS_PC19_S2 foo
 | 
						|
                                           // ENCBE: lwpc $2, foo # encoding: [0xec,0b01001AAA,A,A]
 | 
						|
                                           // ENCLE: lwpc $2, foo # encoding: [A,A,0b01001AAA,0xec]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_MIPS_PC19_S2
 | 
						|
 | 
						|
// DATA-NEXT:  00D0: 24620000 24620000 00000000
 | 
						|
        addiu $2, $3, %pcrel_hi(foo)       // RELOC: R_MIPS_PCHI16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %pcrel_hi(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %pcrel_hi(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_MIPS_PCHI16
 | 
						|
 | 
						|
        addiu $2, $3, %pcrel_lo(foo)       // RELOC: R_MIPS_PCLO16 foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %pcrel_lo(foo) # encoding: [0x24,0x62,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %pcrel_lo(foo) # encoding: [A,A,0x62,0x24]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_MIPS_PCLO16
 | 
						|
 | 
						|
        .set mips0
 | 
						|
                                           // FIXME: R_MIPS16_*
 | 
						|
                                           // ?????: R_MIPS_COPY foo
 | 
						|
                                           // ?????: R_MIPS_JUMP_SLOT foo
 | 
						|
                                           // FIXME: R_MICROMIPS_*
 | 
						|
        .long foo-.                        // RELOC: R_MIPS_PC32 foo
 | 
						|
//      .ehword foo                        // FIXME: R_MIPS_EH foo
 | 
						|
 | 
						|
	.data
 | 
						|
	.word 0
 | 
						|
bar:
 | 
						|
	.word 1
 | 
						|
 | 
						|
        .section .text_mm, "ax", @progbits
 | 
						|
        .set micromips
 | 
						|
mm:
 | 
						|
// RELOC-LABEL: .rel.text_mm {
 | 
						|
// ENCBE-LABEL: mm:
 | 
						|
// ENCLE-LABEL: mm:
 | 
						|
// DATA-LABEL: Name: .text_mm
 | 
						|
// DATA:       SectionData (
 | 
						|
 | 
						|
// DATA-NEXT:  0000: 30430000 30420000 30430000 30420004
 | 
						|
        addiu $2, $3, %got(foo_mm)         // RELOC: R_MICROMIPS_GOT16 foo_mm
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(foo_mm) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(foo_mm), kind: fixup_MICROMIPS_GOT16
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(foo_mm)          // RELOC: R_MICROMIPS_LO16 foo_mm
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
foo_mm:
 | 
						|
        addiu $2, $3, %got(bar)            // RELOC: R_MICROMIPS_GOT16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_MICROMIPS_GOT16
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(bar)             // RELOC: R_MICROMIPS_LO16 .data
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
// DATA-NEXT:  0010: 30430000 30420004 30430001 3042003C
 | 
						|
        addiu $2, $3, %got(baz)            // RELOC: R_MICROMIPS_GOT16 .text
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(baz) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(baz) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(baz), kind: fixup_MICROMIPS_GOT16
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(baz)             // RELOC: R_MICROMIPS_LO16 .text
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(baz) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(baz) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(baz), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
        addiu $2, $3, %got(long_mm)        // RELOC: R_MICROMIPS_GOT16 .text
 | 
						|
                                           // ENCBE: addiu $2, $3, %got(long_mm) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
 | 
						|
                                           // ENCLE: addiu $2, $3, %got(long_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got(long_mm), kind: fixup_MICROMIPS_GOT16
 | 
						|
        // %got requires a %lo pair
 | 
						|
        addiu $2, $2, %lo(long_mm)         // RELOC: R_MICROMIPS_LO16 .text
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(long_mm) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(long_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(long_mm), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
// DATA-NEXT:  0020: 30430004 00000000 30430004 00000000
 | 
						|
        addiu $2, $3, %got_page(bar)       // RELOC: R_MICROMIPS_GOT_PAGE .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_page(bar) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_page(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_MICROMIPS_GOT_PAGE
 | 
						|
        nop
 | 
						|
 | 
						|
        addiu $2, $3, %got_ofst(bar)       // RELOC: R_MICROMIPS_GOT_OFST .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %got_ofst(bar) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
 | 
						|
                                           // ENCLE: addiu $2, $3, %got_ofst(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_MICROMIPS_GOT_OFST
 | 
						|
        nop
 | 
						|
 | 
						|
// DATA-NEXT:  0030: 30430000 30420000 30430000 30420004
 | 
						|
        addiu $2, $3, %hi(foo_mm)          // RELOC: R_MICROMIPS_HI16 foo_mm
 | 
						|
                                           // ENCBE: addiu $2, $3, %hi(foo_mm) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %hi(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %hi(foo_mm), kind: fixup_MICROMIPS_HI16
 | 
						|
 | 
						|
        addiu $2, $2, %lo(foo_mm)          // RELOC: R_MICROMIPS_LO16 foo_mm
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
        addiu $2, $3, %hi(bar)             // RELOC: R_MICROMIPS_HI16 .data
 | 
						|
                                           // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %hi(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_MICROMIPS_HI16
 | 
						|
 | 
						|
        addiu $2, $2, %lo(bar)             // RELOC: R_MICROMIPS_LO16 .data
 | 
						|
                                           // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
 | 
						|
 | 
						|
// DATA-NEXT:  0040: 30430000 41A50000 41A50000 00000000
 | 
						|
        addiu $2, $3, %gottprel(foo)       // RELOC: R_MICROMIPS_TLS_GOTTPREL foo
 | 
						|
                                           // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x30,0x43,A,A]
 | 
						|
                                           // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [0x43'A',0x30'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_MICROMIPS_GOTTPREL
 | 
						|
 | 
						|
        lui $5, %higher(foo)               // RELOC: R_MICROMIPS_HIGHER foo
 | 
						|
                                           // ENCBE: lui $5, %higher(foo) # encoding: [0x41,0xa5,A,A]
 | 
						|
                                           // ENCLE: lui $5, %higher(foo) # encoding: [0xa5'A',0x41'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_MICROMIPS_HIGHER
 | 
						|
 | 
						|
        lui $5, %highest(foo)              // RELOC: R_MICROMIPS_HIGHEST foo
 | 
						|
                                           // ENCBE: lui $5, %highest(foo) # encoding: [0x41,0xa5,A,A]
 | 
						|
                                           // ENCLE: lui $5, %highest(foo) # encoding: [0xa5'A',0x41'A',0x00,0x00]
 | 
						|
                                           // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_MICROMIPS_HIGHEST
 | 
						|
 | 
						|
        .space 65520, 0
 | 
						|
long_mm:
 |