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-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-debug-names-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 10; RUN: llvm-dwarfdump --debug-info --debug-names main.exe.bolt > log.txt 11; RUN: cat log.txt | FileCheck -check-prefix=BOLT %s 12 13;; Tests that BOLT correctly generates .debug_names section with two CUs for split dwarf. 14 15; BOLT: [[OFFSET:0x[0-9a-f]*]]: Compile Unit 16; BOLT: [[OFFSET1:0x[0-9a-f]*]]: Compile Unit 17; BOLT: Name Index @ 0x0 { 18; BOLT-NEXT: Header { 19; BOLT-NEXT: Length: 0xFC 20; BOLT-NEXT: Format: DWARF32 21; BOLT-NEXT: Version: 5 22; BOLT-NEXT: CU count: 2 23; BOLT-NEXT: Local TU count: 0 24; BOLT-NEXT: Foreign TU count: 0 25; BOLT-NEXT: Bucket count: 7 26; BOLT-NEXT: Name count: 7 27; BOLT-NEXT: Abbreviations table size: 0x29 28; BOLT-NEXT: Augmentation: 'BOLT' 29; BOLT-NEXT: } 30; BOLT-NEXT: Compilation Unit offsets [ 31; BOLT-NEXT: CU[0]: [[OFFSET]] 32; BOLT-NEXT: CU[1]: [[OFFSET1]] 33; BOLT-NEXT: ] 34; BOLT-NEXT: Abbreviations [ 35; BOLT-NEXT: Abbreviation [[ABBREV1:0x[0-9a-f]*]] { 36; BOLT-NEXT: Tag: DW_TAG_structure_type 37; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 38; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 39; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 40; BOLT-NEXT: } 41; BOLT-NEXT: Abbreviation [[ABBREV2:0x[0-9a-f]*]] { 42; BOLT-NEXT: Tag: DW_TAG_base_type 43; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 44; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 45; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 46; BOLT-NEXT: } 47; BOLT-NEXT: Abbreviation [[ABBREV3:0x[0-9a-f]*]] { 48; BOLT-NEXT: Tag: DW_TAG_variable 49; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 50; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 51; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 52; BOLT-NEXT: } 53; BOLT-NEXT: Abbreviation [[ABBREV4:0x[0-9a-f]*]] { 54; BOLT-NEXT: Tag: DW_TAG_subprogram 55; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 56; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 57; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 58; BOLT-NEXT: } 59; BOLT-NEXT: ] 60; BOLT-NEXT: Bucket 0 [ 61; BOLT-NEXT: EMPTY 62; BOLT-NEXT: ] 63; BOLT-NEXT: Bucket 1 [ 64; BOLT-NEXT: Name 1 { 65; BOLT-NEXT: Hash: 0x7C96E4DB 66; BOLT-NEXT: String: {{.+}} "Foo2" 67; BOLT-NEXT: Entry @ {{.+}} { 68; BOLT-NEXT: Abbrev: [[ABBREV1]] 69; BOLT-NEXT: Tag: DW_TAG_structure_type 70; BOLT-NEXT: DW_IDX_compile_unit: 0x00 71; BOLT-NEXT: DW_IDX_die_offset: 0x00000068 72; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 73; BOLT-NEXT: } 74; BOLT-NEXT: } 75; BOLT-NEXT: ] 76; BOLT-NEXT: Bucket 2 [ 77; BOLT-NEXT: Name 2 { 78; BOLT-NEXT: Hash: 0xBA564846 79; BOLT-NEXT: String: {{.+}} "Foo2Int" 80; BOLT-NEXT: Entry @ {{.+}} { 81; BOLT-NEXT: Abbrev: [[ABBREV1]] 82; BOLT-NEXT: Tag: DW_TAG_structure_type 83; BOLT-NEXT: DW_IDX_compile_unit: 0x01 84; BOLT-NEXT: DW_IDX_die_offset: 0x00000025 85; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 86; BOLT-NEXT: } 87; BOLT-NEXT: } 88; BOLT-NEXT: ] 89; BOLT-NEXT: Bucket 3 [ 90; BOLT-NEXT: Name 3 { 91; BOLT-NEXT: Hash: 0xB888030 92; BOLT-NEXT: String: {{.+}} "int" 93; BOLT-NEXT: Entry @ {{.+}} { 94; BOLT-NEXT: Abbrev: [[ABBREV2]] 95; BOLT-NEXT: Tag: DW_TAG_base_type 96; BOLT-NEXT: DW_IDX_compile_unit: 0x01 97; BOLT-NEXT: DW_IDX_die_offset: 0x00000043 98; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 99; BOLT-NEXT: } 100; BOLT-NEXT: Entry @ {{.+}} { 101; BOLT-NEXT: Abbrev: [[ABBREV2]] 102; BOLT-NEXT: Tag: DW_TAG_base_type 103; BOLT-NEXT: DW_IDX_compile_unit: 0x00 104; BOLT-NEXT: DW_IDX_die_offset: 0x00000056 105; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 106; BOLT-NEXT: } 107; BOLT-NEXT: } 108; BOLT-NEXT: Name 4 { 109; BOLT-NEXT: Hash: 0xF73809C 110; BOLT-NEXT: String: {{.+}} "Foo2a" 111; BOLT-NEXT: Entry @ {{.+}} { 112; BOLT-NEXT: Abbrev: [[ABBREV1]] 113; BOLT-NEXT: Tag: DW_TAG_structure_type 114; BOLT-NEXT: DW_IDX_compile_unit: 0x00 115; BOLT-NEXT: DW_IDX_die_offset: 0x00000078 116; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 117; BOLT-NEXT: } 118; BOLT-NEXT: } 119; BOLT-NEXT: Name 5 { 120; BOLT-NEXT: Hash: 0x7C96CB76 121; BOLT-NEXT: String: {{.+}} "fint" 122; BOLT-NEXT: Entry @ {{.+}} { 123; BOLT-NEXT: Abbrev: [[ABBREV3]] 124; BOLT-NEXT: Tag: DW_TAG_variable 125; BOLT-NEXT: DW_IDX_compile_unit: 0x01 126; BOLT-NEXT: DW_IDX_die_offset: 0x0000001a 127; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 128; BOLT-NEXT: } 129; BOLT-NEXT: } 130; BOLT-NEXT: Name 6 { 131; BOLT-NEXT: Hash: 0x7C9A7F6A 132; BOLT-NEXT: String: {{.+}} "main" 133; BOLT-NEXT: Entry @ {{.+}} { 134; BOLT-NEXT: Abbrev: [[ABBREV4]] 135; BOLT-NEXT: Tag: DW_TAG_subprogram 136; BOLT-NEXT: DW_IDX_compile_unit: 0x00 137; BOLT-NEXT: DW_IDX_die_offset: 0x0000001a 138; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 139; BOLT-NEXT: } 140; BOLT-NEXT: } 141; BOLT-NEXT: ] 142; BOLT-NEXT: Bucket 4 [ 143; BOLT-NEXT: EMPTY 144; BOLT-NEXT: ] 145; BOLT-NEXT: Bucket 5 [ 146; BOLT-NEXT: Name 7 { 147; BOLT-NEXT: Hash: 0x7C952063 148; BOLT-NEXT: String: {{.+}} "char" 149; BOLT-NEXT: Entry @ {{.+}} { 150; BOLT-NEXT: Abbrev: [[ABBREV2]] 151; BOLT-NEXT: Tag: DW_TAG_base_type 152; BOLT-NEXT: DW_IDX_compile_unit: 0x00 153; BOLT-NEXT: DW_IDX_die_offset: 0x00000064 154; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 155; BOLT-NEXT: } 156; BOLT-NEXT: } 157; BOLT-NEXT: ] 158; BOLT-NEXT: Bucket 6 [ 159; BOLT-NEXT: EMPTY 160; BOLT-NEXT: ] 161; BOLT-NEXT: } 162