xref: /llvm-project/bolt/test/X86/dwarf5-df-types-modify-dwo-name-mixed.test (revision 6aad62cf5b7f91f4b02266cf72469e2c8e28dbef)
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-types-debug-names-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-types-dup-helper.s \
7; RUN: -split-dwarf-file=helper.dwo -o helper.o
8; RUN: %clang %cflags -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 --debug-thread-count=4 --cu-processing-batch-size=4
10; RUN: llvm-dwarfdump --debug-info -r 0 main.exe.bolt > log.txt
11; RUN: llvm-dwarfdump --debug-info -r 0 main.dwo.dwo >> log.txt
12; RUN: llvm-dwarfdump --debug-info -r 0 helper.dwo.dwo >> log.txt
13; RUN: llvm-dwarfdump --debug-str-offsets main.dwo.dwo >> log.txt
14; RUN: llvm-dwarfdump --debug-str-offsets helper.dwo.dwo >> log.txt
15; RUN: cat log.txt | FileCheck -check-prefix=BOLT %s
16
17;; Test is a mix of DWARF5 TUs where one has DW_AT_comp_dir/DW_AT_dwo_name, and another one doesn't.
18;; Tests that BOLT correctly updates DW_AT_dwo_name for TUs.
19
20; BOLT: DW_TAG_skeleton_unit
21; BOLT: DW_AT_comp_dir  (".")
22; BOLT: DW_AT_dwo_name  ("main.dwo.dwo")
23; BOLT: DW_TAG_skeleton_unit
24; BOLT: DW_AT_comp_dir  (".")
25; BOLT: DW_AT_dwo_name  ("helper.dwo.dwo")
26; BOLT: DW_TAG_type_unit
27; BOLT: DW_AT_comp_dir  (".")
28; BOLT: DW_AT_dwo_name  ("main.dwo.dwo")
29; BOLT: DW_TAG_type_unit
30; BOLT: DW_AT_comp_dir  (".")
31; BOLT: DW_AT_dwo_name  ("main.dwo.dwo")
32; BOLT: DW_TAG_type_unit
33; BOLT-NOT: DW_AT_dwo_name
34; BOLT: DW_TAG_type_unit
35; BOLT-NOT: DW_AT_dwo_name
36; BOLT: DW_TAG_compile_unit
37; BOLT:      .debug_str_offsets.dwo contents:
38; BOLT-NEXT: 0x00000000: Contribution size = 68, Format = DWARF32, Version = 5
39; BOLT-NEXT: "main"
40; BOLT-NEXT: "int"
41; BOLT-NEXT: "argc"
42; BOLT-NEXT: "argv"
43; BOLT-NEXT: "char"
44; BOLT-NEXT: "f2"
45; BOLT-NEXT: "."
46; BOLT-NEXT: "main.dwo.dwo"
47; BOLT-NEXT: "c1"
48; BOLT-NEXT: "Foo2"
49; BOLT-NEXT: "f3"
50; BOLT-NEXT: "c2"
51; BOLT-NEXT: "c3"
52; BOLT-NEXT: "Foo2a"
53; BOLT-NEXT: "clang version 18.0.0git (git@github.com:ayermolo/llvm-project.git db35fa8fc524127079662802c4735dbf397f86d0)"
54; BOLT-NEXT: "main.cpp"
55; BOLT-NEXT: helper.dwo.dwo: file format elf64-x86-64
56
57; BOLT:      .debug_str_offsets.dwo contents:
58; BOLT-NEXT: 0x00000000: Contribution size = 64, Format = DWARF32, Version = 5
59; BOLT-NEXT: "fooint"
60; BOLT-NEXT: "int"
61; BOLT-NEXT: "_Z3foov"
62; BOLT-NEXT: "foo"
63; BOLT-NEXT: "fint"
64; BOLT-NEXT: "c1"
65; BOLT-NEXT: "c2"
66; BOLT-NEXT: "Foo2Int"
67; BOLT-NEXT: "f"
68; BOLT-NEXT: "char"
69; BOLT-NEXT: "c3"
70; BOLT-NEXT: "Foo2a"
71; BOLT-NEXT: "clang version 18.0.0"
72; BOLT-NEXT: "helper.cpp"
73; BOLT-NEXT: "helper.dwo"
74
75;; Tests that BOLT correctly handles updating DW_AT_comp_dir/DW_AT_dwo_name when outptut directory is specified.
76
77; RUN: mkdir DWOOut
78; RUN: rm main.exe.bolt
79; RUN: llvm-bolt main.exe -o main.exe.bolt --update-debug-sections --dwarf-output-path=%t/DWOOut
80; RUN: cd DWOOut
81; RUN: llvm-dwarfdump --debug-info -r 0 ../main.exe.bolt > log.txt
82; RUN: llvm-dwarfdump --debug-info -r 0 main.dwo0.dwo >> log.txt
83; RUN: llvm-dwarfdump --debug-info -r 0 helper.dwo0.dwo >> log.txt
84; RUN: llvm-dwarfdump --debug-str-offsets main.dwo0.dwo >> log.txt
85; RUN: llvm-dwarfdump --debug-str-offsets helper.dwo0.dwo >> log.txt
86; RUN: cat log.txt | FileCheck -check-prefix=BOLT-PATH %s
87
88; BOLT-PATH: DW_TAG_skeleton_unit
89; BOLT-PATH: DW_AT_comp_dir  ("
90; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut
91; BOLT-PATH: DW_AT_dwo_name  ("main.dwo0.dwo")
92; BOLT-PATH: DW_TAG_skeleton_unit
93; BOLT-PATH: DW_AT_comp_dir  ("
94; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut
95; BOLT-PATH: DW_AT_dwo_name  ("helper.dwo0.dwo")
96; BOLT-PATH: DW_TAG_type_unit
97; BOLT-PATH: DW_AT_comp_dir  ("
98; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut
99; BOLT-PATH: DW_AT_dwo_name  ("main.dwo0.dwo")
100; BOLT-PATH: DW_TAG_type_unit
101; BOLT-PATH: DW_AT_comp_dir  ("
102; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut
103; BOLT-PATH: DW_AT_dwo_name  ("main.dwo0.dwo")
104; BOLT-PATH: DW_TAG_type_unit
105; BOLT-PATH-NOT: DW_AT_comp_dir
106; BOLT-PATH: DW_TAG_type_unit
107; BOLT-PATH-NOT: DW_AT_comp_dir
108; BOLT-PATH: DW_TAG_compile_unit
109; BOLT-PATH:      .debug_str_offsets.dwo contents:
110; BOLT-PATH-NEXT: 0x00000000: Contribution size = 68, Format = DWARF32, Version = 5
111; BOLT-PATH-NEXT: "main"
112; BOLT-PATH-NEXT: "int"
113; BOLT-PATH-NEXT: "argc"
114; BOLT-PATH-NEXT: "argv"
115; BOLT-PATH-NEXT: "char"
116; BOLT-PATH-NEXT: "f2"
117; BOLT-PATH-NEXT: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut"
118; BOLT-PATH-NEXT: "main.dwo0.dwo"
119; BOLT-PATH-NEXT: "c1"
120; BOLT-PATH-NEXT: "Foo2"
121; BOLT-PATH-NEXT: "f3"
122; BOLT-PATH-NEXT: "c2"
123; BOLT-PATH-NEXT: "c3"
124; BOLT-PATH-NEXT: "Foo2a"
125; BOLT-PATH-NEXT: "clang version 18.0.0git (git@github.com:ayermolo/llvm-project.git db35fa8fc524127079662802c4735dbf397f86d0)"
126; BOLT-PATH-NEXT: "main.cpp"
127; BOLT-PATH-NEXT: helper.dwo0.dwo: file format elf64-x86-64
128
129; BOLT-PATH:      .debug_str_offsets.dwo contents:
130; BOLT-PATH-NEXT: Contribution size = 64, Format = DWARF32, Version = 5
131; BOLT-PATH-NEXT: "fooint"
132; BOLT-PATH-NEXT: "int"
133; BOLT-PATH-NEXT: "_Z3foov"
134; BOLT-PATH-NEXT: "foo"
135; BOLT-PATH-NEXT: "fint"
136; BOLT-PATH-NEXT: "c1"
137; BOLT-PATH-NEXT: "c2"
138; BOLT-PATH-NEXT: "Foo2Int"
139; BOLT-PATH-NEXT: "f"
140; BOLT-PATH-NEXT: "char"
141; BOLT-PATH-NEXT: "c3"
142; BOLT-PATH-NEXT: "Foo2a"
143; BOLT-PATH-NEXT: "clang version 18.0.0"
144; BOLT-PATH-NEXT: "helper.cpp"
145; BOLT-PATH-NEXT: "helper.dwo"
146