diff options
Diffstat (limited to 'test/elf/Mips/la25-stub-micro.test')
-rw-r--r-- | test/elf/Mips/la25-stub-micro.test | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/test/elf/Mips/la25-stub-micro.test b/test/elf/Mips/la25-stub-micro.test new file mode 100644 index 0000000000000..d41297a0ddc3c --- /dev/null +++ b/test/elf/Mips/la25-stub-micro.test @@ -0,0 +1,140 @@ +# Check microMIPS LA25 stubs creation when PIC code +# is called from non-PIC routines. + +# Build executable from pic and non-pic code. +# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o +# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o +# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o +# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe \ +# RUN: %t-npic.o %t-pic.o %t-main.o + +# RUN: llvm-readobj -t %t.exe | FileCheck -check-prefix=SYM %s +# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=ASM %s + +# SYM: Name: loc (13) +# SYM-NEXT: Value: 0x400135 +# SYM: Name: T1N (1) +# SYM-NEXT: Value: 0x400111 +# SYM: Name: T1 (5) +# SYM-NEXT: Value: 0x400121 +# SYM: Name: glob (8) +# SYM-NEXT: Value: 0x400125 + +# ASM: Contents of section .text: +# ASM-NEXT: 400110 00000000 00000000 00000000 00000000 +# ASM-NEXT: 400120 00000000 00000000 00000000 10f04900 +# 0x100049 << 2 == 0x400125 (jalx glob) --^ +# ASM-NEXT: 400130 00000000 20f49200 00000000 20f48800 +# ^-- 0x100049 << 2 == 0x400124 (jal glob) +# 0x100044 << 2 == 0x400110 (jal T1N) --^ +# ASM-NEXT: 400140 00000000 20f4a800 00000000 00000000 +# ^-- 0x100054 << 2 == 0x400150 (jal T1 stub) +# ASM-NEXT: 400150 b9414000 20d49000 39332101 00000000 +# ^-- j 0x400120 (T1) + +# npic.o +--- +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_MIPS + Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, + EF_MIPS_CPIC, EF_MIPS_MICROMIPS ] + +Sections: +- Name: .text + Type: SHT_PROGBITS + Size: 0x04 + AddressAlign: 16 + Flags: [SHF_EXECINSTR, SHF_ALLOC] + +Symbols: + Global: + - Name: T1N + Section: .text + Type: STT_FUNC + Value: 0x0 + Size: 4 + Other: [ STO_MIPS_MICROMIPS ] + +# pic.o +--- +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_MIPS + Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, + EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS ] + +Sections: +- Name: .text + Type: SHT_PROGBITS + Size: 0x04 + AddressAlign: 16 + Flags: [SHF_EXECINSTR, SHF_ALLOC] + +Symbols: + Global: + - Name: T1 + Section: .text + Type: STT_FUNC + Value: 0x0 + Size: 4 + Other: [ STO_MIPS_MICROMIPS ] + +# main.o +--- +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_MIPS + Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, + EF_MIPS_CPIC, EF_MIPS_MICROMIPS ] + +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x04 + Content: '000000000000000000f400000000000000f400000000000000f400000000000000f4000000000000' +# jal loc jal glob jal T1N jal T1 + - Name: .rel.text + Type: SHT_REL + Link: .symtab + AddressAlign: 0x04 + Info: .text + Relocations: + - Offset: 0x08 + Symbol: .text + Type: R_MICROMIPS_26_S1 + - Offset: 0x10 + Symbol: glob + Type: R_MICROMIPS_26_S1 + - Offset: 0x18 + Symbol: T1N + Type: R_MICROMIPS_26_S1 + - Offset: 0x20 + Symbol: T1 + Type: R_MICROMIPS_26_S1 + +Symbols: + Local: + - Name: loc + Section: .text + Value: 0x10 + Size: 0x18 + Other: [ STO_MIPS_MICROMIPS ] + - Name: .text + Type: STT_SECTION + Section: .text + Global: + - Name: glob + Section: .text + Size: 0x10 + Other: [ STO_MIPS_MICROMIPS ] + - Name: T1 + - Name: T1N +... |