| # REQUIRES: arm |
| |
| # RUN: rm -rf %t && split-file %s %t |
| # RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=armv7a-none-linux-gnueabi %t/a.s -o %t1.o |
| # RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=armv7a-none-linux-gnueabi %t/b.s -o %t2.o |
| # RUN: ld.lld -shared %t1.o %t2.o -o %t.so |
| # RUN: llvm-objdump -d %t.so | FileCheck %s |
| |
| ## Check that, when the input is a mixture of objects which can and cannot use |
| ## the ARM ISA, we use the default ARM PLT sequences. |
| |
| # CHECK: <.plt>: |
| # CHECK-NEXT: e52de004 str lr, [sp, #-0x4]! |
| # CHECK-NEXT: e28fe600 add lr, pc, #0, #12 |
| # CHECK-NEXT: e28eea20 add lr, lr, #32, #20 |
| # CHECK-NEXT: e5bef084 ldr pc, [lr, #0x84]! |
| # CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 |
| # CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 |
| # CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 |
| # CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 |
| # CHECK-NEXT: e28fc600 add r12, pc, #0, #12 |
| # CHECK-NEXT: e28cca20 add r12, r12, #32, #20 |
| # CHECK-NEXT: e5bcf06c ldr pc, [r12, #0x6c]! |
| # CHECK-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 |
| |
| #--- a.s |
| .globl foo |
| .type foo, %function |
| .globl bar |
| .type bar, %function |
| |
| .thumb |
| foo: |
| bl bar |
| bx lr |
| |
| #--- b.s |
| .eabi_attribute Tag_ARM_ISA_use, 0 |
| |
| .arm |
| .globl bar |
| .type bar, %function |
| bar: |
| bx lr |