| # REQUIRES: x86 |
| |
| # RUN: rm -rf %t; split-file %s %t |
| |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/bar.s -o %t/bar.o |
| # RUN: %lld -lSystem %t/foo.o %t/bar.o -o %t/main.exe |
| # RUN: llvm-otool -l %t/main.exe > %t/objdump |
| # RUN: llvm-objdump --macho --data-in-code %t/main.exe >> %t/objdump |
| # RUN: FileCheck %s < %t/objdump |
| |
| # CHECK-LABEL: sectname __text |
| # CHECK-NEXT: segname __TEXT |
| # CHECK-NEXT: addr |
| # CHECK-NEXT: size |
| # CHECK-NEXT: offset [[#%,TEXT:]] |
| |
| # CHECK-LABEL: cmd LC_DATA_IN_CODE |
| # CHECK-NEXT: cmdsize 16 |
| # CHECK-NEXT: dataoff |
| # CHECK-NEXT: datasize 16 |
| |
| # CHECK-LABEL: Data in code table (2 entries) |
| # CHECK-NEXT: offset length kind |
| # CHECK-NEXT: [[#%x,TEXT + 28]] 24 JUMP_TABLE32 |
| # CHECK-NEXT: [[#%x,TEXT + 68]] 12 JUMP_TABLE32 |
| |
| # RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -o %t/main.exe |
| # RUN: llvm-otool -l %t/main.exe | FileCheck --check-prefix=OMIT %s |
| |
| # OMIT-NOT: LC_DATA_IN_CODE |
| |
| # RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -data_in_code_info -o %t/main.exe |
| # RUN: llvm-otool -l %t/main.exe > %t/objdump |
| # RUN: llvm-objdump --macho --data-in-code %t/main.exe >> %t/objdump |
| # RUN: FileCheck %s < %t/objdump |
| |
| #--- foo.s |
| .text |
| .globl _main |
| .p2align 4, 0x90 |
| _main: |
| pushq %rbp |
| movq %rsp, %rbp |
| subq $16, %rsp |
| movl $0, -4(%rbp) |
| movb $0, %al |
| callq _bar |
| addq $16, %rsp |
| popq %rbp |
| retq |
| .p2align 2, 0x90 |
| .data_region jt32 |
| .long 0 |
| .long 0 |
| .long 0 |
| .long 0 |
| .long 0 |
| .long 0 |
| .end_data_region |
| |
| #--- bar.s |
| .text |
| .globl _bar |
| .p2align 4 |
| _bar: |
| retq |
| .p2align 2, 0x90 |
| .data_region jt32 |
| .long 0 |
| .long 0 |
| .long 0 |
| .end_data_region |