1ca675104SJez Ng; REQUIRES: x86, xar
2ca675104SJez Ng; RUN: rm -rf %t; split-file %s %t
3ca675104SJez Ng; RUN: opt -module-summary %t/test.ll -o %t/test.o
4ca675104SJez Ng; RUN: opt -module-summary %t/foo.ll -o %t/foo.o
5ca675104SJez Ng; RUN: %lld -lSystem -bitcode_bundle %t/test.o %t/foo.o -o %t/test
6ca675104SJez Ng; RUN: llvm-objdump --macho --section=__LLVM,__bundle %t/test | FileCheck %s
7*bb62ef99SJez Ng; RUN: llvm-readobj --macho-segment %t/test | FileCheck %s --check-prefix=SEGMENT
8ca675104SJez Ng
9ca675104SJez Ng; CHECK:      Contents of (__LLVM,__bundle) section
10ca675104SJez Ng; CHECK-NEXT: For (__LLVM,__bundle) section: xar header
11ca675104SJez Ng; CHECK-NEXT:                   magic XAR_HEADER_MAGIC
12ca675104SJez Ng; CHECK-NEXT:                    size 28
13ca675104SJez Ng; CHECK-NEXT:                 version 1
14ca675104SJez Ng; CHECK-NEXT:   toc_length_compressed
15ca675104SJez Ng; CHECK-NEXT: toc_length_uncompressed
16ca675104SJez Ng; CHECK-NEXT:               cksum_alg XAR_CKSUM_SHA1
17ca675104SJez Ng; CHECK-NEXT: For (__LLVM,__bundle) section: xar table of contents:
18ca675104SJez Ng; CHECK-NEXT: <?xml version="1.0" encoding="UTF-8"?>
19ca675104SJez Ng; CHECK-NEXT: <xar>
20ca675104SJez Ng; CHECK-NEXT:  <toc>
21ca675104SJez Ng; CHECK-NEXT:   <checksum style="sha1">
22ca675104SJez Ng; CHECK-NEXT:    <size>20</size>
23ca675104SJez Ng; CHECK-NEXT:    <offset>0</offset>
24ca675104SJez Ng; CHECK-NEXT:   </checksum>
25ca675104SJez Ng; CHECK-NEXT:   <creation-time>{{.*}}</creation-time>
26ca675104SJez Ng; CHECK-NEXT:  </toc>
27ca675104SJez Ng; CHECK-NEXT: </xar>
28ca675104SJez Ng
29*bb62ef99SJez Ng;; __LLVM must directly precede __LINKEDIT.
30*bb62ef99SJez Ng; SEGMENT:        Name: __LLVM
31*bb62ef99SJez Ng; SEGMENT-NEXT:   Size: 152
32*bb62ef99SJez Ng; SEGMENT-NEXT:   vmaddr: 0x[[#%X,LLVM_ADDR:]]
33*bb62ef99SJez Ng; SEGMENT-NEXT:   vmsize: 0x[[#%X,LLVM_VMSIZE:]]
34*bb62ef99SJez Ng; SEGMENT-NEXT:   fileoff: [[#LLVM_OFF:]]
35*bb62ef99SJez Ng; SEGMENT-NEXT:   filesize: [[#LLVM_FILESIZE:]]
36*bb62ef99SJez Ng; SEGMENT-NEXT:   maxprot: rw-
37*bb62ef99SJez Ng; SEGMENT-NEXT:   initprot: rw-
38*bb62ef99SJez Ng; SEGMENT-NEXT:   nsects: 1
39*bb62ef99SJez Ng; SEGMENT-NEXT:   flags: 0x0
40*bb62ef99SJez Ng; SEGMENT-NEXT: }
41*bb62ef99SJez Ng; SEGMENT-NEXT: Segment {
42*bb62ef99SJez Ng; SEGMENT-NEXT:   Cmd: LC_SEGMENT_64
43*bb62ef99SJez Ng; SEGMENT-NEXT:   Name: __LINKEDIT
44*bb62ef99SJez Ng; SEGMENT-NEXT:   Size: 72
45*bb62ef99SJez Ng; SEGMENT-NEXT:   vmaddr: 0x[[#LLVM_ADDR + LLVM_VMSIZE]]
46*bb62ef99SJez Ng; SEGMENT-NEXT:   vmsize:
47*bb62ef99SJez Ng; SEGMENT-NEXT:   fileoff: [[#LLVM_OFF + LLVM_FILESIZE]]
48*bb62ef99SJez Ng; SEGMENT-NEXT:   filesize:
49*bb62ef99SJez Ng; SEGMENT-NEXT:   maxprot: r--
50*bb62ef99SJez Ng; SEGMENT-NEXT:   initprot: r--
51*bb62ef99SJez Ng; SEGMENT-NEXT:   nsects: 0
52*bb62ef99SJez Ng; SEGMENT-NEXT:   flags: 0x0
53*bb62ef99SJez Ng; SEGMENT-NEXT: }
54*bb62ef99SJez Ng
55ca675104SJez Ng;--- foo.ll
56ca675104SJez Ngtarget triple = "x86_64-apple-darwin"
57ca675104SJez Ngtarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
58ca675104SJez Ng
59ca675104SJez Ngdefine void @foo() {
60ca675104SJez Ng  ret void
61ca675104SJez Ng}
62ca675104SJez Ng
63ca675104SJez Ng;--- test.ll
64ca675104SJez Ngtarget triple = "x86_64-apple-darwin"
65ca675104SJez Ngtarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
66ca675104SJez Ng
67ca675104SJez Ngdefine void @main() {
68ca675104SJez Ng  ret void
69ca675104SJez Ng}
70