; REQUIRES: x86, xar ; RUN: rm -rf %t; split-file %s %t ; RUN: opt -module-summary %t/test.ll -o %t/test.o ; RUN: opt -module-summary %t/foo.ll -o %t/foo.o ; RUN: %lld -lSystem -bitcode_bundle %t/test.o %t/foo.o -o %t/test ; RUN: llvm-objdump --macho --section=__LLVM,__bundle %t/test | FileCheck %s ; RUN: llvm-readobj --macho-segment %t/test | FileCheck %s --check-prefix=SEGMENT ; CHECK: Contents of (__LLVM,__bundle) section ; CHECK-NEXT: For (__LLVM,__bundle) section: xar header ; CHECK-NEXT: magic XAR_HEADER_MAGIC ; CHECK-NEXT: size 28 ; CHECK-NEXT: version 1 ; CHECK-NEXT: toc_length_compressed ; CHECK-NEXT: toc_length_uncompressed ; CHECK-NEXT: cksum_alg XAR_CKSUM_SHA1 ; CHECK-NEXT: For (__LLVM,__bundle) section: xar table of contents: ; CHECK-NEXT: ; CHECK-NEXT: ; CHECK-NEXT: ; CHECK-NEXT: ; CHECK-NEXT: 20 ; CHECK-NEXT: 0 ; CHECK-NEXT: ; CHECK-NEXT: {{.*}} ; CHECK-NEXT: ; CHECK-NEXT: ;; __LLVM must directly precede __LINKEDIT. ; SEGMENT: Name: __LLVM ; SEGMENT-NEXT: Size: 152 ; SEGMENT-NEXT: vmaddr: 0x[[#%X,LLVM_ADDR:]] ; SEGMENT-NEXT: vmsize: 0x[[#%X,LLVM_VMSIZE:]] ; SEGMENT-NEXT: fileoff: [[#LLVM_OFF:]] ; SEGMENT-NEXT: filesize: [[#LLVM_FILESIZE:]] ; SEGMENT-NEXT: maxprot: rw- ; SEGMENT-NEXT: initprot: rw- ; SEGMENT-NEXT: nsects: 1 ; SEGMENT-NEXT: flags: 0x0 ; SEGMENT-NEXT: } ; SEGMENT-NEXT: Segment { ; SEGMENT-NEXT: Cmd: LC_SEGMENT_64 ; SEGMENT-NEXT: Name: __LINKEDIT ; SEGMENT-NEXT: Size: 72 ; SEGMENT-NEXT: vmaddr: 0x[[#LLVM_ADDR + LLVM_VMSIZE]] ; SEGMENT-NEXT: vmsize: ; SEGMENT-NEXT: fileoff: [[#LLVM_OFF + LLVM_FILESIZE]] ; SEGMENT-NEXT: filesize: ; SEGMENT-NEXT: maxprot: r-- ; SEGMENT-NEXT: initprot: r-- ; SEGMENT-NEXT: nsects: 0 ; SEGMENT-NEXT: flags: 0x0 ; SEGMENT-NEXT: } ;--- foo.ll target triple = "x86_64-apple-darwin" target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" define void @foo() { ret void } ;--- test.ll target triple = "x86_64-apple-darwin" target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" define void @main() { ret void }