123 lines · plain
1# REQUIRES: hexagon2# RUN: llvm-mc -filetype=obj -triple=hexagon-unknown-linux-musl %s -o %t.o3# RUN: ld.lld %t.o -o %t4# RUN: llvm-objdump -d %t 2>&1 | \5# RUN: FileCheck --check-prefixes=CHECK-NONPIC,CHECK %s6# RUN: llvm-mc -filetype=obj \7# RUN: -triple=hexagon-unknown-linux-musl %s -o %t.o8# RUN: ld.lld --pie %t.o -o %t9# RUN: llvm-objdump -d %t 2>&1 | \10# RUN: FileCheck --check-prefixes=CHECK-PIC,CHECK %s11 12## Packets with pc-relative relocations are more interesting because13## the offset must be relative to the start of the source, destination14## packets and not necessarily the instruction word containing the jump/call.15 16# CHECK: Disassembly of section .text:17 18# CHECK-NONPIC: 000200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>:19# CHECK-NONPIC: { immext(#0x1000040)20# CHECK-NONPIC: jump 0x1020110 <myfn_a> }21 22# CHECK-PIC: 00010150 <__hexagon_thunk_myfn_a_from_.text.thunk>:23# CHECK-PIC-NEXT: { immext(#0x1000040)24# CHECK-PIC-NEXT: r14 = add(pc,##0x1000060) }25# CHECK-PIC-NEXT: { jumpr r14 }26 27# CHECK-NONPIC: 000200bc <myfn_b>:28# CHECK-NONPIC: { jumpr r31 }29# CHECK-PIC: 0001015c <myfn_b>:30# CHECK-PIC: { jumpr r31 }31 .globl myfn_b32 .type myfn_b, @function33myfn_b:34 jumpr r3135 .size myfn_b, .-myfn_b36 37# CHECK-PIC: 00010160 <main>:38 .globl main39 .type main, @function40main:41 { r0 = #042 call myfn_a }43# CHECK-PIC: { call 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>44# CHECK-NONPIC: { call 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>45# CHECK-NEXT: r0 = #0x0 }46 call myfn_a47# CHECK-PIC: call 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>48# CHECK-NONPIC: call 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>49 call myfn_b50# CHECK-PIC-NEXT: call 0x1015c <myfn_b>51# CHECK-NONPIC-NEXT: call 0x200bc <myfn_b>52 53 { r2 = add(r0, r1)54 if (p0) call #myfn_b55 if (!p0) call #myfn_a }56# CHECK-PIC-NEXT: { if (p0) call 0x1015c <myfn_b>57# CHECK-PIC-NEXT: if (!p0) call 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>58# CHECK-NONPIC-NEXT: { if (p0) call 0x200bc <myfn_b>59# CHECK-NONPIC-NEXT: if (!p0) call 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>60 61# CHECK-NEXT: r2 = add(r0,r1) }62 63 { r2 = add(r0, r1)64 if (p0) call #myfn_a65 if (!p0) call #myfn_a }66# CHECK-PIC-NEXT: { if (p0) call 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>67# CHECK-PIC-NEXT: if (!p0) call 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>68# CHECK-NONPIC-NEXT: { if (p0) call 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>69# CHECK-NONPIC-NEXT: if (!p0) call 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>70# CHECK-NEXT: r2 = add(r0,r1) }71 72 { r2 = add(r0, r1)73 r1 = r474 r4 = r575 if (r0 == #0) jump:t #myfn_a }76# CHECK-PIC-NEXT: { if (r0==#0) jump:t 0x1015077# CHECK-NONPIC-NEXT: { if (r0==#0) jump:t 0x200b478# CHECK-NEXT: r2 = add(r0,r1)79# CHECK-NEXT: r1 = r4; r4 = r5 }80 81 { r2 = add(r0, r1)82 r4 = r583 if (r0 <= #0) jump:t #myfn_a84 p1 = cmp.eq(r0, #0); if (p1.new) jump:nt #myfn_a }85# CHECK-NONPIC-NEXT: { if (r0<=#0) jump:t 0x200b486# CHECK-NONPIC-NEXT: p1 = cmp.eq(r0,#0x0); if (p1.new) jump:nt 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk>87# CHECK-PIC-NEXT: { if (r0<=#0) jump:t 0x1015088# CHECK-PIC-NEXT: p1 = cmp.eq(r0,#0x0); if (p1.new) jump:nt 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk>89# CHECK-NEXT: r2 = add(r0,r1)90# CHECK-NEXT: r4 = r5 }91 92 {r0 = #0; jump #myfn_a}93# CHECK-PIC-NEXT: { r0 = #0x0 ; jump 0x10150 <__hexagon_thunk_myfn_a_from_.text.thunk> }94# CHECK-NONPIC-NEXT: { r0 = #0x0 ; jump 0x200b4 <__hexagon_thunk_myfn_a_from_.text.thunk> }95 {r0 = #0; jump #myfn_b}96# CHECK-PIC-NEXT: { r0 = #0x0 ; jump 0x1015c <myfn_b> }97# CHECK-NONPIC-NEXT: { r0 = #0x0 ; jump 0x200bc <myfn_b> }98 jumpr r3199 .size main, .-main100 101 .section .text.foo102 .skip 0x1000000103 104 .globl myfn_a105 .type myfn_a, @function106myfn_a:107 {r0 = #0; jump #myfn_b}108 jumpr r31109 .size myfn_a, .-myfn_a110 111# CHECK-NONPIC: 01020110 <myfn_a>:112# CHECK-NONPIC-NEXT: { r0 = #0x0 ; jump 0x1020118 <__hexagon_thunk_myfn_b_from_.text.thunk> }113# CHECK-NONPIC-NEXT: { jumpr r31 }114 115# CHECK-NONPIC: 01020118 <__hexagon_thunk_myfn_b_from_.text.thunk>:116# CHECK-NONPIC-NEXT: { immext(#0xfeffff80)117# CHECK-NONPIC-NEXT: jump 0x200bc <myfn_b> }118 119# CHECK-PIC: 010101b8 <__hexagon_thunk_myfn_b_from_.text.thunk>:120# CHECK-PIC-NEXT: { immext(#0xfeffff80)121# CHECK-PIC-NEXT: r14 = add(pc,##0xfeffffa4) }122# CHECK-PIC-NEXT: { jumpr r14 }123