244 lines · plain
1# REQUIRES: x862 3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t4# RUN: ld.lld %t -o %t25# RUN: llvm-readobj --file-headers --sections -l --symbols %t2 \6# RUN: | FileCheck %s7# RUN: ld.lld %t -o /dev/null8 9## exits with return code 42 on linux10.globl _start11_start:12 mov $60, %rax13 mov $42, %rdi14 syscall15 16# CHECK: ElfHeader {17# CHECK-NEXT: Ident {18# CHECK-NEXT: Magic: (7F 45 4C 46)19# CHECK-NEXT: Class: 64-bit (0x2)20# CHECK-NEXT: DataEncoding: LittleEndian (0x1)21# CHECK-NEXT: FileVersion: 122# CHECK-NEXT: OS/ABI: SystemV (0x0)23# CHECK-NEXT: ABIVersion: 024# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)25# CHECK-NEXT: }26# CHECK-NEXT: Type: Executable (0x2)27# CHECK-NEXT: Machine: EM_X86_64 (0x3E)28# CHECK-NEXT: Version: 129# CHECK-NEXT: Entry: [[ENTRY:0x[0-9A-F]+]]30# CHECK-NEXT: ProgramHeaderOffset: 0x4031# CHECK-NEXT: SectionHeaderOffset: 0x1A032# CHECK-NEXT: Flags [ (0x0)33# CHECK-NEXT: ]34# CHECK-NEXT: HeaderSize: 6435# CHECK-NEXT: ProgramHeaderEntrySize: 5636# CHECK-NEXT: ProgramHeaderCount: 437# CHECK-NEXT: SectionHeaderEntrySize: 6438# CHECK-NEXT: SectionHeaderCount: 639# CHECK-NEXT: StringTableSectionIndex: 440# CHECK-NEXT: }41# CHECK-NEXT: Sections [42# CHECK-NEXT: Section {43# CHECK-NEXT: Index: 044# CHECK-NEXT: Name: (0)45# CHECK-NEXT: Type: SHT_NULL (0x0)46# CHECK-NEXT: Flags [ (0x0)47# CHECK-NEXT: ]48# CHECK-NEXT: Address: 0x049# CHECK-NEXT: Offset: 0x050# CHECK-NEXT: Size: 051# CHECK-NEXT: Link: 052# CHECK-NEXT: Info: 053# CHECK-NEXT: AddressAlignment: 054# CHECK-NEXT: EntrySize: 055# CHECK-NEXT: }56# CHECK-NEXT: Section {57# CHECK-NEXT: Index: 158# CHECK-NEXT: Name: .text59# CHECK-NEXT: Type: SHT_PROGBITS (0x1)60# CHECK-NEXT: Flags [ (0x6)61# CHECK-NEXT: SHF_ALLOC (0x2)62# CHECK-NEXT: SHF_EXECINSTR (0x4)63# CHECK-NEXT: ]64# CHECK-NEXT: Address: 0x20112065# CHECK-NEXT: Offset: 0x12066# CHECK-NEXT: Size: 1667# CHECK-NEXT: Link: 068# CHECK-NEXT: Info: 069# CHECK-NEXT: AddressAlignment: 470# CHECK-NEXT: EntrySize: 071# CHECK-NEXT: }72# CHECK-NEXT: Section {73# CHECK-NEXT: Index: 274# CHECK-NEXT: Name: .comment75# CHECK-NEXT: Type: SHT_PROGBITS (0x1)76# CHECK-NEXT: Flags [ (0x30)77# CHECK-NEXT: SHF_MERGE (0x10)78# CHECK-NEXT: SHF_STRINGS (0x20)79# CHECK-NEXT: ]80# CHECK-NEXT: Address: 0x081# CHECK-NEXT: Offset: 0x13082# CHECK-NEXT: Size: 883# CHECK-NEXT: Link: 084# CHECK-NEXT: Info: 085# CHECK-NEXT: AddressAlignment: 186# CHECK-NEXT: EntrySize: 187# CHECK-NEXT: }88# CHECK-NEXT: Section {89# CHECK-NEXT: Index: 390# CHECK-NEXT: Name: .symtab91# CHECK-NEXT: Type: SHT_SYMTAB (0x2)92# CHECK-NEXT: Flags [ (0x0)93# CHECK-NEXT: ]94# CHECK-NEXT: Address: 0x095# CHECK-NEXT: Offset: 0x13896# CHECK-NEXT: Size: 4897# CHECK-NEXT: Link: 598# CHECK-NEXT: Info: 199# CHECK-NEXT: AddressAlignment: 8100# CHECK-NEXT: EntrySize: 24101# CHECK-NEXT: }102# CHECK-NEXT: Section {103# CHECK-NEXT: Index: 4104# CHECK-NEXT: Name: .shstrtab105# CHECK-NEXT: Type: SHT_STRTAB (0x3)106# CHECK-NEXT: Flags [ (0x0)107# CHECK-NEXT: ]108# CHECK-NEXT: Address: 0x0109# CHECK-NEXT: Offset: 0x168110# CHECK-NEXT: Size: 42111# CHECK-NEXT: Link: 0112# CHECK-NEXT: Info: 0113# CHECK-NEXT: AddressAlignment: 1114# CHECK-NEXT: EntrySize: 0115# CHECK-NEXT: }116# CHECK-NEXT: Section {117# CHECK-NEXT: Index: 5118# CHECK-NEXT: Name: .strtab119# CHECK-NEXT: Type: SHT_STRTAB (0x3)120# CHECK-NEXT: Flags [ (0x0)121# CHECK-NEXT: ]122# CHECK-NEXT: Address: 0x0123# CHECK-NEXT: Offset: 0x192124# CHECK-NEXT: Size: 8125# CHECK-NEXT: Link: 0126# CHECK-NEXT: Info: 0127# CHECK-NEXT: AddressAlignment: 1128# CHECK-NEXT: EntrySize: 0129# CHECK-NEXT: }130# CHECK-NEXT: ]131# CHECK-NEXT: ProgramHeaders [132# CHECK-NEXT: ProgramHeader {133# CHECK-NEXT: Type: PT_PHDR (0x6)134# CHECK-NEXT: Offset: 0x40135# CHECK-NEXT: VirtualAddress: 0x200040136# CHECK-NEXT: PhysicalAddress: 0x200040137# CHECK-NEXT: FileSize: 224138# CHECK-NEXT: MemSize: 224139# CHECK-NEXT: Flags [ (0x4)140# CHECK-NEXT: PF_R (0x4)141# CHECK-NEXT: ]142# CHECK-NEXT: Alignment: 8143# CHECK-NEXT: }144# CHECK-NEXT: ProgramHeader {145# CHECK-NEXT: Type: PT_LOAD (0x1)146# CHECK-NEXT: Offset: 0x0147# CHECK-NEXT: VirtualAddress: 0x200000148# CHECK-NEXT: PhysicalAddress: 0x200000149# CHECK-NEXT: FileSize: 288150# CHECK-NEXT: MemSize: 288151# CHECK-NEXT: Flags [152# CHECK-NEXT: PF_R153# CHECK-NEXT: ]154# CHECK-NEXT: Alignment: 4096155# CHECK-NEXT: }156# CHECK-NEXT: ProgramHeader {157# CHECK-NEXT: Type: PT_LOAD (0x1)158# CHECK-NEXT: Offset: 0x120159# CHECK-NEXT: VirtualAddress: 0x201120160# CHECK-NEXT: PhysicalAddress: 0x201120161# CHECK-NEXT: FileSize: 16162# CHECK-NEXT: MemSize: 16163# CHECK-NEXT: Flags [ (0x5)164# CHECK-NEXT: PF_R (0x4)165# CHECK-NEXT: PF_X (0x1)166# CHECK-NEXT: ]167# CHECK-NEXT: Alignment: 4096168# CHECK-NEXT: }169# CHECK-NEXT: ProgramHeader {170# CHECK-NEXT: Type: PT_GNU_STACK171# CHECK-NEXT: Offset: 0x0172# CHECK-NEXT: VirtualAddress: 0x0173# CHECK-NEXT: PhysicalAddress: 0x0174# CHECK-NEXT: FileSize: 0175# CHECK-NEXT: MemSize: 0176# CHECK-NEXT: Flags [177# CHECK-NEXT: PF_R178# CHECK-NEXT: PF_W179# CHECK-NEXT: ]180# CHECK-NEXT: Alignment: 0181# CHECK-NEXT: }182# CHECK-NEXT: ]183# CHECK-NEXT: Symbols [184# CHECK-NEXT: Symbol {185# CHECK-NEXT: Name: (0)186# CHECK-NEXT: Value: 0x0187# CHECK-NEXT: Size: 0188# CHECK-NEXT: Binding: Local (0x0)189# CHECK-NEXT: Type: None (0x0)190# CHECK-NEXT: Other: 0191# CHECK-NEXT: Section: Undefined (0x0)192# CHECK-NEXT: }193# CHECK-NEXT: Symbol {194# CHECK-NEXT: Name: _start195# CHECK-NEXT: Value: [[ENTRY]]196# CHECK-NEXT: Size: 0197# CHECK-NEXT: Binding: Global (0x1)198# CHECK-NEXT: Type: None (0x0)199# CHECK-NEXT: Other: 0200# CHECK-NEXT: Section: .text201# CHECK-NEXT: }202# CHECK-NEXT: ]203 204## Test for the response file (POSIX quoting style)205# RUN: echo " -o %t2" > %t.responsefile206# RUN: ld.lld %t --rsp-quoting=posix @%t.responsefile207# RUN: llvm-readobj --file-headers --sections -l --symbols %t2 \208# RUN: | FileCheck %s209 210## Test for the response file (Windows quoting style)211# RUN: echo " c:\blah\foo" > %t.responsefile212# RUN: not ld.lld --rsp-quoting=windows %t @%t.responsefile 2>&1 | FileCheck \213# RUN: %s --check-prefix=WINRSP214# WINRSP: cannot open c:\blah\foo215 216## Test for the response file (invalid quoting style)217# RUN: not ld.lld --rsp-quoting=patatino %t 2>&1 | FileCheck %s \218# RUN: --check-prefix=INVRSP219# INVRSP: invalid response file quoting: patatino220 221## Test erroring on a recursive response file, but only once.222# RUN: echo @%t.responsefile > %t.responsefile223# RUN: env LLD_IN_TEST=1 not ld.lld %t @%t.responsefile 2>&1 | FileCheck %s --check-prefix=RECRSP224# RECRSP: recursive expansion of: '{{.*}}.responsefile'225# RECRSP-NOT: recursive expansion of226 227# RUN: not ld.lld %t.foo -o /dev/null 2>&1 | \228# RUN: FileCheck -DMSG=%errc_ENOENT --check-prefix=MISSING %s229# MISSING: cannot open {{.*}}.foo: [[MSG]]230 231# RUN: not ld.lld -o /dev/null 2>&1 | \232# RUN: FileCheck --check-prefix=NO_INPUT %s233# NO_INPUT: ld.lld{{.*}}: no input files234 235# RUN: not ld.lld %t.no.such.file -o /dev/null 2>&1 | \236# RUN: FileCheck -DMSG=%errc_ENOENT --check-prefix=CANNOT_OPEN %s237# CANNOT_OPEN: cannot open {{.*}}.no.such.file: [[MSG]]238 239# RUN: not ld.lld --foo 2>&1 | FileCheck --check-prefix=UNKNOWN %s240# UNKNOWN: unknown argument '--foo'241 242# RUN: not ld.lld %t -o /dev/null -m wrong_emul_fbsd 2>&1 | FileCheck --check-prefix=UNKNOWN_EMUL %s243# UNKNOWN_EMUL: unknown emulation: wrong_emul_fbsd244