1// REQUIRES: arm 2// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %p/Inputs/arm-plt-reloc.s -o %t1 3// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t2 4// RUN: ld.lld %t1 %t2 -o %t 5// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t | FileCheck %s 6// RUN: ld.lld -shared %t1 %t2 -o %t3 7// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t3 | FileCheck --check-prefix=DSO %s 8// RUN: llvm-readobj -S -r %t3 | FileCheck -check-prefix=DSOREL %s 9 10// RUN: llvm-mc -filetype=obj -triple=armv7aeb-none-linux-gnueabi %p/Inputs/arm-plt-reloc.s -o %t1.be 11// RUN: llvm-mc -filetype=obj -triple=armv7aeb-none-linux-gnueabi %s -o %t2.be 12// RUN: ld.lld %t1.be %t2.be -o %t.be 13// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t.be | FileCheck %s 14// RUN: ld.lld -shared %t1.be %t2.be -o %t3.be 15// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t3.be | FileCheck --check-prefix=DSO %s 16// RUN: llvm-readobj -S -r %t3.be | FileCheck -check-prefix=DSOREL %s 17 18// RUN: ld.lld --be8 %t1.be %t2.be -o %t.be 19// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t.be | FileCheck %s 20// RUN: ld.lld --be8 -shared %t1.be %t2.be -o %t3.be 21// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t3.be | FileCheck --check-prefix=DSO %s 22// RUN: llvm-readobj -S -r %t3.be | FileCheck -check-prefix=DSOREL %s 23// 24// Test PLT entry generation 25 .syntax unified 26 .text 27 .align 2 28 .globl _start 29 .type _start,%function 30_start: 31 b func1 32 bl func2 33 beq func3 34 35// Executable, expect no PLT 36// CHECK: Disassembly of section .text: 37// CHECK-EMPTY: 38// CHECK-NEXT: <func1>: 39// CHECK-NEXT: 200b4: bx lr 40// CHECK: <func2>: 41// CHECK-NEXT: 200b8: bx lr 42// CHECK: <func3>: 43// CHECK-NEXT: 200bc: bx lr 44// CHECK: <_start>: 45// CHECK-NEXT: 200c0: b 0x200b4 <func1> 46// CHECK-NEXT: 200c4: bl 0x200b8 <func2> 47// CHECK-NEXT: 200c8: beq 0x200bc <func3> 48 49// Expect PLT entries as symbols can be preempted 50// The .got.plt and .plt displacement is small so we can use small PLT entries. 51// DSO: Disassembly of section .text: 52// DSO-EMPTY: 53// DSO-NEXT: <func1>: 54// DSO-NEXT: 10214: bx lr 55// DSO: <func2>: 56// DSO-NEXT: 10218: bx lr 57// DSO: <func3>: 58// DSO-NEXT: 1021c: bx lr 59// DSO: <_start>: 60// DSO-NEXT: 10220: b 0x10250 61// DSO-NEXT: 10224: bl 0x10260 62// DSO-NEXT: 10228: beq 0x10270 63// DSO-EMPTY: 64// DSO-NEXT: Disassembly of section .plt: 65// DSO-EMPTY: 66// DSO-NEXT: <.plt>: 67// DSO-NEXT: 10230: str lr, [sp, #-4]! 68// (0x10234 + 8) + (0 RoR 12) + (32 RoR 20 = 0x20000) + 164 = 0x302e0 = .got.plt[2] 69// DSO-NEXT: 10234: add lr, pc, #0, #12 70// DSO-NEXT: 10238: add lr, lr, #32, #20 71// DSO-NEXT: 1023c: ldr pc, [lr, #164]! 72// DSO-NEXT: 10240: d4 d4 d4 d4 .word 0xd4d4d4d4 73// DSO-NEXT: 10244: d4 d4 d4 d4 .word 0xd4d4d4d4 74// DSO-NEXT: 10248: d4 d4 d4 d4 .word 0xd4d4d4d4 75// DSO-NEXT: 1024c: d4 d4 d4 d4 .word 0xd4d4d4d4 76// (0x10250 + 8) + (0 RoR 12) + (32 RoR 20 = 0x20000) + 140 = 0x302e4 77// DSO-NEXT: 10250: add r12, pc, #0, #12 78// DSO-NEXT: 10254: add r12, r12, #32, #20 79// DSO-NEXT: 10258: ldr pc, [r12, #140]! 80// DSO-NEXT: 1025c: d4 d4 d4 d4 .word 0xd4d4d4d4 81// (0x10260 + 8) + (0 RoR 12) + (32 RoR 20 = 0x20000) + 128 = 0x302e8 82// DSO-NEXT: 10260: add r12, pc, #0, #12 83// DSO-NEXT: 10264: add r12, r12, #32, #20 84// DSO-NEXT: 10268: ldr pc, [r12, #128]! 85// DSO-NEXT: 1026c: d4 d4 d4 d4 .word 0xd4d4d4d4 86// (0x10270 + 8) + (0 RoR 12) + (32 RoR 20 = 0x20000) + 116 = 0x302ec 87// DSO-NEXT: 10270: add r12, pc, #0, #12 88// DSO-NEXT: 10274: add r12, r12, #32, #20 89// DSO-NEXT: 10278: ldr pc, [r12, #116]! 90// DSO-NEXT: 1027c: d4 d4 d4 d4 .word 0xd4d4d4d4 91 92 93// DSOREL: Name: .got.plt 94// DSOREL-NEXT: Type: SHT_PROGBITS 95// DSOREL-NEXT: Flags [ 96// DSOREL-NEXT: SHF_ALLOC 97// DSOREL-NEXT: SHF_WRITE 98// DSOREL-NEXT: ] 99// DSOREL-NEXT: Address: 0x302D8 100// DSOREL-NEXT: Offset: 101// DSOREL-NEXT: Size: 24 102// DSOREL-NEXT: Link: 103// DSOREL-NEXT: Info: 104// DSOREL-NEXT: AddressAlignment: 4 105// DSOREL-NEXT: EntrySize: 106// DSOREL: Relocations [ 107// DSOREL-NEXT: Section {{.*}} .rel.plt { 108// DSOREL-NEXT: 0x302E4 R_ARM_JUMP_SLOT func1 109// DSOREL-NEXT: 0x302E8 R_ARM_JUMP_SLOT func2 110// DSOREL-NEXT: 0x302EC R_ARM_JUMP_SLOT func3 111 112// Test a large separation between the .plt and .got.plt 113// The .got.plt and .plt displacement is large but still within the range 114// of the short plt sequence. 115// RUN: echo "SECTIONS { \ 116// RUN: .text 0x1000 : { *(.text) } \ 117// RUN: .plt 0x2000 : { *(.plt) *(.plt.*) } \ 118// RUN: .got.plt 0x1100000 : { *(.got.plt) } \ 119// RUN: }" > %t.script 120// RUN: ld.lld --hash-style=sysv --script %t.script -shared %t1 %t2 -o %t4 121// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t4 | FileCheck --check-prefix=CHECKHIGH %s 122// RUN: llvm-readobj -S -r %t4 | FileCheck --check-prefix=DSORELHIGH %s 123 124// RUN: ld.lld --hash-style=sysv --script %t.script -shared %t1.be %t2.be -o %t4.be 125// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t4.be | FileCheck --check-prefix=CHECKHIGH %s 126// RUN: llvm-readobj -S -r %t4.be | FileCheck --check-prefix=DSORELHIGH %s 127// RUN: ld.lld --be8 --hash-style=sysv --script %t.script -shared %t1.be %t2.be -o %t4.be 128// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t4.be | FileCheck --check-prefix=CHECKHIGH %s 129// RUN: llvm-readobj -S -r %t4.be | FileCheck --check-prefix=DSORELHIGH %s 130 131// CHECKHIGH: Disassembly of section .text: 132// CHECKHIGH-EMPTY: 133// CHECKHIGH-NEXT: <func1>: 134// CHECKHIGH-NEXT: 1000: bx lr 135// CHECKHIGH: <func2>: 136// CHECKHIGH-NEXT: 1004: bx lr 137// CHECKHIGH: <func3>: 138// CHECKHIGH-NEXT: 1008: bx lr 139// CHECKHIGH: <_start>: 140// CHECKHIGH-NEXT: 100c: b 0x2020 141// CHECKHIGH-NEXT: 1010: bl 0x2030 142// CHECKHIGH-NEXT: 1014: beq 0x2040 143// CHECKHIGH-EMPTY: 144// CHECKHIGH-NEXT: Disassembly of section .plt: 145// CHECKHIGH-EMPTY: 146// CHECKHIGH-NEXT: <.plt>: 147// CHECKHIGH-NEXT: 2000: str lr, [sp, #-4]! 148// CHECKHIGH-NEXT: 2004: add lr, pc, #16, #12 149// CHECKHIGH-NEXT: 2008: add lr, lr, #1036288 150// CHECKHIGH-NEXT: 200c: ldr pc, [lr, #4092]! 151// CHECKHIGH-NEXT: 2010: d4 d4 d4 d4 .word 0xd4d4d4d4 152// CHECKHIGH-NEXT: 2014: d4 d4 d4 d4 .word 0xd4d4d4d4 153// CHECKHIGH-NEXT: 2018: d4 d4 d4 d4 .word 0xd4d4d4d4 154// CHECKHIGH-NEXT: 201c: d4 d4 d4 d4 .word 0xd4d4d4d4 155// CHECKHIGH-NEXT: 2020: add r12, pc, #16, #12 156// CHECKHIGH-NEXT: 2024: add r12, r12, #1036288 157// CHECKHIGH-NEXT: 2028: ldr pc, [r12, #4068]! 158// CHECKHIGH-NEXT: 202c: d4 d4 d4 d4 .word 0xd4d4d4d4 159// CHECKHIGH-NEXT: 2030: add r12, pc, #16, #12 160// CHECKHIGH-NEXT: 2034: add r12, r12, #1036288 161// CHECKHIGH-NEXT: 2038: ldr pc, [r12, #4056]! 162// CHECKHIGH-NEXT: 203c: d4 d4 d4 d4 .word 0xd4d4d4d4 163// CHECKHIGH-NEXT: 2040: add r12, pc, #16, #12 164// CHECKHIGH-NEXT: 2044: add r12, r12, #1036288 165// CHECKHIGH-NEXT: 2048: ldr pc, [r12, #4044]! 166// CHECKHIGH-NEXT: 204c: d4 d4 d4 d4 .word 0xd4d4d4d4 167 168// DSORELHIGH: Name: .got.plt 169// DSORELHIGH-NEXT: Type: SHT_PROGBITS 170// DSORELHIGH-NEXT: Flags [ 171// DSORELHIGH-NEXT: SHF_ALLOC 172// DSORELHIGH-NEXT: SHF_WRITE 173// DSORELHIGH-NEXT: ] 174// DSORELHIGH-NEXT: Address: 0x1100000 175// DSORELHIGH: Relocations [ 176// DSORELHIGH-NEXT: Section {{.*}} .rel.plt { 177// DSORELHIGH-NEXT: 0x110000C R_ARM_JUMP_SLOT func1 178// DSORELHIGH-NEXT: 0x1100010 R_ARM_JUMP_SLOT func2 179// DSORELHIGH-NEXT: 0x1100014 R_ARM_JUMP_SLOT func3 180 181// Test a very large separation between the .plt and .got.plt so we must use 182// large plt entries that do not have any range restriction. 183// RUN: echo "SECTIONS { \ 184// RUN: .text 0x1000 : { *(.text) } \ 185// RUN: .plt 0x2000 : { *(.plt) *(.plt.*) } \ 186// RUN: .got.plt 0x11111100 : { *(.got.plt) } \ 187// RUN: }" > %t2.script 188// RUN: ld.lld --hash-style=sysv --script %t2.script -shared %t1 %t2 -o %t5 189// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t5 | FileCheck --check-prefix=CHECKLONG %s 190// RUN: llvm-readobj -S -r %t5 | FileCheck --check-prefix=DSORELLONG %s 191 192// RUN: ld.lld --hash-style=sysv --script %t2.script -shared %t1.be %t2.be -o %t5.be 193// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t5.be | FileCheck --check-prefix=CHECKLONG-EB %s 194// RUN: llvm-readobj -S -r %t5.be | FileCheck --check-prefix=DSORELLONG %s 195// RUN: ld.lld --be8 --hash-style=sysv --script %t2.script -shared %t1.be %t2.be -o %t5.be 196// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t5.be | FileCheck --check-prefix=CHECKLONG-EB %s 197// RUN: llvm-readobj -S -r %t5.be | FileCheck --check-prefix=DSORELLONG %s 198 199// CHECKLONG: Disassembly of section .text: 200// CHECKLONG-EMPTY: 201// CHECKLONG-NEXT: <func1>: 202// CHECKLONG-NEXT: 1000: bx lr 203// CHECKLONG: <func2>: 204// CHECKLONG-NEXT: 1004: bx lr 205// CHECKLONG: <func3>: 206// CHECKLONG-NEXT: 1008: bx lr 207// CHECKLONG: <_start>: 208// CHECKLONG-NEXT: 100c: b 0x2020 209// CHECKLONG-NEXT: 1010: bl 0x2030 210// CHECKLONG-NEXT: 1014: beq 0x2040 211// CHECKLONG-EMPTY: 212// CHECKLONG-NEXT: Disassembly of section .plt: 213// CHECKLONG-EMPTY: 214// CHECKLONG-NEXT: <.plt>: 215// CHECKLONG-NEXT: 2000: str lr, [sp, #-4]! 216// CHECKLONG-NEXT: 2004: ldr lr, [pc, #4] 217// CHECKLONG-NEXT: 2008: add lr, pc, lr 218// CHECKLONG-NEXT: 200c: ldr pc, [lr, #8]! 219// CHECKLONG-NEXT: 2010: f0 f0 10 11 .word 0x1110f0f0 220// CHECKLONG-NEXT: 2014: d4 d4 d4 d4 .word 0xd4d4d4d4 221// CHECKLONG-NEXT: 2018: d4 d4 d4 d4 .word 0xd4d4d4d4 222// CHECKLONG-NEXT: 201c: d4 d4 d4 d4 .word 0xd4d4d4d4 223// CHECKLONG-NEXT: 2020: ldr r12, [pc, #4] 224// CHECKLONG-NEXT: 2024: add r12, r12, pc 225// CHECKLONG-NEXT: 2028: ldr pc, [r12] 226// CHECKLONG-NEXT: 202c: e0 f0 10 11 .word 0x1110f0e0 227// CHECKLONG-NEXT: 2030: ldr r12, [pc, #4] 228// CHECKLONG-NEXT: 2034: add r12, r12, pc 229// CHECKLONG-NEXT: 2038: ldr pc, [r12] 230// CHECKLONG-NEXT: 203c: d4 f0 10 11 .word 0x1110f0d4 231// CHECKLONG-NEXT: 2040: ldr r12, [pc, #4] 232// CHECKLONG-NEXT: 2044: add r12, r12, pc 233// CHECKLONG-NEXT: 2048: ldr pc, [r12] 234// CHECKLONG-NEXT: 204c: c8 f0 10 11 .word 0x1110f0c8 235 236// CHECKLONG-EB: Disassembly of section .text: 237// CHECKLONG-EB-EMPTY: 238// CHECKLONG-EB-NEXT: <func1>: 239// CHECKLONG-EB-NEXT: 1000: bx lr 240// CHECKLONG-EB: <func2>: 241// CHECKLONG-EB-NEXT: bx lr 242// CHECKLONG-EB: <func3>: 243// CHECKLONG-EB-NEXT: bx lr 244// CHECKLONG-EB: <_start>: 245// CHECKLONG-EB-NEXT: b 0x2020 246// CHECKLONG-EB-NEXT: bl 0x2030 247// CHECKLONG-EB-NEXT: beq 0x2040 248// CHECKLONG-EB-EMPTY: 249// CHECKLONG-EB-NEXT: Disassembly of section .plt: 250// CHECKLONG-EB-EMPTY: 251// CHECKLONG-EB-NEXT: <.plt>: 252// CHECKLONG-EB-NEXT: 2000: str lr, [sp, #-4]! 253// CHECKLONG-EB-NEXT: ldr lr, [pc, #4] 254// CHECKLONG-EB-NEXT: add lr, pc, lr 255// CHECKLONG-EB-NEXT: ldr pc, [lr, #8]! 256// CHECKLONG-EB-NEXT: 11 10 f0 f0 .word 0x1110f0f0 257// CHECKLONG-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 258// CHECKLONG-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 259// CHECKLONG-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 260// CHECKLONG-EB-NEXT: 2020: ldr r12, [pc, #4] 261// CHECKLONG-EB-NEXT: add r12, r12, pc 262// CHECKLONG-EB-NEXT: ldr pc, [r12] 263// CHECKLONG-EB-NEXT: 11 10 f0 e0 .word 0x1110f0e0 264// CHECKLONG-EB-NEXT: 2030: ldr r12, [pc, #4] 265// CHECKLONG-EB-NEXT: add r12, r12, pc 266// CHECKLONG-EB-NEXT: ldr pc, [r12] 267// CHECKLONG-EB-NEXT: 11 10 f0 d4 .word 0x1110f0d4 268// CHECKLONG-EB-NEXT: 2040: ldr r12, [pc, #4] 269// CHECKLONG-EB-NEXT: add r12, r12, pc 270// CHECKLONG-EB-NEXT: ldr pc, [r12] 271// CHECKLONG-EB-NEXT: 11 10 f0 c8 .word 0x1110f0c8 272 273// DSORELLONG: Name: .got.plt 274// DSORELLONG-NEXT: Type: SHT_PROGBITS 275// DSORELLONG-NEXT: Flags [ 276// DSORELLONG-NEXT: SHF_ALLOC 277// DSORELLONG-NEXT: SHF_WRITE 278// DSORELLONG-NEXT: ] 279// DSORELLONG-NEXT: Address: 0x11111100 280// DSORELLONG: Relocations [ 281// DSORELLONG-NEXT: Section {{.*}} .rel.plt { 282// DSORELLONG-NEXT: 0x1111110C R_ARM_JUMP_SLOT func1 283// DSORELLONG-NEXT: 0x11111110 R_ARM_JUMP_SLOT func2 284// DSORELLONG-NEXT: 0x11111114 R_ARM_JUMP_SLOT func3 285 286// Test a separation between the .plt and .got.plt that is part in range of 287// short table entries and part needing long entries. We use the long entries 288// only when we need to. 289// RUN: echo "SECTIONS { \ 290// RUN: .text 0x1000 : { *(.text) } \ 291// RUN: .plt 0x2000 : { *(.plt) *(.plt.*) } \ 292// RUN: .got.plt 0x8002020 : { *(.got.plt) } \ 293// RUN: }" > %t3.script 294// RUN: ld.lld --hash-style=sysv --script %t3.script -shared %t1 %t2 -o %t6 295// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t6 | FileCheck --check-prefix=CHECKMIX %s 296// RUN: llvm-readobj -S -r %t6 | FileCheck --check-prefix=DSORELMIX %s 297 298// RUN: ld.lld --hash-style=sysv --script %t3.script -shared %t1.be %t2.be -o %t6.be 299// RUN: llvm-objdump --no-print-imm-hex --triple=armv7aeb-none-linux-gnueabi -d --no-show-raw-insn %t6.be | FileCheck --check-prefix=CHECKMIX-EB %s 300// RUN: llvm-readobj -S -r %t6.be | FileCheck --check-prefix=DSORELMIX %s 301// RUN: ld.lld --be8 --hash-style=sysv --script %t3.script -shared %t1.be %t2.be -o %t6.be 302// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t6.be | FileCheck --check-prefix=CHECKMIX-EB %s 303// RUN: llvm-readobj -S -r %t6.be | FileCheck --check-prefix=DSORELMIX %s 304 305// CHECKMIX: Disassembly of section .text: 306// CHECKMIX-EMPTY: 307// CHECKMIX-NEXT: <func1>: 308// CHECKMIX-NEXT: 1000: bx lr 309// CHECKMIX: <func2>: 310// CHECKMIX-NEXT: 1004: bx lr 311// CHECKMIX: <func3>: 312// CHECKMIX-NEXT: 1008: bx lr 313// CHECKMIX: <_start>: 314// CHECKMIX-NEXT: 100c: b 0x2020 315// CHECKMIX-NEXT: 1010: bl 0x2030 316// CHECKMIX-NEXT: 1014: beq 0x2040 317// CHECKMIX-EMPTY: 318// CHECKMIX-NEXT: Disassembly of section .plt: 319// CHECKMIX-EMPTY: 320// CHECKMIX-NEXT: <.plt>: 321// CHECKMIX-NEXT: 2000: str lr, [sp, #-4]! 322// CHECKMIX-NEXT: 2004: ldr lr, [pc, #4] 323// CHECKMIX-NEXT: 2008: add lr, pc, lr 324// CHECKMIX-NEXT: 200c: ldr pc, [lr, #8]! 325// CHECKMIX-NEXT: 2010: 10 00 00 08 .word 0x08000010 326// CHECKMIX-NEXT: 2014: d4 d4 d4 d4 .word 0xd4d4d4d4 327// CHECKMIX-NEXT: 2018: d4 d4 d4 d4 .word 0xd4d4d4d4 328// CHECKMIX-NEXT: 201c: d4 d4 d4 d4 .word 0xd4d4d4d4 329// CHECKMIX-NEXT: 2020: ldr r12, [pc, #4] 330// CHECKMIX-NEXT: 2024: add r12, r12, pc 331// CHECKMIX-NEXT: 2028: ldr pc, [r12] 332// CHECKMIX-NEXT: 202c: 00 00 00 08 .word 0x08000000 333// CHECKMIX-NEXT: 2030: add r12, pc, #133169152 334// CHECKMIX-NEXT: 2034: add r12, r12, #1044480 335// CHECKMIX-NEXT: 2038: ldr pc, [r12, #4088]! 336// CHECKMIX-NEXT: 203c: d4 d4 d4 d4 .word 0xd4d4d4d4 337// CHECKMIX-NEXT: 2040: add r12, pc, #133169152 338// CHECKMIX-NEXT: 2044: add r12, r12, #1044480 339// CHECKMIX-NEXT: 2048: ldr pc, [r12, #4076]! 340// CHECKMIX-NEXT: 204c: d4 d4 d4 d4 .word 0xd4d4d4d4 341 342// CHECKMIX-EB: Disassembly of section .text: 343// CHECKMIX-EB-EMPTY: 344// CHECKMIX-EB-NEXT: <func1>: 345// CHECKMIX-EB-NEXT: 1000: bx lr 346// CHECKMIX-EB: <func2>: 347// CHECKMIX-EB-NEXT: bx lr 348// CHECKMIX-EB: <func3>: 349// CHECKMIX-EB-NEXT: bx lr 350// CHECKMIX-EB: <_start>: 351// CHECKMIX-EB-NEXT: b 0x2020 352// CHECKMIX-EB-NEXT: bl 0x2030 353// CHECKMIX-EB-NEXT: beq 0x2040 354// CHECKMIX-EB-EMPTY: 355// CHECKMIX-EB-NEXT: Disassembly of section .plt: 356// CHECKMIX-EB-EMPTY: 357// CHECKMIX-EB-NEXT: <.plt>: 358// CHECKMIX-EB-NEXT: 2000: str lr, [sp, #-4]! 359// CHECKMIX-EB-NEXT: ldr lr, [pc, #4] 360// CHECKMIX-EB-NEXT: add lr, pc, lr 361// CHECKMIX-EB-NEXT: ldr pc, [lr, #8]! 362// CHECKMIX-EB-NEXT: 08 00 00 10 .word 0x08000010 363// CHECKMIX-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 364// CHECKMIX-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 365// CHECKMIX-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 366// CHECKMIX-EB-NEXT: 2020: ldr r12, [pc, #4] 367// CHECKMIX-EB-NEXT: add r12, r12, pc 368// CHECKMIX-EB-NEXT: ldr pc, [r12] 369// CHECKMIX-EB-NEXT: 08 00 00 00 .word 0x08000000 370// CHECKMIX-EB-NEXT: 2030: add r12, pc, #133169152 371// CHECKMIX-EB-NEXT: add r12, r12, #1044480 372// CHECKMIX-EB-NEXT: ldr pc, [r12, #4088]! 373// CHECKMIX-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 374// CHECKMIX-EB-NEXT: 2040: add r12, pc, #133169152 375// CHECKMIX-EB-NEXT: add r12, r12, #1044480 376// CHECKMIX-EB-NEXT: ldr pc, [r12, #4076]! 377// CHECKMIX-EB-NEXT: d4 d4 d4 d4 .word 0xd4d4d4d4 378 379// DSORELMIX: Name: .got.plt 380// DSORELMIX-NEXT: Type: SHT_PROGBITS 381// DSORELMIX-NEXT: Flags [ 382// DSORELMIX-NEXT: SHF_ALLOC 383// DSORELMIX-NEXT: SHF_WRITE 384// DSORELMIX-NEXT: ] 385// DSORELMIX-NEXT: Address: 0x8002020 386// DSORELMIX: Section {{.*}} .rel.plt { 387// DSORELMIX-NEXT: 0x800202C R_ARM_JUMP_SLOT func1 388// DSORELMIX-NEXT: 0x8002030 R_ARM_JUMP_SLOT func2 389// DSORELMIX-NEXT: 0x8002034 R_ARM_JUMP_SLOT func3 390 391