148 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-dualcu-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-dualcu-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.exe -fno-pic -no-pie9; RUN: llvm-bolt main.exe -o main.exe.bolt --update-debug-sections --always-convert-to-ranges10; RUN: llvm-dwarfdump --show-form --verbose --debug-info main.exe | FileCheck -check-prefix=PRE-BOLT %s11; RUN: llvm-dwarfdump --show-form --verbose --debug-addr main.exe.bolt &> %t/foo.txt12; RUN: llvm-dwarfdump --show-form --verbose --debug-info main.exe.bolt >> %t/foo.txt13; RUN: cat %t/foo.txt | FileCheck -check-prefix=BOLT %s14; RUN: llvm-dwarfdump --show-form --verbose --debug-info main.dwo | FileCheck -check-prefix=PRE-BOLT-DWO-MAIN %s15; RUN: llvm-dwarfdump --show-form --verbose --debug-info main.dwo.dwo | FileCheck -check-prefix=BOLT-DWO-MAIN %s16; RUN: llvm-dwarfdump --show-form --verbose --debug-info helper.dwo | FileCheck -check-prefix=PRE-BOLT-DWO-HELPER %s17; RUN: llvm-dwarfdump --show-form --verbose --debug-info helper.dwo.dwo | FileCheck -check-prefix=BOLT-DWO-HELPER %s18 19;; Testing dwarf5 split dwarf for two CUs. Making sure DW_AT_low_pc/DW_AT_high_pc are converted correctly in the binary and in dwo.20;; Checking that DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx ##) are updated correctly.21 22; PRE-BOLT: version = 0x000523; PRE-BOLT: DW_TAG_skeleton_unit24; PRE-BOLT: DW_AT_low_pc [DW_FORM_addrx]25; PRE-BOLT-NEXT: DW_AT_high_pc [DW_FORM_data4]26; PRE-BOLT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008)27 28; BOLT: Addrs: [29; BOLT-NEXT: 0x30; BOLT-NEXT: 0x31; BOLT-NEXT: 0x[[#%.16x,ADDR:]]32; BOLT-NEXT: 0x[[#%.16x,ADDR2:]]33; BOLT: Addrs: [34; BOLT-NEXT: 0x35; BOLT-NEXT: 0x36; BOLT-NEXT: 0x[[#%.16x,ADDR3:]]37; BOLT: DW_TAG_skeleton_unit38; BOLT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "main.dwo.dwo")39; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000004) address = 0x0000000000000000)40; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000001041; BOLT-NEXT: [0x[[#ADDR]]42; BOLT-SAME: 0x[[#ADDR + 0x24]]43; BOLT-NEXT: [0x[[#ADDR2]]44; BOLT-SAME: 0x[[#ADDR2 + 0x59]]45; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000008)46; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x0000000c)47; BOLT: DW_TAG_skeleton_unit48; BOLT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "helper.dwo.dwo")49; BOLT-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003) address = 0x0000000000000000)50; BOLT-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x0000002a51; BOLT-NEXT: [0x[[#ADDR3]]52; BOLT-SAME: 0x[[#ADDR3 + 0x3D]]53; BOLT-NEXT: DW_AT_addr_base [DW_FORM_sec_offset] (0x00000038)54; BOLT-NEXT: DW_AT_rnglists_base [DW_FORM_sec_offset] (0x00000026)55 56; PRE-BOLT-DWO-MAIN: version = 0x000557; PRE-BOLT-DWO-MAIN: DW_TAG_compile_unit58; PRE-BOLT-DWO-MAIN: DW_TAG_variable [2]59; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000000) string = "x")60; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_type61; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_external62; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_decl_file63; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_decl_line64; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0)65; PRE-BOLT-DWO-MAIN: DW_TAG_variable [2]66; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000002) string = "y")67; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_type68; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_external69; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_decl_file70; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_decl_line71; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x1)72; PRE-BOLT-DWO-MAIN: DW_TAG_subprogram73; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002)74; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000024)75; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_frame_base76; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_linkage_name [DW_FORM_strx1] (indexed (00000003) string = "_Z3usePiS_")77; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000004) string = "use")78; PRE-BOLT-DWO-MAIN: DW_TAG_subprogram79; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003)80; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x0000005f)81; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_frame_base82; PRE-BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000005) string = "main")83 84; BOLT-DWO-MAIN: DW_TAG_compile_unit85; BOLT-DWO-MAIN: DW_TAG_variable [2]86; BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000000) string = "x")87; BOLT-DWO-MAIN-NEXT: DW_AT_type88; BOLT-DWO-MAIN-NEXT: DW_AT_external89; BOLT-DWO-MAIN-NEXT: DW_AT_decl_file90; BOLT-DWO-MAIN-NEXT: DW_AT_decl_line91; BOLT-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0)92; BOLT-DWO-MAIN: DW_TAG_variable [2]93; BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000002) string = "y")94; BOLT-DWO-MAIN-NEXT: DW_AT_type95; BOLT-DWO-MAIN-NEXT: DW_AT_external96; BOLT-DWO-MAIN-NEXT: DW_AT_decl_file97; BOLT-DWO-MAIN-NEXT: DW_AT_decl_line98; BOLT-DWO-MAIN-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x1)99; BOLT-DWO-MAIN: DW_TAG_subprogram [4]100; BOLT-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000014101; BOLT-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000024))102; BOLT-DWO-MAIN-NEXT: DW_AT_frame_base103; BOLT-DWO-MAIN-NEXT: DW_AT_linkage_name [DW_FORM_strx1] (indexed (00000003) string = "_Z3usePiS_")104; BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000004) string = "use")105; BOLT-DWO-MAIN: DW_TAG_subprogram [6]106; BOLT-DWO-MAIN-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = 0x00000018107; BOLT-DWO-MAIN-NEXT: [0x0000000000000000, 0x0000000000000059))108; BOLT-DWO-MAIN-NEXT: DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_reg6 RBP)109; BOLT-DWO-MAIN-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000005) string = "main")110 111; PRE-BOLT-DWO-HELPER: version = 0x0005112; PRE-BOLT-DWO-HELPER: DW_TAG_variable [2]113; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000000) string = "z")114; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_type115; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_external116; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_decl_file117; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_decl_line118; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0)119; PRE-BOLT-DWO-HELPER: DW_TAG_variable [2]120; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000002) string = "d")121; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_type122; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_external123; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_decl_file124; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_decl_line125; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x1)126; PRE-BOLT-DWO-HELPER: DW_TAG_subprogram [4]127; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002)128; PRE-BOLT-DWO-HELPER-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x0000003d)129 130; BOLT-DWO-HELPER: version = 0x0005131; BOLT-DWO-HELPER: DW_TAG_variable [2]132; BOLT-DWO-HELPER-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000000) string = "z")133; BOLT-DWO-HELPER-NEXT: DW_AT_type134; BOLT-DWO-HELPER-NEXT: DW_AT_external135; BOLT-DWO-HELPER-NEXT: DW_AT_decl_file136; BOLT-DWO-HELPER-NEXT: DW_AT_decl_line137; BOLT-DWO-HELPER-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0)138; BOLT-DWO-HELPER: DW_TAG_variable [2]139; BOLT-DWO-HELPER-NEXT: DW_AT_name [DW_FORM_strx1] (indexed (00000002) string = "d")140; BOLT-DWO-HELPER-NEXT: DW_AT_type141; BOLT-DWO-HELPER-NEXT: DW_AT_external142; BOLT-DWO-HELPER-NEXT: DW_AT_decl_file143; BOLT-DWO-HELPER-NEXT: DW_AT_decl_line144; BOLT-DWO-HELPER-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x1)145; BOLT-DWO-HELPER: DW_TAG_subprogram [4]146; BOLT-DWO-HELPER-NEXT: DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = 0x00000010147; BOLT-DWO-HELPER-NEXT: [0x0000000000000000, 0x000000000000003d))148