brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · a98bd71 Raw
161 lines · plain
1# REQUIRES: riscv2## Relax R_RISCV_CALL and R_RISCV_CALL_PLT.3 4# RUN: rm -rf %t && split-file %s %t && cd %t5 6## Without RVC7# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax a.s -o a.32.o8# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax b.s -o b.32.o9# RUN: ld.lld -shared -soname=b.so b.32.o -o b.32.so10# RUN: ld.lld -T lds a.32.o b.32.so -o 3211# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32 | FileCheck %s --check-prefix=NORVC12 13# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax a.s -o a.64.o14# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax b.s -o b.64.o15# RUN: ld.lld -shared -soname=b.so b.64.o -o b.64.so16# RUN: ld.lld -T lds a.64.o b.64.so -o 6417# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64 | FileCheck %s --check-prefix=NORVC18 19## RVC20# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+c,+relax a.s -o a.32c.o21# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+c,+relax b.s -o b.32c.o22# RUN: ld.lld -shared -soname=b.so b.32c.o -o b.32c.so23# RUN: ld.lld -T lds a.32c.o b.32c.so -o 32c24# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32c | FileCheck %s --check-prefixes=RVC,RVC3225 26# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+c,+relax a.s -o a.64c.o27# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+c,+relax b.s -o b.64c.o28# RUN: ld.lld -shared -soname=b.so b.64c.o -o b.64c.so29# RUN: ld.lld -T lds a.64c.o b.64c.so -o 64c30# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64c | FileCheck %s --check-prefixes=RVC,RVC6431 32## --no-relax disables relaxation.33# RUN: ld.lld -T lds a.64.o b.64.so --no-relax -o 64.norelax34# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64.norelax | FileCheck %s --check-prefixes=NORELAX35 36# NORVC:       00010000 g       .text  {{0*}}0000001c _start37# NORVC:       0001001c g       .text  {{0*}}00000000 _start_end38# NORVC:       00010808 g       .mid   {{0*}}00000000 mid_end39# NORVC:       00110016 g       .high  {{0*}}00000000 high_end40 41# NORVC-LABEL: <_start>:42# NORVC-NEXT:    10000:  jal    zero, {{.*}} <a>43# NORVC-NEXT:            jal    zero, {{.*}} <a>44# NORVC-NEXT:            addi   zero, zero, 0x045# NORVC-NEXT:            addi   zero, zero, 0x046# NORVC-NEXT:    10010:  jal    ra, {{.*}} <a>47# NORVC-NEXT:            jal    ra, 0x1042048# NORVC-EMPTY:49 50# NORVC-LABEL: <.mid>:51# NORVC-NEXT:    10800:  jal    ra, {{.*}} <_start>52# NORVC-NEXT:            jal    ra, {{.*}} <_start>53# NORVC-EMPTY:54 55# NORVC-LABEL: <.mid2>:56# NORVC-NEXT:    1080c:  jal    ra, {{.*}} <_start>57# NORVC-EMPTY:58 59# NORVC-LABEL: <.high>:60# NORVC-NEXT:   110006:  auipc  ra, 0xfff0061# NORVC-NEXT:            jalr   ra, -0x6(ra)62# NORVC-NEXT:            auipc  ra, 0xfff0063# NORVC-NEXT:            jalr   ra, -0xe(ra)64# NORVC-EMPTY:65 66# RVC32:       00010000 g       .text  00000016 _start67# RVC32:       00010016 g       .text  00000000 _start_end68# RVC32:       00010806 g       .mid   00000000 mid_end69# RVC32:       0011000c g       .high  00000000 high_end70# RVC64:       0000000000010000 g       .text  000000000000001a _start71# RVC64:       000000000001001a g       .text  0000000000000000 _start_end72# RVC64:       0000000000010808 g       .mid   0000000000000000 mid_end73# RVC64:       0000000000110014 g       .high  0000000000000000 high_end74 75# RVC-LABEL:   <_start>:76# RVC-NEXT:      10000:  c.j    {{.*}} <a>77# RVC-NEXT:              c.j    {{.*}} <a>78# RVC-NEXT:              addi   zero, zero, 0x079# RVC-NEXT:              addi   zero, zero, 0x080# RVC-NEXT:              addi   zero, zero, 0x081# RVC32-NEXT:    10010:  c.jal  {{.*}} <a>82# RVC32-NEXT:            c.jal  0x1042083# RVC64-NEXT:    10010:  jal    ra, {{.*}} <a>84# RVC64-NEXT:            jal    ra, 0x1042085# RVC-EMPTY:86# RVC-NEXT:    <a>:87# RVC-NEXT:              c.jr   ra88# RVC-EMPTY:89 90# RVC-LABEL:   <.mid>:91# RVC32-NEXT:    10800:  c.jal  {{.*}} <_start>92# RVC64-NEXT:    10800:  jal    ra, {{.*}} <_start>93# RVC-NEXT:              jal    ra, {{.*}} <_start>94# RVC-EMPTY:95 96# RVC-LABEL:   <.mid2>:97# RVC32-NEXT:    1080a:  jal    ra, {{.*}} <_start>98# RVC64-NEXT:    1080c:  jal    ra, {{.*}} <_start>99# RVC-EMPTY:100 101# RVC-LABEL:   <.high>:102# RVC32-NEXT:   110000:  jal    ra, 0x10000 <_start>103# RVC32-NEXT:            auipc  ra, 0xfff00104# RVC32-NEXT:            jalr   ra, -0x4(ra)105# RVC64-NEXT:   110004:  auipc  ra, 0xfff00106# RVC64-NEXT:            jalr   ra, -0x4(ra)107# RVC64-NEXT:            auipc  ra, 0xfff00108# RVC64-NEXT:            jalr   ra, -0xc(ra)109# RVC-EMPTY:110 111# NORELAX-LABEL: <_start>:112# NORELAX-NEXT:    10000:  auipc  t1, 0x0113# NORELAX-NEXT:            jalr   zero, 0x20(t1)114# NORELAX-NEXT:            auipc  t0, 0x0115# NORELAX-NEXT:            jalr   zero, 0x18(t0)116# NORELAX-NEXT:    10010:  auipc  ra, 0x0117# NORELAX-NEXT:            jalr   ra, 0x10(ra)118# NORELAX-NEXT:            auipc  ra, 0x0119# NORELAX-NEXT:            jalr   ra, 0x408(ra)120# NORELAX-EMPTY:121 122#--- a.s123.global _start, _start_end124_start:125  tail a@plt126  jump a, t0127.balign 16128  call a          # rv32c: c.jal; rv64c: jal129  call bar        # PLT call can be relaxed. rv32c: c.jal; rv64c: jal130 131a:132  ret133.size _start, . - _start134_start_end:135 136.section .mid,"ax",@progbits137  call _start@plt # rv32c: c.jal; rv64c: jal138  call _start@plt139 140.section .mid2,"ax",@progbits141  call _start@plt142 143.section .high,"ax",@progbits144  call _start@plt # relaxable for %t/32c145  call _start@plt # not relaxed146 147#--- b.s148.globl bar149bar:150  ret151 152#--- lds153SECTIONS {154  .text 0x10000 : { *(.text) }155  .plt 0x10400 : { *(.plt) }156  .mid 0x10800 : { *(.mid); mid_end = .; }157  .mid2 mid_end+4 : { *(.mid2) }158  # 22 is the size of _start in %t/32c (RVC32).159  .high 0x110000+(_start_end-_start)-22 : { *(.high); high_end = .; }160}161