155 lines · plain
1// REQUIRES: x862// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o3// RUN: ld.lld -static %t.o -o %tout4// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %tout | FileCheck %s --check-prefix=DISASM5// RUN: llvm-readobj -r --symbols --sections %tout | FileCheck %s6 7// CHECK: Sections [8// CHECK: Section {9// CHECK: Index: 110// CHECK-NEXT: Name: .rel.dyn11// CHECK-NEXT: Type: SHT_REL12// CHECK-NEXT: Flags [13// CHECK-NEXT: SHF_ALLOC14// CHECK-NEXT: ]15// CHECK-NEXT: Address: [[RELA:.*]]16// CHECK-NEXT: Offset: 0xD417// CHECK-NEXT: Size: 1618// CHECK-NEXT: Link: 019// CHECK-NEXT: Info: 020// CHECK-NEXT: AddressAlignment: 421// CHECK-NEXT: EntrySize: 822// CHECK-NEXT: }23// CHECK: Relocations [24// CHECK-NEXT: Section ({{.*}}) .rel.dyn {25// CHECK-NEXT: 0x402120 R_386_IRELATIVE26// CHECK-NEXT: 0x402124 R_386_IRELATIVE27// CHECK-NEXT: }28// CHECK-NEXT: ]29 30// CHECK: Symbols [31// CHECK-NEXT: Symbol {32// CHECK-NEXT: Name:33// CHECK-NEXT: Value: 0x034// CHECK-NEXT: Size: 035// CHECK-NEXT: Binding: Local36// CHECK-NEXT: Type: None37// CHECK-NEXT: Other: 038// CHECK-NEXT: Section: Undefined39// CHECK-NEXT: }40// CHECK-NEXT: Symbol {41// CHECK-NEXT: Name: __rel_iplt_start42// CHECK-NEXT: Value: [[RELA]]43// CHECK-NEXT: Size: 044// CHECK-NEXT: Binding: Local45// CHECK-NEXT: Type: None46// CHECK-NEXT: Other [47// CHECK-NEXT: STV_HIDDEN48// CHECK-NEXT: ]49// CHECK-NEXT: Section: .rel.dyn50// CHECK-NEXT: }51// CHECK-NEXT: Symbol {52// CHECK-NEXT: Name: __rel_iplt_end53// CHECK-NEXT: Value: 0x4000E454// CHECK-NEXT: Size: 055// CHECK-NEXT: Binding: Local56// CHECK-NEXT: Type: None57// CHECK-NEXT: Other [58// CHECK-NEXT: STV_HIDDEN59// CHECK-NEXT: ]60// CHECK-NEXT: Section: .rel.dyn61// CHECK-NEXT: }62// CHECK-NEXT: Symbol {63// CHECK-NEXT: Name: bar64// CHECK-NEXT: Value: 0x40110065// CHECK-NEXT: Size: 066// CHECK-NEXT: Binding: Global67// CHECK-NEXT: Type: Function68// CHECK-NEXT: Other: 069// CHECK-NEXT: Section: .iplt70// CHECK-NEXT: }71// CHECK-NEXT: Symbol {72// CHECK-NEXT: Name: bar_resolver73// CHECK-NEXT: Value: 0x4010E474// CHECK-NEXT: Size: 075// CHECK-NEXT: Binding: Global76// CHECK-NEXT: Type: Function77// CHECK-NEXT: Other: 078// CHECK-NEXT: Section: .text79// CHECK-NEXT: }80// CHECK-NEXT: Symbol {81// CHECK-NEXT: Name: foo82// CHECK-NEXT: Value: 0x40111083// CHECK-NEXT: Size: 084// CHECK-NEXT: Binding: Global85// CHECK-NEXT: Type: Function86// CHECK-NEXT: Other: 087// CHECK-NEXT: Section: .iplt88// CHECK-NEXT: }89// CHECK-NEXT: Symbol {90// CHECK-NEXT: Name: foo_resolver91// CHECK-NEXT: Value: 0x4010E592// CHECK-NEXT: Size: 093// CHECK-NEXT: Binding: Global94// CHECK-NEXT: Type: Function95// CHECK-NEXT: Other: 096// CHECK-NEXT: Section: .text97// CHECK-NEXT: }98// CHECK-NEXT: Symbol {99// CHECK-NEXT: Name: _start100// CHECK-NEXT: Value: 0x4010E6101// CHECK-NEXT: Size: 0102// CHECK-NEXT: Binding: Global103// CHECK-NEXT: Type: None104// CHECK-NEXT: Other: 0105// CHECK-NEXT: Section: .text106// CHECK-NEXT: }107// CHECK-NEXT:]108 109// DISASM: Disassembly of section .text:110// DISASM-EMPTY:111// DISASM-NEXT: <bar_resolver>:112// DISASM-NEXT: 4010e4: retl113// DISASM: <foo_resolver>:114// DISASM-NEXT: 4010e5: retl115// DISASM: <_start>:116// DISASM-NEXT: 4010e6: calll 0x401110 <foo>117// DISASM-NEXT: calll 0x401100 <bar>118// DISASM-NEXT: movl $4194516, %edx119// DISASM-NEXT: movl $4194532, %edx120// DISASM-EMPTY:121// DISASM-NEXT: Disassembly of section .iplt:122// DISASM-EMPTY:123// DISASM-NEXT: <bar>:124// DISASM-NEXT: 401100: jmpl *4202784125// DISASM-NEXT: pushl $0126// DISASM-NEXT: jmp 0x0127// DISASM: <foo>:128// DISASM-NEXT: 401110: jmpl *4202788129// DISASM-NEXT: pushl $8130// DISASM-NEXT: jmp 0x0131 132.type bar STT_GNU_IFUNC133.globl bar134bar:135.type bar_resolver STT_FUNC136.globl bar_resolver137bar_resolver:138 ret139 140.text141.type foo STT_GNU_IFUNC142.globl foo143foo:144.type foo_resolver STT_FUNC145.globl foo_resolver146foo_resolver:147 ret148 149.globl _start150_start:151 call foo152 call bar153 movl $__rel_iplt_start,%edx154 movl $__rel_iplt_end,%edx155