343 lines · yaml
1## This file contains test cases for generating sections in Mach-O object files.2 3## a) Test that yaml2obj emits sections and obj2yaml converts them back.4 5# RUN: yaml2obj --docnum=1 %s | obj2yaml | FileCheck %s6 7--- !mach-o8FileHeader: 9 magic: 0xFEEDFACF10 cputype: 0x0100000711 cpusubtype: 0x8000000312 filetype: 0x0000000213 ncmds: 1614 sizeofcmds: 140815 flags: 0x0021808516 reserved: 0x0000000017LoadCommands: 18 - cmd: LC_SEGMENT_6419 cmdsize: 7220 segname: __PAGEZERO21 vmaddr: 022 vmsize: 429496729623 fileoff: 024 filesize: 025 maxprot: 026 initprot: 027 nsects: 028 flags: 029 - cmd: LC_SEGMENT_6430 cmdsize: 55231 segname: __TEXT32 vmaddr: 429496729633 vmsize: 819234 fileoff: 035 filesize: 819236 maxprot: 737 initprot: 538 nsects: 639 flags: 040 Sections: 41 - sectname: __text42 segname: __TEXT43 addr: 0x000000010000116044 size: 309945 offset: 0x0000116046 align: 447 reloff: 0x0000000048 nreloc: 049 flags: 0x8000040050 reserved1: 0x0000000051 reserved2: 0x0000000052 reserved3: 0x0000000053 - sectname: __stubs54 segname: __TEXT55 addr: 0x0000000100001D7C56 size: 9057 offset: 0x00001D7C58 align: 159 reloff: 0x0000000060 nreloc: 061 flags: 0x8000040862 reserved1: 0x0000000063 reserved2: 0x0000000664 reserved3: 0x0000000065 - sectname: __stub_helper66 segname: __TEXT67 addr: 0x0000000100001DD868 size: 16669 offset: 0x00001DD870 align: 271 reloff: 0x0000000072 nreloc: 073 flags: 0x8000040074 reserved1: 0x0000000075 reserved2: 0x0000000076 reserved3: 0x0000000077 - sectname: __gcc_except_tab78 segname: __TEXT79 addr: 0x0000000100001E8080 size: 24081 offset: 0x00001E8082 align: 283 reloff: 0x0000000084 nreloc: 085 flags: 0x0000000086 reserved1: 0x0000000087 reserved2: 0x0000000088 reserved3: 0x0000000089 - sectname: __cstring90 segname: __TEXT91 addr: 0x0000000100001F7092 size: 1593 offset: 0x00001F7094 align: 095 reloff: 0x0000000096 nreloc: 097 flags: 0x0000000298 reserved1: 0x0000000099 reserved2: 0x00000000100 reserved3: 0x00000000101 - sectname: __unwind_info102 segname: __TEXT103 addr: 0x0000000100001F80104 size: 120105 offset: 0x00001F80106 align: 2107 reloff: 0x00000000108 nreloc: 0109 flags: 0x00000000110 reserved1: 0x00000000111 reserved2: 0x00000000112 reserved3: 0x00000000113 - cmd: LC_SEGMENT_64114 cmdsize: 312115 segname: __DATA116 vmaddr: 4294975488117 vmsize: 4096118 fileoff: 8192119 filesize: 4096120 maxprot: 7121 initprot: 3122 nsects: 3123 flags: 0124 Sections: 125 - sectname: __got126 segname: __DATA127 addr: 0x0000000100002000128 size: 24129 offset: 0x00002000130 align: 3131 reloff: 0x00000000132 nreloc: 0133 flags: 0x00000006134 reserved1: 0x0000000F135 reserved2: 0x00000000136 reserved3: 0x00000000137 - sectname: __nl_symbol_ptr138 segname: __DATA139 addr: 0x0000000100002018140 size: 16141 offset: 0x00002018142 align: 3143 reloff: 0x00000000144 nreloc: 0145 flags: 0x00000006146 reserved1: 0x00000012147 reserved2: 0x00000000148 reserved3: 0x00000000149 - sectname: __la_symbol_ptr150 segname: __DATA151 addr: 0x0000000100002028152 size: 120153 offset: 0x00002028154 align: 3155 reloff: 0x00000000156 nreloc: 0157 flags: 0x00000007158 reserved1: 0x00000014159 reserved2: 0x00000000160 reserved3: 0x00000000161 - cmd: LC_SEGMENT_64162 cmdsize: 72163 segname: __LINKEDIT164 vmaddr: 4294979584165 vmsize: 4096166 fileoff: 12288167 filesize: 2508168 maxprot: 7169 initprot: 1170 nsects: 0171 flags: 0172 - cmd: LC_DYLD_INFO_ONLY173 cmdsize: 48174 rebase_off: 12288175 rebase_size: 8176 bind_off: 12296177 bind_size: 96178 weak_bind_off: 0179 weak_bind_size: 0180 lazy_bind_off: 12392181 lazy_bind_size: 624182 export_off: 13016183 export_size: 48184 - cmd: LC_SYMTAB185 cmdsize: 24186 symoff: 13080187 nsyms: 30188 stroff: 13700189 strsize: 1096190 - cmd: LC_DYSYMTAB191 cmdsize: 80192 ilocalsym: 0193 nlocalsym: 9194 iextdefsym: 9195 nextdefsym: 2196 iundefsym: 11197 nundefsym: 19198 tocoff: 0199 ntoc: 0200 modtaboff: 0201 nmodtab: 0202 extrefsymoff: 0203 nextrefsyms: 0204 indirectsymoff: 13560205 nindirectsyms: 35206 extreloff: 0207 nextrel: 0208 locreloff: 0209 nlocrel: 0210 - cmd: LC_LOAD_DYLINKER211 cmdsize: 32212 name: 12213 - cmd: LC_UUID214 cmdsize: 24215 uuid: 461A1B28-822F-3F38-B670-645419E636F5216 - cmd: LC_VERSION_MIN_MACOSX217 cmdsize: 16218 version: 658176219 sdk: 658176220 - cmd: LC_SOURCE_VERSION221 cmdsize: 16222 version: 0223 - cmd: LC_MAIN224 cmdsize: 24225 entryoff: 4448226 stacksize: 0227 - cmd: LC_LOAD_DYLIB228 cmdsize: 48229 dylib: 230 name: 24231 timestamp: 2232 current_version: 7864576233 compatibility_version: 65536234 - cmd: LC_LOAD_DYLIB235 cmdsize: 56236 dylib: 237 name: 24238 timestamp: 2239 current_version: 80349697240 compatibility_version: 65536241 - cmd: LC_FUNCTION_STARTS242 cmdsize: 16243 dataoff: 13064244 datasize: 16245 - cmd: LC_DATA_IN_CODE246 cmdsize: 16247 dataoff: 13080248 datasize: 0249...250 251 252#CHECK: - cmd: LC_SEGMENT_64253#CHECK: segname: __PAGEZERO254#CHECK: - cmd: LC_SEGMENT_64255#CHECK: segname: __TEXT256#CHECK: Sections: 257#CHECK: - sectname: __text258#CHECK: segname: __TEXT259#CHECK: addr: 0x100001160260#CHECK: size: 3099261#CHECK: offset: 0x1160262#CHECK: align: 4263#CHECK: reloff: 0x0264#CHECK: nreloc: 0265#CHECK: flags: 0x80000400266#CHECK: reserved1: 0x0267#CHECK: reserved2: 0x0268#CHECK: reserved3: 0x0269#CHECK: - sectname: __stubs270#CHECK: segname: __TEXT271#CHECK: - sectname: __stub_helper272#CHECK: segname: __TEXT273#CHECK: - sectname: __gcc_except_tab274#CHECK: segname: __TEXT275#CHECK: - sectname: __cstring276#CHECK: segname: __TEXT277#CHECK: - sectname: __unwind_info278#CHECK: segname: __TEXT279#CHECK: - cmd: LC_SEGMENT_64280#CHECK: segname: __DATA281#CHECK: Sections: 282#CHECK: - sectname: __got283#CHECK: segname: __DATA284#CHECK: - sectname: __nl_symbol_ptr285#CHECK: segname: __DATA286#CHECK: - sectname: __la_symbol_ptr287#CHECK: segname: __DATA288 289## b) Test that yaml2obj emits an error message if we specify an offset that290## makes the current section and the previous one overlap.291 292# RUN: not yaml2obj --docnum=2 %s -o %t2.macho 2>&1 | FileCheck %s --check-prefix=OVERLAP293 294# 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]295 296--- !mach-o297FileHeader:298 magic: 0xFEEDFACF299 cputype: 0x01000007300 cpusubtype: 0x80000003301 filetype: 0x00000002302 ncmds: 1303 sizeofcmds: 1024304 flags: 0x00000000305 reserved: 0x00000000306LoadCommands:307 - cmd: LC_SEGMENT_64308 cmdsize: 0xff309 segname: __SEC310 vmaddr: 0311 vmsize: 0312 fileoff: 0313 filesize: 0314 maxprot: 0315 initprot: 0316 nsects: 2317 flags: 0318 Sections:319 - sectname: __sec1320 segname: __SEC321 addr: 0x0000000000000000322 size: 2323 offset: 0x00000000324 align: 0325 reloff: 0x00000000326 nreloc: 0327 flags: 0x00000000328 reserved1: 0x00000000329 reserved2: 0x00000000330 reserved3: 0x00000000331 - sectname: __sec2332 segname: __SEC333 addr: 0x0000000000000000334 size: 2335 offset: 0x00000001 ## Specify an offset that makes __sec1 and __sec2 overlap.336 align: 1337 reloff: 0x00000000338 nreloc: 0339 flags: 0x00000000340 reserved1: 0x00000000341 reserved2: 0x00000000342 reserved3: 0x00000000343