xref: /llvm-project/lld/test/MachO/data-in-code.s (revision 624ea349d7fa3535760a21a05c9998c7978228a4)
1# REQUIRES: x86
2
3# RUN: rm -rf %t; split-file %s %t
4
5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o
6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/bar.s -o %t/bar.o
7# RUN: %lld -lSystem %t/foo.o %t/bar.o -o %t/main.exe
8# RUN: llvm-otool -l %t/main.exe > %t/objdump
9# RUN: llvm-otool -Gv %t/main.exe >> %t/objdump
10# RUN: FileCheck %s < %t/objdump
11
12# CHECK-LABEL:  sectname __text
13# CHECK-NEXT:   segname __TEXT
14# CHECK-NEXT:   addr
15# CHECK-NEXT:   size
16# CHECK-NEXT:   offset [[#%,TEXT:]]
17
18# CHECK-LABEL:  cmd LC_DATA_IN_CODE
19# CHECK-NEXT:   cmdsize 16
20# CHECK-NEXT:   dataoff
21# CHECK-NEXT:   datasize 24
22
23# CHECK-LABEL:  Data in code table (3 entries)
24# CHECK-NEXT:   offset length kind
25# CHECK-NEXT:   [[#%x,TEXT + 28]] 24 JUMP_TABLE32
26# CHECK-NEXT:   [[#%x,TEXT + 68]] 8 JUMP_TABLE32
27# CHECK-NEXT:   [[#%x,TEXT + 84]] 12 JUMP_TABLE32
28
29# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -o %t/main.exe
30# RUN: llvm-otool -l %t/main.exe | FileCheck --check-prefix=OMIT %s
31
32# OMIT-NOT: LC_DATA_IN_CODE
33
34# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -data_in_code_info -o %t/main.exe
35# RUN: llvm-otool -l %t/main.exe > %t/objdump
36# RUN: llvm-otool -Gv %t/main.exe >> %t/objdump
37# RUN: FileCheck %s < %t/objdump
38
39#--- foo.s
40.text
41.section __TEXT,__StaticInit,regular,pure_instructions
42.p2align 4, 0x90
43_some_init_function:
44retq
45.p2align 2, 0x90
46.data_region jt32
47.long 0
48.long 0
49.end_data_region
50
51.section __TEXT,__text,regular,pure_instructions
52.globl _main
53.p2align 4, 0x90
54_main:
55pushq	%rbp
56movq	%rsp, %rbp
57subq	$16, %rsp
58movl	$0, -4(%rbp)
59movb	$0, %al
60callq	_bar
61addq	$16, %rsp
62popq	%rbp
63retq
64.p2align 2, 0x90
65.data_region jt32
66.long 0
67.long 0
68.long 0
69.long 0
70.long 0
71.long 0
72.end_data_region
73
74#--- bar.s
75.text
76.globl _bar
77.p2align 4
78_bar:
79retq
80.p2align 2, 0x90
81.data_region jt32
82.long 0
83.long 0
84.long 0
85.end_data_region
86