140 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t; mkdir %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o4# RUN: %lld -lSystem --icf=all -o %t/test %t/test.o5# RUN: llvm-objdump --macho --syms -d %t/test | FileCheck %s6 7# CHECK: _main:8# CHECK-NEXT: callq _foo2_ref9# CHECK-NEXT: callq _foo2_ref10# CHECK-NEXT: callq _foo2_neg_offset_ref11# CHECK-NEXT: callq _foo2_neg_offset_ref12# CHECK-NEXT: callq _foo2_pos_offset_ref13# CHECK-NEXT: callq _foo2_pos_offset_ref14# CHECK-NEXT: callq _bar2_ref15# CHECK-NEXT: callq _bar2_ref16# CHECK-NEXT: callq _baz2_ref17# CHECK-NEXT: callq _baz2_ref18# CHECK-NEXT: callq _qux2_ref19# CHECK-NEXT: callq _qux2_ref20# CHECK-NEXT: callq _sub_str_a_b21# CHECK-NEXT: callq _sub_str_b_a22# CHECK-NEXT: callq _sub_lit_a_b23# CHECK-NEXT: callq _sub_lit_b_a24 25# CHECK: [[#%.16x,FOO:]] l O __TEXT,__cstring _foo126# CHECK-NEXT: [[#%.16x,FOO:]] l O __TEXT,__cstring _foo227# CHECK-NEXT: [[#%.16x,BAR:]] l O __TEXT,__cstring _bar128# CHECK-NEXT: [[#%.16x,BAR:]] l O __TEXT,__cstring _bar229# CHECK-NEXT: [[#%.16x,BAZ:]] l O __TEXT,__literals _baz130# CHECK-NEXT: [[#%.16x,BAZ:]] l O __TEXT,__literals _baz231# CHECK-NEXT: [[#%.16x,QUX:]] l O __TEXT,__literals _qux132# CHECK-NEXT: [[#%.16x,QUX:]] l O __TEXT,__literals _qux233# CHECK-NEXT: [[#%.16x,FOO_REF:]] l F __TEXT,__text _foo1_ref34# CHECK-NEXT: [[#%.16x,FOO_REF:]] l F __TEXT,__text _foo2_ref35# CHECK-NEXT: [[#%.16x,FOO_NEG:]] l F __TEXT,__text _foo1_neg_offset_ref36# CHECK-NEXT: [[#%.16x,FOO_NEG]] l F __TEXT,__text _foo2_neg_offset_ref37# CHECK-NEXT: [[#%.16x,FOO_POS:]] l F __TEXT,__text _foo1_pos_offset_ref38# CHECK-NEXT: [[#%.16x,FOO_POS]] l F __TEXT,__text _foo2_pos_offset_ref39# CHECK-NEXT: [[#%.16x,BAR_REF:]] l F __TEXT,__text _bar1_ref40# CHECK-NEXT: [[#%.16x,BAR_REF:]] l F __TEXT,__text _bar2_ref41# CHECK-NEXT: [[#%.16x,BAZ_REF:]] l F __TEXT,__text _baz1_ref42# CHECK-NEXT: [[#%.16x,BAZ_REF:]] l F __TEXT,__text _baz2_ref43# CHECK-NEXT: [[#%.16x,QUX_REF:]] l F __TEXT,__text _qux1_ref44# CHECK-NEXT: [[#%.16x,QUX_REF:]] l F __TEXT,__text _qux2_ref45 46## _foo1 vs _bar1: same section, different offsets47## _foo1 vs _baz1: same offset, different sections48 49.cstring50_foo1:51 .asciz "foo"52_foo2:53 .asciz "foo"54_bar1:55 .asciz "bar"56_bar2:57 .asciz "bar"58 59.literal860_baz1:61 .quad 0xdead62_baz2:63 .quad 0xdead64_qux1:65 .quad 0xbeef66_qux2:67 .quad 0xbeef68 69.text70_foo1_ref:71 leaq _foo1(%rip), %rax72_foo2_ref:73 leaq _foo2(%rip), %rax74_foo1_neg_offset_ref:75## Check that we can correctly handle `_foo1-32` even though it points outside76## the __cstring section.77 leaq _foo1-32(%rip), %rax78_foo2_neg_offset_ref:79 leaq _foo2-32(%rip), %rax80_foo1_pos_offset_ref:81 leaq _foo1+4(%rip), %rax82_foo2_pos_offset_ref:83## Although `_foo2+4` points at _bar1 in the input object file, we shouldn't84## dedup references to _foo2+4 with references to _bar1.85 leaq _foo2+4(%rip), %rax86_bar1_ref:87 leaq _bar1(%rip), %rax88_bar2_ref:89 leaq _bar2(%rip), %rax90_baz1_ref:91 movq _baz1(%rip), %rax92_baz2_ref:93 movq _baz2(%rip), %rax94_qux1_ref:95 movq _qux1(%rip), %rax96_qux2_ref:97 movq _qux2(%rip), %rax98 99## _sub_str_a_b and _sub_str_b_a should not be folded: They contain relocations100## against the same string symbols, but in a different order and hence101## return different numbers.102_sub_str_a_b:103 leaq _foo2(%rip), %rdx104 leaq _bar2(%rip), %rax105 subq %rdx, %rax106_sub_str_b_a:107 leaq _bar2(%rip), %rdx108 leaq _foo2(%rip), %rax109 subq %rdx, %rax110 111## Same with literals instead of strings.112_sub_lit_a_b:113 movq _baz2(%rip), %rax114 subq _qux2(%rip), %rax115_sub_lit_b_a:116 movq _qux2(%rip), %rax117 subq _baz2(%rip), %rax118 119 120.globl _main121_main:122 callq _foo1_ref123 callq _foo2_ref124 callq _foo1_neg_offset_ref125 callq _foo2_neg_offset_ref126 callq _foo1_pos_offset_ref127 callq _foo2_pos_offset_ref128 callq _bar1_ref129 callq _bar2_ref130 callq _baz1_ref131 callq _baz2_ref132 callq _qux1_ref133 callq _qux2_ref134 callq _sub_str_a_b135 callq _sub_str_b_a136 callq _sub_lit_a_b137 callq _sub_lit_b_a138 139.subsections_via_symbols140