13c24fae3SKeith Smiley# REQUIRES: aarch64 23c24fae3SKeith Smiley# RUN: rm -rf %t; split-file %s %t 33c24fae3SKeith Smiley 4118bfde9SJez Ng# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/explicit-selrefs-1.s -o %t/explicit-selrefs-1.o 5118bfde9SJez Ng# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/explicit-selrefs-2.s -o %t/explicit-selrefs-2.o 6118bfde9SJez Ng# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/implicit-selrefs.s -o %t/implicit-selrefs.o 73c24fae3SKeith Smiley 8118bfde9SJez Ng# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-no-icf \ 9*9a8b0407SDaniel Bertalan# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains 10118bfde9SJez Ng# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-no-icf | \ 11118bfde9SJez Ng# RUN: FileCheck %s --check-prefix=EXPLICIT-NO-ICF 12118bfde9SJez Ng 13118bfde9SJez Ng## NOTE: ld64 always dedups the selrefs unconditionally, but we only do it when 14118bfde9SJez Ng## ICF is enabled. 15118bfde9SJez Ng# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-with-icf \ 16*9a8b0407SDaniel Bertalan# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains 17118bfde9SJez Ng# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-with-icf \ 18118bfde9SJez Ng# RUN: | FileCheck %s --check-prefix=EXPLICIT-WITH-ICF 193c24fae3SKeith Smiley 203c24fae3SKeith Smiley# SELREFS: Contents of (__DATA,__objc_selrefs) section 213c24fae3SKeith Smiley# SELREFS-NEXT: __TEXT:__objc_methname:foo 223c24fae3SKeith Smiley# SELREFS-NEXT: __TEXT:__objc_methname:bar 233c24fae3SKeith Smiley# SELREFS-NEXT: __TEXT:__objc_methname:foo 243c24fae3SKeith Smiley# SELREFS-NEXT: __TEXT:__objc_methname:length 253c24fae3SKeith Smiley# SELREFS-EMPTY: 263c24fae3SKeith Smiley 27118bfde9SJez Ng# RUN: %lld -dylib -arch arm64 -lSystem --icf=all -o %t/explicit-and-implicit \ 28*9a8b0407SDaniel Bertalan# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o %t/implicit-selrefs.o \ 29*9a8b0407SDaniel Bertalan# RUN: -no_fixup_chains 30118bfde9SJez Ng# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-and-implicit \ 31118bfde9SJez Ng# RUN: | FileCheck %s --check-prefix=EXPLICIT-AND-IMPLICIT 323c24fae3SKeith Smiley 33118bfde9SJez Ng# EXPLICIT-NO-ICF: Contents of (__DATA,__objc_selrefs) section 34118bfde9SJez Ng# EXPLICIT-NO-ICF-NEXT: __TEXT:__objc_methname:foo 35118bfde9SJez Ng# EXPLICIT-NO-ICF-NEXT: __TEXT:__objc_methname:bar 36118bfde9SJez Ng# EXPLICIT-NO-ICF-NEXT: __TEXT:__objc_methname:bar 37118bfde9SJez Ng# EXPLICIT-NO-ICF-NEXT: __TEXT:__objc_methname:foo 38118bfde9SJez Ng 39118bfde9SJez Ng# EXPLICIT-WITH-ICF: Contents of (__DATA,__objc_selrefs) section 40118bfde9SJez Ng# EXPLICIT-WITH-ICF-NEXT: __TEXT:__objc_methname:foo 41118bfde9SJez Ng# EXPLICIT-WITH-ICF-NEXT: __TEXT:__objc_methname:bar 42118bfde9SJez Ng 43118bfde9SJez Ng# EXPLICIT-AND-IMPLICIT: Contents of (__DATA,__objc_selrefs) section 44118bfde9SJez Ng# EXPLICIT-AND-IMPLICIT-NEXT: __TEXT:__objc_methname:foo 45118bfde9SJez Ng# EXPLICIT-AND-IMPLICIT-NEXT: __TEXT:__objc_methname:bar 46118bfde9SJez Ng# EXPLICIT-AND-IMPLICIT-NEXT: __TEXT:__objc_methname:length 473c24fae3SKeith Smiley 48118bfde9SJez Ng#--- explicit-selrefs-1.s 493c24fae3SKeith Smiley.section __TEXT,__objc_methname,cstring_literals 503c24fae3SKeith Smileylselref1: 513c24fae3SKeith Smiley .asciz "foo" 523c24fae3SKeith Smileylselref2: 533c24fae3SKeith Smiley .asciz "bar" 543c24fae3SKeith Smiley 553c24fae3SKeith Smiley.section __DATA,__objc_selrefs,literal_pointers,no_dead_strip 563c24fae3SKeith Smiley.p2align 3 573c24fae3SKeith Smiley .quad lselref1 583c24fae3SKeith Smiley .quad lselref2 59118bfde9SJez Ng .quad lselref2 603c24fae3SKeith Smiley 61118bfde9SJez Ng#--- explicit-selrefs-2.s 62118bfde9SJez Ng.section __TEXT,__objc_methname,cstring_literals 63118bfde9SJez Nglselref1: 64118bfde9SJez Ng .asciz "foo" 65118bfde9SJez Ng 66118bfde9SJez Ng.section __DATA,__objc_selrefs,literal_pointers,no_dead_strip 67118bfde9SJez Ng.p2align 3 68118bfde9SJez Ng .quad lselref1 69118bfde9SJez Ng 70118bfde9SJez Ng#--- implicit-selrefs.s 713c24fae3SKeith Smiley.text 723c24fae3SKeith Smiley.globl _objc_msgSend 73118bfde9SJez Ng.p2align 2 743c24fae3SKeith Smiley_objc_msgSend: 753c24fae3SKeith Smiley ret 763c24fae3SKeith Smiley 77118bfde9SJez Ng.p2align 2 78118bfde9SJez Ng_sender: 793c24fae3SKeith Smiley bl _objc_msgSend$length 803c24fae3SKeith Smiley bl _objc_msgSend$foo 813c24fae3SKeith Smiley ret 82