xref: /llvm-project/bolt/test/X86/dwarf5-df-inlined-subroutine-gc-sections-range.test (revision 9eb0df3aa98eeaf100f31eccf34963cdf1fbb8cd)
1; RUN: rm -rf %t
2; RUN: mkdir %t
3; RUN: cd %t
4; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-df-inlined-subroutine-gc-sections-range-main.s \
5; RUN: -split-dwarf-file=main.dwo -o main.o
6; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-df-inlined-subroutine-gc-sections-range-helper.s \
7; RUN: -split-dwarf-file=helper.dwo -o helper.o
8; RUN: %clang -fuse-ld=lld -Wl,-gc-sections -Wl,-q -gdwarf-5 -gsplit-dwarf=split main.o helper.o -o main.exe
9; RUN: llvm-bolt main.exe -o main.exe.bolt --update-debug-sections
10; RUN: llvm-dwarfdump --debug-addr main.exe > log.txt
11; RUN: llvm-dwarfdump --debug-rnglists --verbose --show-form main.dwo >> log.txt
12; RUN: llvm-dwarfdump --debug-info --verbose --show-form main.dwo >> log.txt
13; RUN: llvm-dwarfdump --debug-rnglists --verbose --show-form helper.dwo >> log.txt
14; RUN: llvm-dwarfdump --debug-info --verbose --show-form helper.dwo >> log.txt
15; RUN: llvm-dwarfdump --debug-addr main.exe.bolt > logBolt.txt
16; RUN: llvm-dwarfdump --debug-info --verbose --show-form main.dwo.dwo >> logBolt.txt
17; RUN: llvm-dwarfdump --debug-info --verbose --show-form helper.dwo.dwo >> logBolt.txt
18; RUN: cat log.txt | FileCheck -check-prefix=BOLT-PRE %s
19; RUN: cat logBolt.txt | FileCheck -check-prefix=BOLT-MAIN %s
20
21; Tests whether BOLT handles correctly DW_TAG_inlined_subroutine when DW_AT_ranges is 0,
22; and split dwarf is enabled.
23
24; BOLT-PRE: Addrs:
25; BOLT-PRE: 0x0000000000000000
26; BOLT-PRE: 0x0000000000000000
27; BOLT-PRE-NOT: 0x0000000000000000
28; BOLT-PRE: Addrs:
29; BOLT-PRE: 0x0000000000000000
30; BOLT-PRE: 0x0000000000000000
31; BOLT-PRE: 0x0000000000000000
32
33; main.dwo
34; BOLT-PRE: [DW_RLE_base_addressx]:  0x0000000000000002
35; BOLT-PRE: [DW_RLE_offset_pair  ]:  0x0000000000000018, 0x000000000000002d => [0x000000000000001a, 0x000000000000002f)
36; BOLT-PRE: [DW_RLE_end_of_list  ]
37; BOLT-PRE: [DW_RLE_base_addressx]:  0x0000000000000002
38; BOLT-PRE: [DW_RLE_offset_pair  ]:  0x0000000000000033, 0x0000000000000042 => [0x0000000000000035, 0x0000000000000044)
39; BOLT-PRE: [DW_RLE_end_of_list  ]
40; BOLT-PRE: DW_TAG_inlined_subroutine [9] * (0x0000006c)
41; BOLT-PRE: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0044 => {0x00000044} "_Z7doStuffi")
42; BOLT-PRE: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000014
43; BOLT-PRE:   [0x000000000000001a, 0x000000000000002f))
44; BOLT-PRE: DW_TAG_inlined_subroutine [9] * (0x0000006c)
45; BOLT-PRE: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x005a => {0x0000005a} "_Z11doStuffSamei")
46; BOLT-PRE: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x0000001a
47; BOLT-PRE:   [0x0000000000000035, 0x0000000000000044))
48
49; helper.dwo
50; BOLT-PRE: [DW_RLE_base_addressx]:  0x0000000000000002
51; BOLT-PRE: [DW_RLE_offset_pair  ]:  0x000000000000000d, 0x000000000000001a => [0x000000000000000f, 0x000000000000001c)
52; BOLT-PRE: [DW_RLE_end_of_list  ]
53; BOLT-PRE: [DW_RLE_base_addressx]:  0x0000000000000002
54; BOLT-PRE: [DW_RLE_offset_pair  ]:  0x0000000000000020, 0x000000000000002d => [0x0000000000000022, 0x000000000000002f)
55; BOLT-PRE: [DW_RLE_end_of_list  ]
56; BOLT-PRE: DW_TAG_inlined_subroutine [11] * (0x0000008c)
57; BOLT-PRE: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0054 => {0x00000054} "_Z12doStuff2Samei")
58; BOLT-PRE: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000014
59; BOLT-PRE:   [0x000000000000000f, 0x000000000000001c))
60; BOLT-PRE: DW_TAG_inlined_subroutine [11] * (0x0000008c)
61; BOLT-PRE: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0072 => {0x00000072} "_Z8doStuff2i")
62; BOLT-PRE: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x0000001a
63; BOLT-PRE:   [0x0000000000000022, 0x000000000000002f))
64
65; BOLT-MAIN: Addrs:
66; BOLT-MAIN: 0x0000000000000000
67; BOLT-MAIN-NOT: 0x0000000000000000
68; BOLT-MAIN-NOT: 0x0000000000000000
69; BOLT-MAIN-NOT: 0x0000000000000000
70; BOLT-MAIN: Addrs:
71; BOLT-MAIN: 0x0000000000000000
72
73; main.dwo.dwo
74; BOLT-MAIN: DW_TAG_inlined_subroutine
75; BOLT-MAIN: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0044 => {0x00000044} "_Z7doStuffi")
76; BOLT-MAIN: DW_AT_call_file
77; BOLT-MAIN: DW_AT_call_line
78; BOLT-MAIN: DW_AT_call_column
79; BOLT-MAIN: DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000002) address = <unresolved>)
80; BOLT-MAIN: DW_AT_high_pc [DW_FORM_data4] (0x00000015)
81; BOLT-MAIN: DW_TAG_inlined_subroutine
82; BOLT-MAIN: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x005a => {0x0000005a} "_Z11doStuffSamei")
83; BOLT-MAIN: DW_AT_call_file
84; BOLT-MAIN: DW_AT_call_line
85; BOLT-MAIN: DW_AT_call_column
86; BOLT-MAIN: DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000003) address = <unresolved>)
87; BOLT-MAIN: DW_AT_high_pc [DW_FORM_data4] (0x0000000f)
88
89; helper.dwo.dwo
90; BOLT-MAIN: DW_TAG_inlined_subroutine
91; BOLT-MAIN: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0054 => {0x00000054} "_Z12doStuff2Samei")
92; BOLT-MAIN: DW_AT_call_file
93; BOLT-MAIN: DW_AT_call_line
94; BOLT-MAIN: DW_AT_call_column
95; BOLT-MAIN: DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000000) address = <unresolved>)
96; BOLT-MAIN: DW_AT_high_pc [DW_FORM_data4] (0x0000001a)
97; BOLT-MAIN: DW_TAG_inlined_subroutine
98; BOLT-MAIN: DW_AT_abstract_origin [DW_FORM_ref4]  (cu + 0x0072 => {0x00000072} "_Z8doStuff2i")
99; BOLT-MAIN: DW_AT_call_file
100; BOLT-MAIN: DW_AT_call_line
101; BOLT-MAIN: DW_AT_call_column
102; BOLT-MAIN: DW_AT_low_pc [DW_FORM_addrx]  (indexed (00000000) address = <unresolved>)
103; BOLT-MAIN: DW_AT_high_pc [DW_FORM_data4] (0x0000002d)
104