brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · c8aaad4 Raw
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