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