xref: /llvm-project/lld/test/MachO/load-command-sequence.s (revision bcbb3066ce8a6c7fdda8c72a0f51e0572172de8c)
1c3e4f3b2SGreg McGary# REQUIRES: x86
2c3e4f3b2SGreg McGary
3c3e4f3b2SGreg McGary# RUN: rm -rf %t && mkdir -p %t
4c3e4f3b2SGreg McGary# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o
5c3e4f3b2SGreg McGary# RUN: %lld -execute -o %t/exec %t/test.o -lSystem
6c3e4f3b2SGreg McGary# RUN: %lld -dylib -o %t/dylib %t/test.o -lSystem
7c3e4f3b2SGreg McGary# RUN: %lld -bundle -o %t/bundle %t/test.o -lSystem
8c3e4f3b2SGreg McGary
9c3e4f3b2SGreg McGary# RUN: llvm-objdump --macho --all-headers %t/exec | \
10c3e4f3b2SGreg McGary# RUN:     FileCheck %s --check-prefixes=EXEC,COMMON
11c3e4f3b2SGreg McGary# RUN: llvm-objdump --macho --all-headers %t/dylib | \
12c3e4f3b2SGreg McGary# RUN:     FileCheck %s --check-prefixes=DYLIB,COMMON
13c3e4f3b2SGreg McGary# RUN: llvm-objdump --macho --all-headers %t/bundle | \
14830ead58SFangrui Song# RUN:     FileCheck %s --check-prefix=COMMON
15c3e4f3b2SGreg McGary
16c3e4f3b2SGreg McGary## Check that load commands and sections within segments occur in the proper
17c3e4f3b2SGreg McGary## sequence. On ARM64 kernel is especially picky about layout, and will
18c3e4f3b2SGreg McGary## barf with errno=EBADMACHO when the sequence is wrong.
19c3e4f3b2SGreg McGary
20c3e4f3b2SGreg McGary# EXEC: cmd LC_SEGMENT_64
21c3e4f3b2SGreg McGary# EXEC: segname __PAGEZERO
22c3e4f3b2SGreg McGary
23c3e4f3b2SGreg McGary# COMMON: cmd LC_SEGMENT_64
24c3e4f3b2SGreg McGary# COMMON: segname __TEXT
25c3e4f3b2SGreg McGary# COMMON: sectname __text
26c3e4f3b2SGreg McGary# COMMON: segname __TEXT
27c3e4f3b2SGreg McGary# COMMON: sectname __cstring
28c3e4f3b2SGreg McGary# COMMON: segname __TEXT
29c3e4f3b2SGreg McGary# COMMON: cmd LC_SEGMENT_64
30c3e4f3b2SGreg McGary# COMMON: segname __DATA_CONST
31c3e4f3b2SGreg McGary# COMMON: sectname __got
32c3e4f3b2SGreg McGary# COMMON: segname __DATA_CONST
33fcab06bdSJez Ng# COMMON: sectname __const
34fcab06bdSJez Ng# COMMON: segname __DATA_CONST
35c3e4f3b2SGreg McGary# COMMON: cmd LC_SEGMENT_64
36c3e4f3b2SGreg McGary# COMMON: segname __DATA
37c3e4f3b2SGreg McGary# COMMON: sectname __data
38c3e4f3b2SGreg McGary# COMMON: segname __DATA
39c3e4f3b2SGreg McGary# COMMON: cmd LC_SEGMENT_64
40c3e4f3b2SGreg McGary# COMMON: segname __LINKEDIT
41c3e4f3b2SGreg McGary# COMMON: cmd LC_DYLD_INFO_ONLY
42c3e4f3b2SGreg McGary# COMMON: cmd LC_SYMTAB
43c3e4f3b2SGreg McGary# COMMON: cmd LC_DYSYMTAB
44c3e4f3b2SGreg McGary
45c3e4f3b2SGreg McGary# EXEC: cmd LC_LOAD_DYLINKER
46c3e4f3b2SGreg McGary# DYLIB: cmd LC_ID_DYLIB
47c3e4f3b2SGreg McGary
48c3e4f3b2SGreg McGary# COMMON: cmd LC_UUID
49fd28f718SJez Ng# COMMON: cmd LC_BUILD_VERSION
50*bcbb3066SNico Weber
51*bcbb3066SNico Weber# EXEC: cmd LC_MAIN
52*bcbb3066SNico Weber
53c3e4f3b2SGreg McGary# COMMON: cmd LC_LOAD_DYLIB
54c3e4f3b2SGreg McGary
55c3e4f3b2SGreg McGary.section __TEXT,__cstring
56c3e4f3b2SGreg McGary_str:
57c3e4f3b2SGreg McGary  .asciz "Help me! I'm trapped in a test!\n"
58c3e4f3b2SGreg McGary
59c3e4f3b2SGreg McGary.globl _mutable
60c3e4f3b2SGreg McGary.section __DATA,__data
61c3e4f3b2SGreg McGarymutable:
62c3e4f3b2SGreg McGary  .long 0x1234
63c3e4f3b2SGreg McGary
64c3e4f3b2SGreg McGary.globl _constant
65c3e4f3b2SGreg McGary.section __DATA,__const
66c3e4f3b2SGreg McGaryconstant:
67c3e4f3b2SGreg McGary  .long 0x4567
68c3e4f3b2SGreg McGary
69c3e4f3b2SGreg McGary.text
70c3e4f3b2SGreg McGary.global _main
71c3e4f3b2SGreg McGary_main:
72c3e4f3b2SGreg McGary  mov ___nan@GOTPCREL(%rip), %rax
73c3e4f3b2SGreg McGary  ret
74