140 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o3// RUN: ld.lld %t.o -o %t4// RUN: llvm-objdump --no-print-imm-hex --triple=armv7a-none-linux-gnueabi -d --no-show-raw-insn %t | FileCheck %s --check-prefix=DISASM5// RUN: llvm-readobj -r --symbols --sections %t | FileCheck %s6 .syntax unified7 .text8 .globl bar, foo9 .type foo STT_GNU_IFUNC10foo:11 bx lr12 13 .type bar STT_GNU_IFUNC14bar:15 bx lr16 17 .globl _start18_start:19 bl foo20 bl bar21 movw r0,:lower16:__rel_iplt_start22 movt r0,:upper16:__rel_iplt_start23 movw r0,:lower16:__rel_iplt_end24 movt r0,:upper16:__rel_iplt_end25 26// CHECK: Sections [27// CHECK: Section {28// CHECK: Section {29// CHECK: Name: .rel.dyn30// CHECK-NEXT: Type: SHT_REL31// CHECK-NEXT: Flags [32// CHECK-NEXT: SHF_ALLOC33// CHECK-NEXT: ]34// CHECK-NEXT: Address: 0x100F435// CHECK-NEXT: Offset: 0xF436// CHECK-NEXT: Size: 1637// CHECK-NEXT: Link:38// CHECK-NEXT: Info: 039// CHECK: Name: .iplt40// CHECK-NEXT: Type: SHT_PROGBITS41// CHECK-NEXT: Flags [42// CHECK-NEXT: SHF_ALLOC43// CHECK-NEXT: SHF_EXECINSTR44// CHECK-NEXT: ]45// CHECK-NEXT: Address: 0x2013046// CHECK-NEXT: Offset: 0x13047// CHECK-NEXT: Size: 3248// CHECK: Index: 449// CHECK-NEXT: Name: .got50// CHECK-NEXT: Type: SHT_PROGBITS51// CHECK-NEXT: Flags [52// CHECK-NEXT: SHF_ALLOC53// CHECK-NEXT: SHF_WRITE54// CHECK-NEXT: ]55// CHECK-NEXT: Address: 0x3015056// CHECK-NEXT: Offset: 0x15057// CHECK-NEXT: Size: 858// CHECK: Relocations [59// CHECK-NEXT: Section (1) .rel.dyn {60// CHECK-NEXT: 0x30150 R_ARM_IRELATIVE61// CHECK-NEXT: 0x30154 R_ARM_IRELATIVE62// CHECK-NEXT: }63// CHECK-NEXT: ]64// CHECK: Name: __rel_iplt_start65// CHECK-NEXT: Value: 0x100F466// CHECK-NEXT: Size: 067// CHECK-NEXT: Binding: Local68// CHECK-NEXT: Type: None69// CHECK-NEXT: Other [70// CHECK-NEXT: STV_HIDDEN71// CHECK-NEXT: ]72// CHECK-NEXT: Section: .rel.dyn73// CHECK-NEXT: }74// CHECK-NEXT: Symbol {75// CHECK-NEXT: Name: __rel_iplt_end76// CHECK-NEXT: Value: 0x1010477// CHECK-NEXT: Size: 078// CHECK-NEXT: Binding: Local79// CHECK-NEXT: Type: None80// CHECK-NEXT: Other [81// CHECK-NEXT: STV_HIDDEN82// CHECK-NEXT: ]83// CHECK-NEXT: Section: .rel.dyn84// CHECK-NEXT: }85// CHECK-NEXT: Symbol {86// CHECK-NEXT: Name: bar87// CHECK-NEXT: Value: 0x2010888// CHECK-NEXT: Size: 089// CHECK-NEXT: Binding: Global90// CHECK-NEXT: Type: GNU_IFunc91// CHECK-NEXT: Other: 092// CHECK-NEXT: Section: .text93// CHECK-NEXT: }94// CHECK-NEXT: Symbol {95// CHECK-NEXT: Name: foo96// CHECK-NEXT: Value: 0x2010497// CHECK-NEXT: Size: 098// CHECK-NEXT: Binding: Global99// CHECK-NEXT: Type: GNU_IFunc100// CHECK-NEXT: Other: 0101// CHECK-NEXT: Section: .text102// CHECK-NEXT: }103// CHECK-NEXT: Symbol {104// CHECK-NEXT: Name: _start105// CHECK-NEXT: Value: 0x2010C106// CHECK-NEXT: Size: 0107// CHECK-NEXT: Binding: Global108// CHECK-NEXT: Type: None109// CHECK-NEXT: Other:110// CHECK-NEXT: Section: .text111// CHECK-NEXT: }112 113// DISASM: Disassembly of section .text:114// DISASM-EMPTY:115// DISASM-NEXT: <foo>:116// DISASM-NEXT: 20104: bx lr117// DISASM: <bar>:118// DISASM-NEXT: 20108: bx lr119// DISASM: <_start>:120// DISASM-NEXT: 2010c: bl 0x20140121// DISASM-NEXT: 20110: bl 0x20130122// 1 * 65536 + 244 = 0x100f4 __rel_iplt_start123// DISASM-NEXT: 20114: movw r0, #244124// DISASM-NEXT: 20118: movt r0, #1125// 1 * 65536 + 260 = 0x10104 __rel_iplt_end126// DISASM-NEXT: 2011c: movw r0, #260127// DISASM-NEXT: 20120: movt r0, #1128// DISASM-EMPTY:129// DISASM-NEXT: Disassembly of section .iplt:130// DISASM-EMPTY:131// DISASM-NEXT: <.iplt>:132// DISASM-NEXT: 20130: add r12, pc, #0, #12133// DISASM-NEXT: 20134: add r12, r12, #16134// DISASM-NEXT: 20138: ldr pc, [r12, #24]!135// DISASM-NEXT: 2013c: d4 d4 d4 d4 .word 0xd4d4d4d4136// DISASM-NEXT: 20140: add r12, pc, #0, #12137// DISASM-NEXT: 20144: add r12, r12, #16138// DISASM-NEXT: 20148: ldr pc, [r12, #12]!139// DISASM-NEXT: 2014c: d4 d4 d4 d4 .word 0xd4d4d4d4140