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-objdump --macho --data-in-code %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 16
22
23# CHECK-LABEL:  Data in code table (2 entries)
24# CHECK-NEXT:   offset length kind
25# CHECK-NEXT:   [[#%x,TEXT + 28]] 24 JUMP_TABLE32
26# CHECK-NEXT:   [[#%x,TEXT + 68]] 12 JUMP_TABLE32
27
28# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -o %t/main.exe
29# RUN: llvm-otool -l %t/main.exe | FileCheck --check-prefix=OMIT %s
30
31# OMIT-NOT: LC_DATA_IN_CODE
32
33# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -data_in_code_info -o %t/main.exe
34# RUN: llvm-otool -l %t/main.exe > %t/objdump
35# RUN: llvm-objdump --macho --data-in-code %t/main.exe >> %t/objdump
36# RUN: FileCheck %s < %t/objdump
37
38#--- foo.s
39.text
40.globl _main
41.p2align 4, 0x90
42_main:
43pushq	%rbp
44movq	%rsp, %rbp
45subq	$16, %rsp
46movl	$0, -4(%rbp)
47movb	$0, %al
48callq	_bar
49addq	$16, %rsp
50popq	%rbp
51retq
52.p2align 2, 0x90
53.data_region jt32
54.long 0
55.long 0
56.long 0
57.long 0
58.long 0
59.long 0
60.end_data_region
61
62#--- bar.s
63.text
64.globl _bar
65.p2align 4
66_bar:
67retq
68.p2align 2, 0x90
69.data_region jt32
70.long 0
71.long 0
72.long 0
73.end_data_region
74