173 lines
6.9 KiB
ArmAsm
173 lines
6.9 KiB
ArmAsm
# REQUIRES: x86
|
|
|
|
# RUN: rm -rf %t; split-file %s %t
|
|
|
|
## ld64 ignores the __objc_imageinfo section entirely if there is no actual
|
|
## ObjC class + category data in the file. LLD doesn't yet do this check, but
|
|
## to make this test work for both linkers, I am inserting an appropriate class
|
|
## definition into each test file.
|
|
# RUN: cat %t/no-category-cls.s %t/foo-cls.s > %t/no-category-cls-1.s
|
|
# RUN: cat %t/with-category-cls.s %t/foo-cls.s > %t/with-category-cls-1.s
|
|
# RUN: cat %t/ignored-flags.s %t/foo-cls.s > %t/ignored-flags-1.s
|
|
# RUN: cat %t/invalid-version.s %t/foo-cls.s > %t/invalid-version-1.s
|
|
# RUN: cat %t/invalid-size.s %t/foo-cls.s > %t/invalid-size-1.s
|
|
# RUN: cat %t/swift-version-1.s %t/foo-cls.s > %t/swift-version-1-1.s
|
|
# RUN: cat %t/swift-version-2.s %t/foo-cls.s > %t/swift-version-2-1.s
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-category-cls-1.s -o %t/no-category-cls.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/with-category-cls-1.s -o %t/with-category-cls.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/ignored-flags-1.s -o %t/ignored-flags.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/invalid-version-1.s -o %t/invalid-version.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/swift-version-1-1.s -o %t/swift-version-1.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/swift-version-2-1.s -o %t/swift-version-2.o
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/invalid-size-1.s -o %t/invalid-size.o
|
|
|
|
# RUN: %lld -dylib -lSystem %t/with-category-cls.o -o %t/test-with-cat
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" --syms \
|
|
# RUN: %t/test-with-cat | FileCheck %s --check-prefix=HAS-CAT-CLS \
|
|
# RUN: --implicit-check-not=_discard_me
|
|
|
|
# RUN: %lld -dylib -lSystem %t/no-category-cls.o -o %t/test-no-cat
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" --syms \
|
|
# RUN: %t/test-no-cat | FileCheck %s --check-prefix=NO-CAT-CLS \
|
|
# RUN: --implicit-check-not=_discard_me
|
|
|
|
# RUN: %lld -dylib -lSystem %t/no-category-cls.o %t/with-category-cls.o -o %t/test1
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test1 \
|
|
# RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
|
|
|
|
# RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/ignored-flags.o -o %t/test2
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test2 \
|
|
# RUN: | FileCheck %s --check-prefix=HAS-CAT-CLS
|
|
|
|
# RUN: %lld -dylib -lSystem %t/no-category-cls.o %t/ignored-flags.o -o %t/test3
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test3 \
|
|
# RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
|
|
|
|
# RUN: %no-fatal-warnings-lld -dylib -lSystem %t/with-category-cls.o \
|
|
# RUN: %t/invalid-version.o -o %t/test4 2>&1 | FileCheck %s \
|
|
# RUN: --check-prefix=IMAGE-VERSION
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test4 \
|
|
# RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
|
|
|
|
# RUN: %no-fatal-warnings-lld -dylib -lSystem %t/no-category-cls.o \
|
|
# RUN: %t/invalid-version.o -o %t/test5 2>&1 | FileCheck %s \
|
|
# RUN: --check-prefix=IMAGE-VERSION
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test5 \
|
|
# RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
|
|
|
|
# RUN: %no-fatal-warnings-lld -dylib -lSystem %t/with-category-cls.o \
|
|
# RUN: %t/invalid-size.o -o %t/test6 2>&1 | FileCheck %s \
|
|
# RUN: --check-prefix=INVALID-SIZE
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test6 \
|
|
# RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
|
|
|
|
# RUN: not %lld -dylib -lSystem %t/swift-version-1.o %t/swift-version-2.o -o \
|
|
# RUN: /dev/null 2>&1 | FileCheck %s --check-prefix=SWIFT-MISMATCH-12
|
|
# RUN: not %lld -dylib -lSystem %t/swift-version-2.o %t/swift-version-1.o -o \
|
|
# RUN: /dev/null 2>&1 | FileCheck %s --check-prefix=SWIFT-MISMATCH-21
|
|
|
|
## with-category-cls.o does not have a Swift version (it's set to zero) and
|
|
## should be compatible with any Swift version.
|
|
# RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/swift-version-1.o -o %t/swift-v1
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" \
|
|
# RUN: %t/swift-v1 | FileCheck %s --check-prefix=SWIFT-V1
|
|
# RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/swift-version-2.o -o %t/swift-v2
|
|
# RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" \
|
|
# RUN: %t/swift-v2 | FileCheck %s --check-prefix=SWIFT-V2
|
|
|
|
# HAS-CAT-CLS: Contents of (__DATA_CONST,__objc_imageinfo) section
|
|
# HAS-CAT-CLS: 00 00 00 40 00 00 00
|
|
# HAS-CAT-CLS-EMPTY:
|
|
|
|
# NO-CAT-CLS: Contents of (__DATA_CONST,__objc_imageinfo) section
|
|
# NO-CAT-CLS: 00 00 00 00 00 00 00
|
|
# NO-CAT-CLS-EMPTY:
|
|
|
|
# SWIFT-V1: Contents of (__DATA_CONST,__objc_imageinfo) section
|
|
# SWIFT-V1: 00 00 00 40 01 00 00
|
|
# SWIFT-V1-EMPTY:
|
|
|
|
# SWIFT-V2: Contents of (__DATA_CONST,__objc_imageinfo) section
|
|
# SWIFT-V2: 00 00 00 40 02 00 00
|
|
# SWIFT-V2-EMPTY:
|
|
|
|
# IMAGE-VERSION: warning: {{.*}}invalid-version.o: invalid __objc_imageinfo version
|
|
|
|
# INVALID-SIZE: warning: {{.*}}invalid-size.o: invalid __objc_imageinfo size
|
|
|
|
# SWIFT-MISMATCH-12: error: Swift version mismatch: {{.*}}swift-version-1.o has version 1.0 but {{.*}}swift-version-2.o has version 1.1
|
|
# SWIFT-MISMATCH-21: error: Swift version mismatch: {{.*}}swift-version-2.o has version 1.1 but {{.*}}swift-version-1.o has version 1.0
|
|
|
|
#--- no-category-cls.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
## ld64 discards any symbols in this section; we follow suit.
|
|
_discard_me:
|
|
.long 0
|
|
.long 0
|
|
|
|
#--- with-category-cls.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
_discard_me:
|
|
.long 0
|
|
.long 0x40 ## "has category class properties" flag
|
|
|
|
#--- ignored-flags.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
.long 0
|
|
## Only the 0x40 flag is carried through to the output binary.
|
|
.long (0x40 | 0x20 | 0x4 | 0x2)
|
|
|
|
#--- invalid-version.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
.long 1 ## only 0 is valid; the flag field below will not be parsed.
|
|
.long 0x40
|
|
|
|
#--- invalid-size.s
|
|
.section __DATA,__objc_imageinfo
|
|
.long 0
|
|
|
|
#--- swift-version-1.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
.long 0
|
|
.byte 0x40
|
|
.byte 0x1 ## Swift version
|
|
.short 0
|
|
|
|
#--- swift-version-2.s
|
|
.section __DATA,__objc_imageinfo,regular,no_dead_strip
|
|
.long 0
|
|
.byte 0x40
|
|
.byte 0x2 ## Swift version
|
|
.short 0
|
|
|
|
#--- foo-cls.s
|
|
.section __TEXT,__objc_classname,cstring_literals
|
|
L_CAT_NAME:
|
|
.asciz "barcat"
|
|
|
|
.section __DATA,__objc_data
|
|
.p2align 3
|
|
_OBJC_CLASS_$_FooClass:
|
|
.space 40
|
|
|
|
.section __DATA,__objc_const
|
|
.p2align 3
|
|
__OBJC_$_CATEGORY_INSTANCE_METHODS_FooClass_$_barcat:
|
|
|
|
.p2align 3
|
|
__OBJC_$_CATEGORY_FooClass_$_barcat:
|
|
.quad L_CAT_NAME
|
|
.quad _OBJC_CLASS_$_FooClass
|
|
.quad __OBJC_$_CATEGORY_INSTANCE_METHODS_FooClass_$_barcat
|
|
.quad 0
|
|
.quad 0
|
|
.quad 0
|
|
.quad 0
|
|
.long 64
|
|
.space 4
|
|
|
|
.section __DATA,__objc_catlist,regular,no_dead_strip
|
|
.p2align 3
|
|
.quad __OBJC_$_CATEGORY_FooClass_$_barcat
|