119 lines · plain
1# REQUIRES: ppc2# RUN: split-file %s %t3 4# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/asm -o %t.o5# RUN: ld.lld -T %t/lts %t.o -o %t_le6# RUN: llvm-objdump --no-show-raw-insn -d %t_le | FileCheck %s7# RUN: llvm-readelf -s %t_le | FileCheck %s --check-prefix=SYM8 9# RUN: llvm-mc -filetype=obj -triple=powerpc64 %t/asm -o %t.o10# RUN: ld.lld -T %t/lts %t.o -o %t_be11# RUN: llvm-objdump --no-show-raw-insn -d %t_be | FileCheck %s12# RUN: llvm-readelf -s %t_be | FileCheck %s --check-prefix=SYM13 14# RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/asm -o %t.o15# RUN: ld.lld -T %t/lts %t.o -o %t_le --no-power10-stubs16# RUN: llvm-objdump --no-show-raw-insn -d %t_le | FileCheck %s17# RUN: llvm-readelf -s %t_le | FileCheck %s --check-prefix=SYM18 19# SYM: Symbol table '.symtab' contains 9 entries:20# SYM: 1: 0000000010010000 0 NOTYPE LOCAL DEFAULT [<other: 0x20>] 1 callee21# SYM-NEXT: 2: 0000000010020008 0 NOTYPE LOCAL DEFAULT 2 caller_close22# SYM-NEXT: 3: 0000000020020008 0 NOTYPE LOCAL DEFAULT [<other: 0x60>] 3 caller23# SYM-NEXT: 4: 0000000520020008 0 NOTYPE LOCAL DEFAULT 4 caller_far24# SYM-NEXT: 5: 0000000520028040 0 NOTYPE LOCAL HIDDEN 6 .TOC.25# SYM-NEXT: 6: 0000000010020020 8 FUNC LOCAL DEFAULT 2 __toc_save_callee26# SYM-NEXT: 7: 0000000020020020 32 FUNC LOCAL DEFAULT 3 __toc_save_callee27# SYM-NEXT: 8: 0000000520020020 32 FUNC LOCAL DEFAULT 4 __toc_save_callee28 29#--- lts30PHDRS {31 callee PT_LOAD FLAGS(0x1 | 0x4);32 close PT_LOAD FLAGS(0x1 | 0x4);33 caller PT_LOAD FLAGS(0x1 | 0x4);34 far PT_LOAD FLAGS(0x1 | 0x4);35}36SECTIONS {37 .text_callee 0x10010000 : { *(.text_callee) } :callee38 .text_caller_close 0x10020000 : { *(.text_caller_close) } :close39 .text_caller 0x20020000 : { *(.text_caller) } :caller40 .text_caller_far 0x520020000 : { *(.text_caller_far) } :far41}42 43#--- asm44# CHECK-LABEL: <callee>:45# CHECK: blr46.section .text_callee, "ax", %progbits47callee:48 .localentry callee, 149 blr50 51# CHECK-LABEL: <caller_close>:52# CHECK: bl 0x1002002053# CHECK-NEXT: ld 2, 24(1)54# CHECK-NEXT: blr55# CHECK-LABEL: <__toc_save_callee>:56# CHECK: std 2, 24(1)57# CHECK-NEXT: b 0x1001000058.section .text_caller_close, "ax", %progbits59.Lfunc_toc1:60 .quad .TOC.-.Lfunc_gep161caller_close:62.Lfunc_gep1:63 ld 2, .Lfunc_toc1-.Lfunc_gep1(12)64 add 2, 2, 1265.Lfunc_lep1:66 .localentry caller, .Lfunc_lep1-.Lfunc_gep167 bl callee68 nop69 blr70 71# CHECK-LABEL: <caller>:72# CHECK: bl 0x2002002073# CHECK-NEXT: ld 2, 24(1)74# CHECK-NEXT: blr75# CHECK-LABEL: <__toc_save_callee>:76# CHECK: std 2, 24(1)77# CHECK-NEXT: addis 12, 2, -409878# CHECK-NEXT: addi 12, 12, 3270479# CHECK-NEXT: mtctr 1280# CHECK-NEXT: bctr81 82.section .text_caller, "ax", %progbits83.Lfunc_toc2:84 .quad .TOC.-.Lfunc_gep285caller:86.Lfunc_gep2:87 ld 2, .Lfunc_toc2-.Lfunc_gep2(12)88 add 2, 2, 1289.Lfunc_lep2:90 .localentry caller, .Lfunc_lep2-.Lfunc_gep291 bl callee92 nop93 blr94 95# CHECK-LABEL: <caller_far>:96# CHECK: ld 2, -8(12)97# CHECK-NEXT: add 2, 2, 1298# CHECK-NEXT: bl 0x52002002099# CHECK-NEXT: ld 2, 24(1)100# CHECK-NEXT: blr101# CHECK-LABEL: <__toc_save_callee>:102# CHECK: std 2, 24(1)103# CHECK-NEXT: addis 12, 2, 0104# CHECK-NEXT: ld 12, -32760(12)105# CHECK-NEXT: mtctr 12106# CHECK-NEXT: bctr107.section .text_caller_far, "ax", %progbits108.Lfunc_toc3:109 .quad .TOC.-.Lfunc_gep3110caller_far:111.Lfunc_gep3:112 ld 2, .Lfunc_toc3-.Lfunc_gep3(12)113 add 2, 2, 12114.Lfunc_lep3:115 .localentry caller, .Lfunc_lep3-.Lfunc_gep3116 bl callee117 nop118 blr119