411 lines · plain
1# REQUIRES: aarch642# RUN: rm -rf %t; mkdir %t && cd %t3 4############ Test merging multiple categories into a single category ############5## Apply category merging to swiftc code just make sure we can handle addends6## and don't erase category names for swift -- in order to not crash7# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos -o cat_swift.o %s8# RUN: %lld -arch arm64 -dylib -o cat_swift.dylib cat_swift.o -objc_category_merging -no_objc_relative_method_lists9# RUN: llvm-objdump --objc-meta-data --macho cat_swift.dylib | FileCheck %s --check-prefixes=CHECK-MERGE10 11; CHECK-MERGE: Contents of (__DATA_CONST,__objc_classlist) section12; CHECK-MERGE-NEXT: _$s11SimpleClassAACN13; CHECK-MERGE-NEXT: isa {{.+}} _OBJC_METACLASS_$__TtC11SimpleClass11SimpleClass14; CHECK-MERGE-NEXT: superclass 0x015; CHECK-MERGE-NEXT: cache 0x016; CHECK-MERGE-NEXT: vtable 0x017; CHECK-MERGE-NEXT: data {{.+}} (struct class_ro_t *) Swift class18; CHECK-MERGE-NEXT: flags 0x8019; CHECK-MERGE-NEXT: instanceStart 820; CHECK-MERGE-NEXT: instanceSize 821; CHECK-MERGE-NEXT: reserved 0x022; CHECK-MERGE-NEXT: ivarLayout 0x023; CHECK-MERGE-NEXT: name {{.+}} _TtC11SimpleClass11SimpleClass24; CHECK-MERGE-NEXT: baseMethods {{.+}} (struct method_list_t *)25; CHECK-MERGE-NEXT: entsize 2426; CHECK-MERGE-NEXT: count 327; CHECK-MERGE-NEXT: name {{.+}} categoryInstanceMethod28; CHECK-MERGE-NEXT: types {{.+}} q16@0:829; CHECK-MERGE-NEXT: imp _$s11SimpleClassAAC22categoryInstanceMethodSiyFTo30; CHECK-MERGE-NEXT: name {{.+}} baseClassInstanceMethod31; CHECK-MERGE-NEXT: types {{.+}} i16@0:832; CHECK-MERGE-NEXT: imp _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTo33; CHECK-MERGE-NEXT: name {{.+}} init34; CHECK-MERGE-NEXT: types {{.+}} @16@0:835; CHECK-MERGE-NEXT: imp _$s11SimpleClassAACABycfcTo36; CHECK-MERGE-NEXT: baseProtocols 0x037; CHECK-MERGE-NEXT: ivars 0x038; CHECK-MERGE-NEXT: weakIvarLayout 0x039; CHECK-MERGE-NEXT: baseProperties 0x040; CHECK-MERGE-NEXT: Meta Class41; CHECK-MERGE-NEXT: isa 0x042; CHECK-MERGE-NEXT: superclass 0x043; CHECK-MERGE-NEXT: cache 0x044; CHECK-MERGE-NEXT: vtable 0x045; CHECK-MERGE-NEXT: data {{.+}} (struct class_ro_t *)46; CHECK-MERGE-NEXT: flags 0x81 RO_META47; CHECK-MERGE-NEXT: instanceStart 4048; CHECK-MERGE-NEXT: instanceSize 4049; CHECK-MERGE-NEXT: reserved 0x050; CHECK-MERGE-NEXT: ivarLayout 0x051; CHECK-MERGE-NEXT: name {{.+}} _TtC11SimpleClass11SimpleClass52; CHECK-MERGE-NEXT: baseMethods 0x0 (struct method_list_t *)53; CHECK-MERGE-NEXT: baseProtocols 0x054; CHECK-MERGE-NEXT: ivars 0x055; CHECK-MERGE-NEXT: weakIvarLayout 0x056; CHECK-MERGE-NEXT: baseProperties 0x057; CHECK-MERGE-NEXT: Contents of (__DATA_CONST,__objc_imageinfo) section58; CHECK-MERGE-NEXT: version 059; CHECK-MERGE-NEXT: flags 0x740 OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES Swift 5 or later60 61; ================== Generated from Swift: ==================62;; > xcrun swiftc --version63;; swift-driver version: 1.109.2 Apple Swift version 6.0 (swiftlang-6.0.0.3.300 clang-1600.0.20.10)64;; > xcrun swiftc -S SimpleClass.swift -o SimpleClass.s65; import Foundation66; @objc class SimpleClass: NSObject {67; @objc func baseClassInstanceMethod() -> Int32 {68; return 269; }70; }71; extension SimpleClass {72; @objc func categoryInstanceMethod() -> Int {73; return 374; }75; }76 77; ================== Generated from Swift: ==================78 .section __TEXT,__text,regular,pure_instructions79 .build_version macos, 11, 0 sdk_version 12, 080 .globl _main81 .p2align 282_main:83 .cfi_startproc84 mov w0, #085 ret86 .cfi_endproc87 88 .private_extern _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyF89 .globl _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyF90 .p2align 291_$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyF:92 .cfi_startproc93 ret94 .cfi_endproc95 96 .p2align 297_$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTo:98 .cfi_startproc99 ret100 .cfi_endproc101 102 .private_extern _$s11SimpleClassAACABycfC103 .globl _$s11SimpleClassAACABycfC104 .p2align 2105_$s11SimpleClassAACABycfC:106 .cfi_startproc107 ret108 .cfi_endproc109 110 .private_extern _$s11SimpleClassAACABycfc111 .globl _$s11SimpleClassAACABycfc112 .p2align 2113_$s11SimpleClassAACABycfc:114 .cfi_startproc115 ret116 .cfi_endproc117 118 .private_extern _$s11SimpleClassAACMa119 .globl _$s11SimpleClassAACMa120 .p2align 2121_$s11SimpleClassAACMa:122 ret123 124 .p2align 2125_$s11SimpleClassAACABycfcTo:126 .cfi_startproc127 ret128 .cfi_endproc129 130 .private_extern _$s11SimpleClassAACfD131 .globl _$s11SimpleClassAACfD132 .p2align 2133_$s11SimpleClassAACfD:134 .cfi_startproc135 ret136 .cfi_endproc137 138 .private_extern _$s11SimpleClassAAC22categoryInstanceMethodSiyF139 .globl _$s11SimpleClassAAC22categoryInstanceMethodSiyF140 .p2align 2141_$s11SimpleClassAAC22categoryInstanceMethodSiyF:142 .cfi_startproc143 ret144 .cfi_endproc145 146 .p2align 2147_$s11SimpleClassAAC22categoryInstanceMethodSiyFTo:148 .cfi_startproc149 ret150 .cfi_endproc151 152 .section __TEXT,__objc_methname,cstring_literals153"L_selector_data(init)":154 .asciz "init"155 156 .section __DATA,__objc_selrefs,literal_pointers,no_dead_strip157 .p2align 3, 0x0158"L_selector(init)":159 .quad "L_selector_data(init)"160 161 .section __TEXT,__objc_methname,cstring_literals162"L_selector_data(dealloc)":163 .asciz "dealloc"164 165 .section __DATA,__objc_selrefs,literal_pointers,no_dead_strip166 .p2align 3, 0x0167"L_selector(dealloc)":168 .quad "L_selector_data(dealloc)"169 170 .section __TEXT,__swift5_entry,regular,no_dead_strip171 .p2align 2, 0x0172l_entry_point:173 .long _main-l_entry_point174 .long 0175 176 .private_extern _OBJC_METACLASS_$__TtC11SimpleClass11SimpleClass177 .section __DATA,__data178 .globl _OBJC_METACLASS_$__TtC11SimpleClass11SimpleClass179 .p2align 3, 0x0180_OBJC_METACLASS_$__TtC11SimpleClass11SimpleClass:181 .quad _OBJC_METACLASS_$_NSObject182 .quad _OBJC_METACLASS_$_NSObject183 .quad __objc_empty_cache184 .quad 0185 .quad __METACLASS_DATA__TtC11SimpleClass11SimpleClass186 187 .section __TEXT,__cstring,cstring_literals188 .p2align 4, 0x0189l_.str.30._TtC11SimpleClass11SimpleClass:190 .asciz "_TtC11SimpleClass11SimpleClass"191 192 .section __DATA,__objc_const193 .p2align 3, 0x0194__METACLASS_DATA__TtC11SimpleClass11SimpleClass:195 .long 129196 .long 40197 .long 40198 .long 0199 .quad 0200 .quad l_.str.30._TtC11SimpleClass11SimpleClass201 .quad 0202 .quad 0203 .quad 0204 .quad 0205 .quad 0206 207 .section __TEXT,__objc_methname,cstring_literals208"L_selector_data(baseClassInstanceMethod)":209 .asciz "baseClassInstanceMethod"210 211 .section __TEXT,__cstring,cstring_literals212"l_.str.7.i16@0:8":213 .asciz "i16@0:8"214 215"l_.str.7.@16@0:8":216 .asciz "@16@0:8"217 218 .section __DATA,__objc_data219 .p2align 3, 0x0220__INSTANCE_METHODS__TtC11SimpleClass11SimpleClass:221 .long 24222 .long 2223 .quad "L_selector_data(baseClassInstanceMethod)"224 .quad "l_.str.7.i16@0:8"225 .quad _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTo226 .quad "L_selector_data(init)"227 .quad "l_.str.7.@16@0:8"228 .quad _$s11SimpleClassAACABycfcTo229 230 .p2align 3, 0x0231__DATA__TtC11SimpleClass11SimpleClass:232 .long 128233 .long 8234 .long 8235 .long 0236 .quad 0237 .quad l_.str.30._TtC11SimpleClass11SimpleClass238 .quad __INSTANCE_METHODS__TtC11SimpleClass11SimpleClass239 .quad 0240 .quad 0241 .quad 0242 .quad 0243 244 .section __TEXT,__const245l_.str.11.SimpleClass:246 .asciz "SimpleClass"247 248 .private_extern _$s11SimpleClassMXM249 .section __TEXT,__constg_swiftt250 .globl _$s11SimpleClassMXM251 .weak_definition _$s11SimpleClassMXM252 .p2align 2, 0x0253_$s11SimpleClassMXM:254 .long 0255 .long 0256 .long (l_.str.11.SimpleClass-_$s11SimpleClassMXM)-8257 258 .private_extern "_symbolic So8NSObjectC"259 .section __TEXT,__swift5_typeref260 .globl "_symbolic So8NSObjectC"261 .weak_definition "_symbolic So8NSObjectC"262 .p2align 1, 0x0263"_symbolic So8NSObjectC":264 .ascii "So8NSObjectC"265 .byte 0266 267 .private_extern _$s11SimpleClassAACMn268 .section __TEXT,__constg_swiftt269 .globl _$s11SimpleClassAACMn270 .p2align 2, 0x0271_$s11SimpleClassAACMn:272 .long 2147483728273 .long (_$s11SimpleClassMXM-_$s11SimpleClassAACMn)-4274 .long (l_.str.11.SimpleClass-_$s11SimpleClassAACMn)-8275 .long (_$s11SimpleClassAACMa-_$s11SimpleClassAACMn)-12276 .long (_$s11SimpleClassAACMF-_$s11SimpleClassAACMn)-16277 .long ("_symbolic So8NSObjectC"-_$s11SimpleClassAACMn)-20278 .long 3279 .long 11280 .long 1281 .long 0282 .long 10283 .long 10284 .long 1285 .long 16286 .long (_$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyF-_$s11SimpleClassAACMn)-56287 288 .section __DATA,__objc_data289 .p2align 3, 0x0290_$s11SimpleClassAACMf:291 .quad 0292 .quad _$s11SimpleClassAACfD293 .quad _$sBOWV294 .quad _OBJC_METACLASS_$__TtC11SimpleClass11SimpleClass295 .quad _OBJC_CLASS_$_NSObject296 .quad __objc_empty_cache297 .quad 0298 .quad __DATA__TtC11SimpleClass11SimpleClass+2299 .long 0300 .long 0301 .long 8302 .short 7303 .short 0304 .long 112305 .long 24306 .quad _$s11SimpleClassAACMn307 .quad 0308 .quad _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyF309 310 .private_extern "_symbolic _____ 11SimpleClassAAC"311 .section __TEXT,__swift5_typeref312 .globl "_symbolic _____ 11SimpleClassAAC"313 .weak_definition "_symbolic _____ 11SimpleClassAAC"314 .p2align 1, 0x0315"_symbolic _____ 11SimpleClassAAC":316 .byte 1317 .long (_$s11SimpleClassAACMn-"_symbolic _____ 11SimpleClassAAC")-1318 .byte 0319 320 .section __TEXT,__swift5_fieldmd321 .p2align 2, 0x0322_$s11SimpleClassAACMF:323 .long "_symbolic _____ 11SimpleClassAAC"-_$s11SimpleClassAACMF324 .long ("_symbolic So8NSObjectC"-_$s11SimpleClassAACMF)-4325 .short 7326 .short 12327 .long 0328 329 .section __TEXT,__objc_methname,cstring_literals330"L_selector_data(categoryInstanceMethod)":331 .asciz "categoryInstanceMethod"332 333 .section __TEXT,__cstring,cstring_literals334"l_.str.7.q16@0:8":335 .asciz "q16@0:8"336 337 .section __DATA,__objc_data338 .p2align 3, 0x0339__CATEGORY_INSTANCE_METHODS__TtC11SimpleClass11SimpleClass_$_SimpleClass:340 .long 24341 .long 1342 .quad "L_selector_data(categoryInstanceMethod)"343 .quad "l_.str.7.q16@0:8"344 .quad _$s11SimpleClassAAC22categoryInstanceMethodSiyFTo345 346 .section __DATA,__objc_const347 .p2align 3, 0x0348__CATEGORY__TtC11SimpleClass11SimpleClass_$_SimpleClass:349 .quad l_.str.11.SimpleClass350 .quad _$s11SimpleClassAACMf+24351 .quad __CATEGORY_INSTANCE_METHODS__TtC11SimpleClass11SimpleClass_$_SimpleClass352 .quad 0353 .quad 0354 .quad 0355 .quad 0356 .long 60357 .space 4358 359 .section __TEXT,__swift5_types360 .p2align 2, 0x0361l_$s11SimpleClassAACHn:362 .long _$s11SimpleClassAACMn-l_$s11SimpleClassAACHn363 364 .private_extern ___swift_reflection_version365 .section __TEXT,__const366 .globl ___swift_reflection_version367 .weak_definition ___swift_reflection_version368 .p2align 1, 0x0369___swift_reflection_version:370 .short 3371 372 .section __DATA,__objc_classlist,regular,no_dead_strip373 .p2align 3, 0x0374_objc_classes_$s11SimpleClassAACN:375 .quad _$s11SimpleClassAACN376 377 .section __DATA,__objc_catlist,regular,no_dead_strip378 .p2align 3, 0x0379_objc_categories:380 .quad __CATEGORY__TtC11SimpleClass11SimpleClass_$_SimpleClass381 382 .no_dead_strip _main383 .no_dead_strip l_entry_point384 .no_dead_strip _$s11SimpleClassAACMF385 .no_dead_strip l_$s11SimpleClassAACHn386 .no_dead_strip ___swift_reflection_version387 .no_dead_strip _objc_classes_$s11SimpleClassAACN388 .no_dead_strip _objc_categories389 .section __DATA,__objc_imageinfo,regular,no_dead_strip390L_OBJC_IMAGE_INFO:391 .long 0392 .long 100665152393 394 .globl _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTq395 .private_extern _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTq396 .alt_entry _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTq397.set _$s11SimpleClassAAC04baseB14InstanceMethods5Int32VyFTq, _$s11SimpleClassAACMn+52398 .globl _$s11SimpleClassAACN399 .private_extern _$s11SimpleClassAACN400 .alt_entry _$s11SimpleClassAACN401.set _$s11SimpleClassAACN, _$s11SimpleClassAACMf+24402 .globl _OBJC_CLASS_$__TtC11SimpleClass11SimpleClass403 .private_extern _OBJC_CLASS_$__TtC11SimpleClass11SimpleClass404.subsections_via_symbols405 406_OBJC_CLASS_$_NSObject:407_OBJC_METACLASS_$_NSObject:408__objc_empty_cache:409_$sBOWV:410 .quad 0411