146 lines · plain
1; RUN: rm -rf %t2; RUN: mkdir %t3; RUN: cd %t4; 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.o6; 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.o8; RUN: %clang %cflags -gdwarf-5 -gsplit-dwarf=split main.o helper.o -o main.exe9; RUN: llvm-bolt main.exe -o main.exe.bolt --update-debug-sections --debug-thread-count=4 --cu-processing-batch-size=410; RUN: llvm-dwarfdump --debug-info -r 0 main.exe.bolt > log.txt11; RUN: llvm-dwarfdump --debug-info -r 0 main.dwo.dwo >> log.txt12; RUN: llvm-dwarfdump --debug-info -r 0 helper.dwo.dwo >> log.txt13; RUN: llvm-dwarfdump --debug-str-offsets main.dwo.dwo >> log.txt14; RUN: llvm-dwarfdump --debug-str-offsets helper.dwo.dwo >> log.txt15; RUN: cat log.txt | FileCheck -check-prefix=BOLT %s16 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_unit21; BOLT: DW_AT_comp_dir (".")22; BOLT: DW_AT_dwo_name ("main.dwo.dwo")23; BOLT: DW_TAG_skeleton_unit24; BOLT: DW_AT_comp_dir (".")25; BOLT: DW_AT_dwo_name ("helper.dwo.dwo")26; BOLT: DW_TAG_type_unit27; BOLT: DW_AT_comp_dir (".")28; BOLT: DW_AT_dwo_name ("main.dwo.dwo")29; BOLT: DW_TAG_type_unit30; BOLT: DW_AT_comp_dir (".")31; BOLT: DW_AT_dwo_name ("main.dwo.dwo")32; BOLT: DW_TAG_type_unit33; BOLT-NOT: DW_AT_dwo_name34; BOLT: DW_TAG_type_unit35; BOLT-NOT: DW_AT_dwo_name36; BOLT: DW_TAG_compile_unit37; BOLT: .debug_str_offsets.dwo contents:38; BOLT-NEXT: 0x00000000: Contribution size = 68, Format = DWARF32, Version = 539; 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-6456 57; BOLT: .debug_str_offsets.dwo contents:58; BOLT-NEXT: 0x00000000: Contribution size = 64, Format = DWARF32, Version = 559; 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 DWOOut78; RUN: rm main.exe.bolt79; RUN: llvm-bolt main.exe -o main.exe.bolt --update-debug-sections --dwarf-output-path=%t/DWOOut80; RUN: cd DWOOut81; RUN: llvm-dwarfdump --debug-info -r 0 ../main.exe.bolt > log.txt82; RUN: llvm-dwarfdump --debug-info -r 0 main.dwo0.dwo >> log.txt83; RUN: llvm-dwarfdump --debug-info -r 0 helper.dwo0.dwo >> log.txt84; RUN: llvm-dwarfdump --debug-str-offsets main.dwo0.dwo >> log.txt85; RUN: llvm-dwarfdump --debug-str-offsets helper.dwo0.dwo >> log.txt86; RUN: cat log.txt | FileCheck -check-prefix=BOLT-PATH %s87 88; BOLT-PATH: DW_TAG_skeleton_unit89; BOLT-PATH: DW_AT_comp_dir ("90; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut91; BOLT-PATH: DW_AT_dwo_name ("main.dwo0.dwo")92; BOLT-PATH: DW_TAG_skeleton_unit93; BOLT-PATH: DW_AT_comp_dir ("94; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut95; BOLT-PATH: DW_AT_dwo_name ("helper.dwo0.dwo")96; BOLT-PATH: DW_TAG_type_unit97; BOLT-PATH: DW_AT_comp_dir ("98; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut99; BOLT-PATH: DW_AT_dwo_name ("main.dwo0.dwo")100; BOLT-PATH: DW_TAG_type_unit101; BOLT-PATH: DW_AT_comp_dir ("102; BOLT-PATH-SAME: dwarf5-df-types-modify-dwo-name-mixed.test.tmp/DWOOut103; BOLT-PATH: DW_AT_dwo_name ("main.dwo0.dwo")104; BOLT-PATH: DW_TAG_type_unit105; BOLT-PATH-NOT: DW_AT_comp_dir106; BOLT-PATH: DW_TAG_type_unit107; BOLT-PATH-NOT: DW_AT_comp_dir108; BOLT-PATH: DW_TAG_compile_unit109; BOLT-PATH: .debug_str_offsets.dwo contents:110; BOLT-PATH-NEXT: 0x00000000: Contribution size = 68, Format = DWARF32, Version = 5111; 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-64128 129; BOLT-PATH: .debug_str_offsets.dwo contents:130; BOLT-PATH-NEXT: Contribution size = 64, Format = DWARF32, Version = 5131; 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