xref: /llvm-project/bolt/test/X86/ambiguous_fragment.test (revision 3fe50b6dde174c76b3380927d7dd43ac19527d64)
1*3fe50b6dSAmir Ayupov## This reproduces a bug with misidentification of a parent fragment.
2*3fe50b6dSAmir Ayupov
3*3fe50b6dSAmir AyupovRUN: split-file %p/Inputs/ambiguous_fragment.s %t
4*3fe50b6dSAmir Ayupov
5*3fe50b6dSAmir AyupovRUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %t/file1 -o %t1.o
6*3fe50b6dSAmir AyupovRUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %t/file2 -o %t2.o
7*3fe50b6dSAmir AyupovRUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %t/file3 -o %t3.o
8*3fe50b6dSAmir AyupovRUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %t/file4 -o %t4.o
9*3fe50b6dSAmir AyupovRUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %t/file5 -o %t5.o
10*3fe50b6dSAmir Ayupov
11*3fe50b6dSAmir AyupovRUN: ld.lld %t1.o %t2.o %t3.o %t4.o %t5.o -o %t.exe \
12*3fe50b6dSAmir AyupovRUN:   --script %p/Inputs/ambiguous_fragment.script
13*3fe50b6dSAmir Ayupov
14*3fe50b6dSAmir AyupovRUN: llvm-objcopy %t.exe %t.exe2 \
15*3fe50b6dSAmir AyupovRUN:   --add-symbol=_Zfunc.cold.0=.text.cold:0x4,local,function \
16*3fe50b6dSAmir AyupovRUN:   --add-symbol=_Zfunc=.text:0xc,function
17*3fe50b6dSAmir Ayupov
18*3fe50b6dSAmir AyupovRUN: llvm-objdump --syms %t.exe2 | FileCheck %s --check-prefix=CHECK-SYMS
19*3fe50b6dSAmir Ayupov
20*3fe50b6dSAmir AyupovRUN: link_fdata %s %t.exe2 %t.preagg PREAGG
21*3fe50b6dSAmir AyupovRUN: perf2bolt -v=1 %t.exe2 -p %t.preagg --pa -o %t.fdata -w %t.yaml | FileCheck %s
22*3fe50b6dSAmir Ayupov
23*3fe50b6dSAmir Ayupov# PREAGG: B X:0 #__func# 1 0
24*3fe50b6dSAmir Ayupov
25*3fe50b6dSAmir AyupovCHECK-SYMS: 0000000000020004 {{.*}} __func.cold.0
26*3fe50b6dSAmir AyupovCHECK-SYMS: 0000000000020004 {{.*}} _Zfunc.cold.0
27*3fe50b6dSAmir Ayupov
28*3fe50b6dSAmir AyupovCHECK-NOT:  BOLT-ERROR: parent function not found for __func.cold.0
29*3fe50b6dSAmir AyupovCHECK:      BOLT-INFO: marking __func.cold.0/3(*4) as a fragment of __func/4(*3)
30*3fe50b6dSAmir AyupovCHECK-NEXT: BOLT-INFO: marking __func.cold.0/1(*2) as a fragment of __func/1(*2)
31*3fe50b6dSAmir AyupovCHECK-NEXT: BOLT-INFO: marking __func.cold.0/2(*2) as a fragment of __func/2(*2)
32*3fe50b6dSAmir AyupovCHECK-NEXT: BOLT-INFO: marking __func.cold.0/3(*4) as a fragment of __func/3(*2)
33*3fe50b6dSAmir AyupovCHECK-NEXT: BOLT-INFO: marking __func.cold.0/4(*2) as a fragment of __func/4(*3)
34