177 lines · plain
1// REQUIRES: x862// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o3// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o4// RUN: ld.lld -shared %t2.o -soname=t2.so -o %t2.so5// RUN: ld.lld %t.o %t2.so -o %t6// RUN: llvm-readobj -S -r %t | FileCheck %s7// RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex %t | FileCheck --check-prefix=DISASM %s8// RUN: ld.lld -shared %t.o %t2.so -o %t9// RUN: llvm-readobj -S -r %t | FileCheck --check-prefix=CHECKSHARED %s10// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t | FileCheck --check-prefix=DISASMSHARED %s11// RUN: ld.lld -pie %t.o %t2.so -o %t12// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t | FileCheck --check-prefix=DISASMPIE %s13 14// CHECK: Name: .plt15// CHECK-NEXT: Type: SHT_PROGBITS16// CHECK-NEXT: Flags [17// CHECK-NEXT: SHF_ALLOC18// CHECK-NEXT: SHF_EXECINSTR19// CHECK-NEXT: ]20// CHECK-NEXT: Address: 0x4011E021// CHECK-NEXT: Offset:22// CHECK-NEXT: Size: 4823// CHECK-NEXT: Link: 024// CHECK-NEXT: Info: 025// CHECK-NEXT: AddressAlignment: 1626 27// CHECK: Name: .got.plt28// CHECK-NEXT: Type: SHT_PROGBITS29// CHECK-NEXT: Flags [30// CHECK-NEXT: SHF_ALLOC31// CHECK-NEXT: SHF_WRITE32// CHECK-NEXT: ]33// CHECK-NEXT: Address: 0x40327834// CHECK-NEXT: Offset: 0x27835// CHECK-NEXT: Size: 2036// CHECK-NEXT: Link: 037// CHECK-NEXT: Info: 038// CHECK-NEXT: AddressAlignment: 439// CHECK-NEXT: EntrySize: 040 41// First 3 slots of .got.plt are reserved.42// &.got.plt[3] = 0x403278 + 12 = 0x40328443// &.got.plt[4] = 0x403278 + 16 = 0x40328844// CHECK: Relocations [45// CHECK-NEXT: Section ({{.*}}) .rel.plt {46// CHECK-NEXT: 0x403284 R_386_JUMP_SLOT bar47// CHECK-NEXT: 0x403288 R_386_JUMP_SLOT zed48// CHECK-NEXT: }49// CHECK-NEXT: ]50 51// DISASM: <local>:52// DISASM-NEXT: 4011bc:53// DISASM-NEXT: 4011be:54// DISASM: <_start>:55// DISASM-NEXT: 4011c0: jmp 0x4011f0 <bar@plt>56// DISASM-NEXT: 4011c5: jmp 0x4011f0 <bar@plt>57// DISASM-NEXT: 4011ca: jmp 0x401200 <zed@plt>58// DISASM-NEXT: 4011cf: jmp 0x4011bc <local>59 60// DISASM: Disassembly of section .plt:61// DISASM-EMPTY:62// DISASM-NEXT: <.plt>:63/// Push .got.plt[1], then jump to .got.plt[2]64// DISASM-NEXT: 4011e0: pushl 0x40327c65// DISASM-NEXT: jmpl *0x40328066// DISASM-NEXT: nop67// DISASM-NEXT: nop68// DISASM-NEXT: nop69// DISASM-NEXT: nop70// DISASM-EMPTY:71// DISASM-NEXT: <bar@plt>:72/// .got.plt[3] = 0x403278 + 12 = 0x40328473// DISASM-NEXT: 4011f0: jmpl *0x40328474// DISASM-NEXT: pushl $0x075// DISASM-NEXT: jmp 0x4011e0 <.plt>76// DISASM-EMPTY:77// DISASM-NEXT: <zed@plt>:78/// .got.plt[4] = 0x403278 + 16 = 0x40328879// DISASM-NEXT: 401200: jmpl *0x40328880// DISASM-NEXT: pushl $0x881// DISASM-NEXT: jmp 0x4011e0 <.plt>82 83// CHECKSHARED: Name: .plt84// CHECKSHARED-NEXT: Type: SHT_PROGBITS85// CHECKSHARED-NEXT: Flags [86// CHECKSHARED-NEXT: SHF_ALLOC87// CHECKSHARED-NEXT: SHF_EXECINSTR88// CHECKSHARED-NEXT: ]89// CHECKSHARED-NEXT: Address: 0x120090// CHECKSHARED-NEXT: Offset: 0x20091// CHECKSHARED-NEXT: Size: 4892// CHECKSHARED-NEXT: Link: 093// CHECKSHARED-NEXT: Info: 094// CHECKSHARED-NEXT: AddressAlignment: 1695// CHECKSHARED-NEXT: EntrySize: 096// CHECKSHARED-NEXT: }97// CHECKSHARED: Name: .got.plt98// CHECKSHARED-NEXT: Type: SHT_PROGBITS99// CHECKSHARED-NEXT: Flags [100// CHECKSHARED-NEXT: SHF_ALLOC101// CHECKSHARED-NEXT: SHF_WRITE102// CHECKSHARED-NEXT: ]103// CHECKSHARED-NEXT: Address: 0x3290104// CHECKSHARED-NEXT: Offset: 0x290105// CHECKSHARED-NEXT: Size: 20106// CHECKSHARED-NEXT: Link: 0107// CHECKSHARED-NEXT: Info: 0108// CHECKSHARED-NEXT: AddressAlignment: 4109// CHECKSHARED-NEXT: EntrySize: 0110// CHECKSHARED-NEXT: }111 112// 0x3000 + got.plt.reserved(12) = 0x300C113// 0x3000 + got.plt.reserved(12) + 4 = 0x3010114// CHECKSHARED: Relocations [115// CHECKSHARED-NEXT: Section ({{.*}}) .rel.plt {116// CHECKSHARED-NEXT: 0x329C R_386_JUMP_SLOT bar117// CHECKSHARED-NEXT: 0x32A0 R_386_JUMP_SLOT zed118// CHECKSHARED-NEXT: }119// CHECKSHARED-NEXT: ]120 121// DISASMSHARED: <local>:122// DISASMSHARED-NEXT: 11e0:123// DISASMSHARED-NEXT: 11e2:124// DISASMSHARED: <_start>:125// DISASMSHARED-NEXT: 11e4: jmp 0x1210 <bar@plt>126// DISASMSHARED-NEXT: jmp 0x1210 <bar@plt>127// DISASMSHARED-NEXT: jmp 0x1220 <zed@plt>128// DISASMSHARED-NEXT: jmp 0x11e0 <local>129// DISASMSHARED-EMPTY:130// DISASMSHARED-NEXT: Disassembly of section .plt:131// DISASMSHARED-EMPTY:132// DISASMSHARED-NEXT: <.plt>:133// DISASMSHARED-NEXT: 1200: pushl 4(%ebx)134// DISASMSHARED-NEXT: jmpl *8(%ebx)135// DISASMSHARED-NEXT: nop136// DISASMSHARED-NEXT: nop137// DISASMSHARED-NEXT: nop138// DISASMSHARED-NEXT: nop139// DISASMSHARED: <bar@plt>:140// DISASMSHARED-NEXT: 1210: jmpl *12(%ebx)141// DISASMSHARED-NEXT: pushl $0142// DISASMSHARED-NEXT: jmp 0x1200 <.plt>143// DISASMSHARED: <zed@plt>:144// DISASMSHARED-NEXT: 1220: jmpl *16(%ebx)145// DISASMSHARED-NEXT: pushl $8146// DISASMSHARED-NEXT: jmp 0x1200 <.plt>147 148// DISASMPIE: Disassembly of section .plt:149// DISASMPIE-EMPTY:150// DISASMPIE-NEXT: <.plt>:151// DISASMPIE-NEXT: 11e0: pushl 4(%ebx)152// DISASMPIE-NEXT: jmpl *8(%ebx)153// DISASMPIE-NEXT: nop154// DISASMPIE-NEXT: nop155// DISASMPIE-NEXT: nop156// DISASMPIE-NEXT: nop157// DISASMPIE-EMPTY:158// DISASMPIE-NEXT: <bar@plt>:159// DISASMPIE-NEXT: 11f0: jmpl *12(%ebx)160// DISASMPIE-NEXT: pushl $0161// DISASMPIE-NEXT: jmp 0x11e0 <.plt>162// DISASMPIE-EMPTY:163// DISASMPIE-NEXT: <zed@plt>:164// DISASMPIE-NEXT: 1200: jmpl *16(%ebx)165// DISASMPIE-NEXT: pushl $8166// DISASMPIE-NEXT: jmp 0x11e0 <.plt>167 168local:169.long 0170 171.global _start172_start:173 jmp bar@PLT174 jmp bar@PLT175 jmp zed@PLT176 jmp local@plt177