brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 815ca47 Raw
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