| ## This file contains test cases for generating sections in Mach-O object files. | 
 |  | 
 | ## a) Test that yaml2obj emits sections and obj2yaml converts them back. | 
 |  | 
 | # RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s | 
 |  | 
 | --- !mach-o | 
 | FileHeader:       | 
 |   magic:           0xFEEDFACF | 
 |   cputype:         0x01000007 | 
 |   cpusubtype:      0x80000003 | 
 |   filetype:        0x00000002 | 
 |   ncmds:           16 | 
 |   sizeofcmds:      1408 | 
 |   flags:           0x00218085 | 
 |   reserved:        0x00000000 | 
 | LoadCommands:     | 
 |   - cmd:             LC_SEGMENT_64 | 
 |     cmdsize:         72 | 
 |     segname:         __PAGEZERO | 
 |     vmaddr:          0 | 
 |     vmsize:          4294967296 | 
 |     fileoff:         0 | 
 |     filesize:        0 | 
 |     maxprot:         0 | 
 |     initprot:        0 | 
 |     nsects:          0 | 
 |     flags:           0 | 
 |   - cmd:             LC_SEGMENT_64 | 
 |     cmdsize:         552 | 
 |     segname:         __TEXT | 
 |     vmaddr:          4294967296 | 
 |     vmsize:          8192 | 
 |     fileoff:         0 | 
 |     filesize:        8192 | 
 |     maxprot:         7 | 
 |     initprot:        5 | 
 |     nsects:          6 | 
 |     flags:           0 | 
 |     Sections:         | 
 |       - sectname:        __text | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001160 | 
 |         size:            3099 | 
 |         offset:          0x00001160 | 
 |         align:           4 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x80000400 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __stubs | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001D7C | 
 |         size:            90 | 
 |         offset:          0x00001D7C | 
 |         align:           1 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x80000408 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000006 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __stub_helper | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001DD8 | 
 |         size:            166 | 
 |         offset:          0x00001DD8 | 
 |         align:           2 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x80000400 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __gcc_except_tab | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001E80 | 
 |         size:            240 | 
 |         offset:          0x00001E80 | 
 |         align:           2 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000000 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __cstring | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001F70 | 
 |         size:            15 | 
 |         offset:          0x00001F70 | 
 |         align:           0 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000002 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __unwind_info | 
 |         segname:         __TEXT | 
 |         addr:            0x0000000100001F80 | 
 |         size:            120 | 
 |         offset:          0x00001F80 | 
 |         align:           2 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000000 | 
 |         reserved1:       0x00000000 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |   - cmd:             LC_SEGMENT_64 | 
 |     cmdsize:         312 | 
 |     segname:         __DATA | 
 |     vmaddr:          4294975488 | 
 |     vmsize:          4096 | 
 |     fileoff:         8192 | 
 |     filesize:        4096 | 
 |     maxprot:         7 | 
 |     initprot:        3 | 
 |     nsects:          3 | 
 |     flags:           0 | 
 |     Sections:         | 
 |       - sectname:        __got | 
 |         segname:         __DATA | 
 |         addr:            0x0000000100002000 | 
 |         size:            24 | 
 |         offset:          0x00002000 | 
 |         align:           3 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000006 | 
 |         reserved1:       0x0000000F | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __nl_symbol_ptr | 
 |         segname:         __DATA | 
 |         addr:            0x0000000100002018 | 
 |         size:            16 | 
 |         offset:          0x00002018 | 
 |         align:           3 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000006 | 
 |         reserved1:       0x00000012 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |       - sectname:        __la_symbol_ptr | 
 |         segname:         __DATA | 
 |         addr:            0x0000000100002028 | 
 |         size:            120 | 
 |         offset:          0x00002028 | 
 |         align:           3 | 
 |         reloff:          0x00000000 | 
 |         nreloc:          0 | 
 |         flags:           0x00000007 | 
 |         reserved1:       0x00000014 | 
 |         reserved2:       0x00000000 | 
 |         reserved3:       0x00000000 | 
 |   - cmd:             LC_SEGMENT_64 | 
 |     cmdsize:         72 | 
 |     segname:         __LINKEDIT | 
 |     vmaddr:          4294979584 | 
 |     vmsize:          4096 | 
 |     fileoff:         12288 | 
 |     filesize:        2508 | 
 |     maxprot:         7 | 
 |     initprot:        1 | 
 |     nsects:          0 | 
 |     flags:           0 | 
 |   - cmd:             LC_DYLD_INFO_ONLY | 
 |     cmdsize:         48 | 
 |     rebase_off:      12288 | 
 |     rebase_size:     8 | 
 |     bind_off:        12296 | 
 |     bind_size:       96 | 
 |     weak_bind_off:   0 | 
 |     weak_bind_size:  0 | 
 |     lazy_bind_off:   12392 | 
 |     lazy_bind_size:  624 | 
 |     export_off:      13016 | 
 |     export_size:     48 | 
 |   - cmd:             LC_SYMTAB | 
 |     cmdsize:         24 | 
 |     symoff:          13080 | 
 |     nsyms:           30 | 
 |     stroff:          13700 | 
 |     strsize:         1096 | 
 |   - cmd:             LC_DYSYMTAB | 
 |     cmdsize:         80 | 
 |     ilocalsym:       0 | 
 |     nlocalsym:       9 | 
 |     iextdefsym:      9 | 
 |     nextdefsym:      2 | 
 |     iundefsym:       11 | 
 |     nundefsym:       19 | 
 |     tocoff:          0 | 
 |     ntoc:            0 | 
 |     modtaboff:       0 | 
 |     nmodtab:         0 | 
 |     extrefsymoff:    0 | 
 |     nextrefsyms:     0 | 
 |     indirectsymoff:  13560 | 
 |     nindirectsyms:   35 | 
 |     extreloff:       0 | 
 |     nextrel:         0 | 
 |     locreloff:       0 | 
 |     nlocrel:         0 | 
 |   - cmd:             LC_LOAD_DYLINKER | 
 |     cmdsize:         32 | 
 |     name:            12 | 
 |   - cmd:             LC_UUID | 
 |     cmdsize:         24 | 
 |     uuid:            461A1B28-822F-3F38-B670-645419E636F5 | 
 |   - cmd:             LC_VERSION_MIN_MACOSX | 
 |     cmdsize:         16 | 
 |     version:         658176 | 
 |     sdk:             658176 | 
 |   - cmd:             LC_SOURCE_VERSION | 
 |     cmdsize:         16 | 
 |     version:         0 | 
 |   - cmd:             LC_MAIN | 
 |     cmdsize:         24 | 
 |     entryoff:        4448 | 
 |     stacksize:       0 | 
 |   - cmd:             LC_LOAD_DYLIB | 
 |     cmdsize:         48 | 
 |     dylib:            | 
 |       name:            24 | 
 |       timestamp:       2 | 
 |       current_version: 7864576 | 
 |       compatibility_version: 65536 | 
 |   - cmd:             LC_LOAD_DYLIB | 
 |     cmdsize:         56 | 
 |     dylib:            | 
 |       name:            24 | 
 |       timestamp:       2 | 
 |       current_version: 80349697 | 
 |       compatibility_version: 65536 | 
 |   - cmd:             LC_FUNCTION_STARTS | 
 |     cmdsize:         16 | 
 |     dataoff:         13064 | 
 |     datasize:        16 | 
 |   - cmd:             LC_DATA_IN_CODE | 
 |     cmdsize:         16 | 
 |     dataoff:         13080 | 
 |     datasize:        0 | 
 | ... | 
 |  | 
 |  | 
 | #CHECK:   - cmd:             LC_SEGMENT_64 | 
 | #CHECK:     segname:         __PAGEZERO | 
 | #CHECK:   - cmd:             LC_SEGMENT_64 | 
 | #CHECK:     segname:         __TEXT | 
 | #CHECK:     Sections:         | 
 | #CHECK:       - sectname:        __text | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:         addr:            0x100001160 | 
 | #CHECK:         size:            3099 | 
 | #CHECK:         offset:          0x1160 | 
 | #CHECK:         align:           4 | 
 | #CHECK:         reloff:          0x0 | 
 | #CHECK:         nreloc:          0 | 
 | #CHECK:         flags:           0x80000400 | 
 | #CHECK:         reserved1:       0x0 | 
 | #CHECK:         reserved2:       0x0 | 
 | #CHECK:         reserved3:       0x0 | 
 | #CHECK:       - sectname:        __stubs | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:       - sectname:        __stub_helper | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:       - sectname:        __gcc_except_tab | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:       - sectname:        __cstring | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:       - sectname:        __unwind_info | 
 | #CHECK:         segname:         __TEXT | 
 | #CHECK:   - cmd:             LC_SEGMENT_64 | 
 | #CHECK:     segname:         __DATA | 
 | #CHECK:     Sections:         | 
 | #CHECK:       - sectname:        __got | 
 | #CHECK:         segname:         __DATA | 
 | #CHECK:       - sectname:        __nl_symbol_ptr | 
 | #CHECK:         segname:         __DATA | 
 | #CHECK:       - sectname:        __la_symbol_ptr | 
 | #CHECK:         segname:         __DATA | 
 |  | 
 | ## b) Test that yaml2obj emits an error message if we specify an offset that | 
 | ## makes the current section and the previous one overlap. | 
 |  | 
 | # RUN: not yaml2obj --docnum=2 %s -o %t2.macho 2>&1 | FileCheck %s --check-prefix=OVERLAP | 
 |  | 
 | # OVERLAP: yaml2obj: error: wrote too much data somewhere, section offsets in section __sec2 for segment __SEC don't line up: [cursor=0x121], [fileStart=0x0], [sectionOffset=0x1] | 
 |  | 
 | --- !mach-o | 
 | FileHeader: | 
 |   magic:      0xFEEDFACF | 
 |   cputype:    0x01000007 | 
 |   cpusubtype: 0x80000003 | 
 |   filetype:   0x00000002 | 
 |   ncmds:      1 | 
 |   sizeofcmds: 1024 | 
 |   flags:      0x00000000 | 
 |   reserved:   0x00000000 | 
 | LoadCommands: | 
 |   - cmd:      LC_SEGMENT_64 | 
 |     cmdsize:  0xff | 
 |     segname:  __SEC | 
 |     vmaddr:   0 | 
 |     vmsize:   0 | 
 |     fileoff:  0 | 
 |     filesize: 0 | 
 |     maxprot:  0 | 
 |     initprot: 0 | 
 |     nsects:   2 | 
 |     flags:    0 | 
 |     Sections: | 
 |       - sectname:  __sec1 | 
 |         segname:   __SEC | 
 |         addr:      0x0000000000000000 | 
 |         size:      2 | 
 |         offset:    0x00000000 | 
 |         align:     0 | 
 |         reloff:    0x00000000 | 
 |         nreloc:    0 | 
 |         flags:     0x00000000 | 
 |         reserved1: 0x00000000 | 
 |         reserved2: 0x00000000 | 
 |         reserved3: 0x00000000 | 
 |       - sectname:  __sec2 | 
 |         segname:   __SEC | 
 |         addr:      0x0000000000000000 | 
 |         size:      2 | 
 |         offset:    0x00000001 ## Specify an offset that makes __sec1 and __sec2 overlap. | 
 |         align:     1 | 
 |         reloff:    0x00000000 | 
 |         nreloc:    0 | 
 |         flags:     0x00000000 | 
 |         reserved1: 0x00000000 | 
 |         reserved2: 0x00000000 | 
 |         reserved3: 0x00000000 |