1; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-debug-names-main.s -o %tmain.o 2; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-debug-names-helper.s -o %thelper.o 3; RUN: %clang %cflags -gdwarf-5 %tmain.o %thelper.o -o %tmain.exe 4; RUN: llvm-bolt %tmain.exe -o %tmain.exe.bolt --update-debug-sections 5; RUN: llvm-dwarfdump --debug-info -r 0 --debug-names %tmain.exe.bolt > %tlog.txt 6; RUN: cat %tlog.txt | FileCheck -check-prefix=BOLT %s 7 8;; Tests that BOLT correctly generates .debug_names section with two CUs 9 10; BOLT: [[OFFSET1:0x[0-9a-f]*]]: Compile Unit 11; BOLT: [[OFFSET2:0x[0-9a-f]*]]: Compile Unit 12; BOLT: Name Index @ 0x0 { 13; BOLT-NEXT: Header { 14; BOLT-NEXT: Length: 0x1D4 15; BOLT-NEXT: Format: DWARF32 16; BOLT-NEXT: Version: 5 17; BOLT-NEXT: CU count: 2 18; BOLT-NEXT: Local TU count: 0 19; BOLT-NEXT: Foreign TU count: 0 20; BOLT-NEXT: Bucket count: 14 21; BOLT-NEXT: Name count: 15 22; BOLT-NEXT: Abbreviations table size: 0x3D 23; BOLT-NEXT: Augmentation: 'BOLT' 24; BOLT-NEXT: } 25; BOLT-NEXT: Compilation Unit offsets [ 26; BOLT-NEXT: CU[0]: [[OFFSET1]] 27; BOLT-NEXT: CU[1]: [[OFFSET2]] 28; BOLT-NEXT: ] 29; BOLT-NEXT: Abbreviations [ 30; BOLT-NEXT: Abbreviation [[ABBREV1:0x[0-9a-f]*]] { 31; BOLT-NEXT: Tag: DW_TAG_structure_type 32; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 33; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 34; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 35; BOLT-NEXT: } 36; BOLT-NEXT: Abbreviation [[ABBREV2:0x[0-9a-f]*]] { 37; BOLT-NEXT: Tag: DW_TAG_namespace 38; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 39; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 40; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 41; BOLT-NEXT: } 42; BOLT-NEXT: Abbreviation [[ABBREV3:0x[0-9a-f]*]] { 43; BOLT-NEXT: Tag: DW_TAG_subprogram 44; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 45; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 46; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 47; BOLT-NEXT: } 48; BOLT-NEXT: Abbreviation [[ABBREV4:0x[0-9a-f]*]] { 49; BOLT-NEXT: Tag: DW_TAG_base_type 50; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 51; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 52; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 53; BOLT-NEXT: } 54; BOLT-NEXT: Abbreviation [[ABBREV5:0x[0-9a-f]*]] { 55; BOLT-NEXT: Tag: DW_TAG_variable 56; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 57; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 58; BOLT-NEXT: DW_IDX_parent: DW_FORM_flag_present 59; BOLT-NEXT: } 60; BOLT-NEXT: Abbreviation [[ABBREV6:0x[0-9a-f]*]] { 61; BOLT-NEXT: Tag: DW_TAG_structure_type 62; BOLT-NEXT: DW_IDX_compile_unit: DW_FORM_data1 63; BOLT-NEXT: DW_IDX_die_offset: DW_FORM_ref4 64; BOLT-NEXT: DW_IDX_parent: DW_FORM_ref4 65; BOLT-NEXT: } 66; BOLT-NEXT: ] 67; BOLT-NEXT: Bucket 0 [ 68; BOLT-NEXT: Name 1 { 69; BOLT-NEXT: Hash: 0x59796C 70; BOLT-NEXT: String: {{.+}} "t3" 71; BOLT-NEXT: Entry @ {{.+}} { 72; BOLT-NEXT: Abbrev: [[ABBREV1]] 73; BOLT-NEXT: Tag: DW_TAG_structure_type 74; BOLT-NEXT: DW_IDX_compile_unit: 0x00 75; BOLT-NEXT: DW_IDX_die_offset: 0x0000002f 76; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 77; BOLT-NEXT: } 78; BOLT-NEXT: } 79; BOLT-NEXT: ] 80; BOLT-NEXT: Bucket 1 [ 81; BOLT-NEXT: Name 2 { 82; BOLT-NEXT: Hash: 0x7C96E4DB 83; BOLT-NEXT: String: {{.+}} "Foo2" 84; BOLT-NEXT: Entry @ {{.+}} { 85; BOLT-NEXT: Abbrev: [[ABBREV1]] 86; BOLT-NEXT: Tag: DW_TAG_structure_type 87; BOLT-NEXT: DW_IDX_compile_unit: 0x00 88; BOLT-NEXT: DW_IDX_die_offset: 0x000000eb 89; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 90; BOLT-NEXT: } 91; BOLT-NEXT: } 92; BOLT-NEXT: ] 93; BOLT-NEXT: Bucket 2 [ 94; BOLT-NEXT: Name 3 { 95; BOLT-NEXT: Hash: 0x8CFC710C 96; BOLT-NEXT: String: {{.+}} "(anonymous namespace)" 97; BOLT-NEXT: Entry @ [[ENTRY:0x[0-9a-f]*]] { 98; BOLT-NEXT: Abbrev: [[ABBREV2]] 99; BOLT-NEXT: Tag: DW_TAG_namespace 100; BOLT-NEXT: DW_IDX_compile_unit: 0x00 101; BOLT-NEXT: DW_IDX_die_offset: 0x00000061 102; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 103; BOLT-NEXT: } 104; BOLT-NEXT: } 105; BOLT-NEXT: Name 4 { 106; BOLT-NEXT: Hash: 0xBA564846 107; BOLT-NEXT: String: {{.+}} "Foo2Int" 108; BOLT-NEXT: Entry @ {{.+}} { 109; BOLT-NEXT: Abbrev: [[ABBREV1]] 110; BOLT-NEXT: Tag: DW_TAG_structure_type 111; BOLT-NEXT: DW_IDX_compile_unit: 0x01 112; BOLT-NEXT: DW_IDX_die_offset: 0x0000005a 113; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 114; BOLT-NEXT: } 115; BOLT-NEXT: } 116; BOLT-NEXT: ] 117; BOLT-NEXT: Bucket 3 [ 118; BOLT-NEXT: EMPTY 119; BOLT-NEXT: ] 120; BOLT-NEXT: Bucket 4 [ 121; BOLT-NEXT: EMPTY 122; BOLT-NEXT: ] 123; BOLT-NEXT: Bucket 5 [ 124; BOLT-NEXT: Name 5 { 125; BOLT-NEXT: Hash: 0xB887389 126; BOLT-NEXT: String: {{.+}} "Foo" 127; BOLT-NEXT: Entry @ {{.+}} { 128; BOLT-NEXT: Abbrev: [[ABBREV1]] 129; BOLT-NEXT: Tag: DW_TAG_structure_type 130; BOLT-NEXT: DW_IDX_compile_unit: 0x00 131; BOLT-NEXT: DW_IDX_die_offset: 0x000000c9 132; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 133; BOLT-NEXT: } 134; BOLT-NEXT: } 135; BOLT-NEXT: Name 6 { 136; BOLT-NEXT: Hash: 0xB887389 137; BOLT-NEXT: String: {{.+}} "foo" 138; BOLT-NEXT: Entry @ {{.+}} { 139; BOLT-NEXT: Abbrev: [[ABBREV3]] 140; BOLT-NEXT: Tag: DW_TAG_subprogram 141; BOLT-NEXT: DW_IDX_compile_unit: 0x01 142; BOLT-NEXT: DW_IDX_die_offset: 0x00000033 143; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 144; BOLT-NEXT: } 145; BOLT-NEXT: } 146; BOLT-NEXT: Name 7 { 147; BOLT-NEXT: Hash: 0x7C952063 148; BOLT-NEXT: String: {{.+}} "char" 149; BOLT-NEXT: Entry @ {{.+}} { 150; BOLT-NEXT: Abbrev: [[ABBREV4]] 151; BOLT-NEXT: Tag: DW_TAG_base_type 152; BOLT-NEXT: DW_IDX_compile_unit: 0x01 153; BOLT-NEXT: DW_IDX_die_offset: 0x0000009f 154; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 155; BOLT-NEXT: } 156; BOLT-NEXT: Entry @ {{.+}} { 157; BOLT-NEXT: Abbrev: [[ABBREV4]] 158; BOLT-NEXT: Tag: DW_TAG_base_type 159; BOLT-NEXT: DW_IDX_compile_unit: 0x00 160; BOLT-NEXT: DW_IDX_die_offset: 0x000000c5 161; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 162; BOLT-NEXT: } 163; BOLT-NEXT: } 164; BOLT-NEXT: ] 165; BOLT-NEXT: Bucket 6 [ 166; BOLT-NEXT: Name 8 { 167; BOLT-NEXT: Hash: 0x392140FA 168; BOLT-NEXT: String: {{.+}} "t2<&fooint>" 169; BOLT-NEXT: Entry @ {{.+}} { 170; BOLT-NEXT: Abbrev: [[ABBREV1]] 171; BOLT-NEXT: Tag: DW_TAG_structure_type 172; BOLT-NEXT: DW_IDX_compile_unit: 0x00 173; BOLT-NEXT: DW_IDX_die_offset: 0x0000003f 174; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 175; BOLT-NEXT: } 176; BOLT-NEXT: } 177; BOLT-NEXT: Name 9 { 178; BOLT-NEXT: Hash: 0xFDE48034 179; BOLT-NEXT: String: {{.+}} "fooint" 180; BOLT-NEXT: Entry @ {{.+}} { 181; BOLT-NEXT: Abbrev: [[ABBREV5]] 182; BOLT-NEXT: Tag: DW_TAG_variable 183; BOLT-NEXT: DW_IDX_compile_unit: 0x01 184; BOLT-NEXT: DW_IDX_die_offset: 0x00000024 185; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 186; BOLT-NEXT: } 187; BOLT-NEXT: } 188; BOLT-NEXT: ] 189; BOLT-NEXT: Bucket 7 [ 190; BOLT-NEXT: Name 10 { 191; BOLT-NEXT: Hash: 0xB5063D0B 192; BOLT-NEXT: String: {{.+}} "_Z3foov" 193; BOLT-NEXT: Entry @ {{.+}} { 194; BOLT-NEXT: Abbrev: [[ABBREV3]] 195; BOLT-NEXT: Tag: DW_TAG_subprogram 196; BOLT-NEXT: DW_IDX_compile_unit: 0x01 197; BOLT-NEXT: DW_IDX_die_offset: 0x00000033 198; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 199; BOLT-NEXT: } 200; BOLT-NEXT: } 201; BOLT-NEXT: ] 202; BOLT-NEXT: Bucket 8 [ 203; BOLT-NEXT: Name 11 { 204; BOLT-NEXT: Hash: 0x5979AC 205; BOLT-NEXT: String: {{.+}} "v1" 206; BOLT-NEXT: Entry @ {{.+}} { 207; BOLT-NEXT: Abbrev: [[ABBREV5]] 208; BOLT-NEXT: Tag: DW_TAG_variable 209; BOLT-NEXT: DW_IDX_compile_unit: 0x00 210; BOLT-NEXT: DW_IDX_die_offset: 0x00000024 211; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 212; BOLT-NEXT: } 213; BOLT-NEXT: } 214; BOLT-NEXT: ] 215; BOLT-NEXT: Bucket 9 [ 216; BOLT-NEXT: EMPTY 217; BOLT-NEXT: ] 218; BOLT-NEXT: Bucket 10 [ 219; BOLT-NEXT: Name 12 { 220; BOLT-NEXT: Hash: 0xB888030 221; BOLT-NEXT: String: {{.+}} "int" 222; BOLT-NEXT: Entry @ {{.+}} { 223; BOLT-NEXT: Abbrev: [[ABBREV4]] 224; BOLT-NEXT: Tag: DW_TAG_base_type 225; BOLT-NEXT: DW_IDX_compile_unit: 0x01 226; BOLT-NEXT: DW_IDX_die_offset: 0x0000002f 227; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 228; BOLT-NEXT: } 229; BOLT-NEXT: Entry @ {{.+}} { 230; BOLT-NEXT: Abbrev: [[ABBREV4]] 231; BOLT-NEXT: Tag: DW_TAG_base_type 232; BOLT-NEXT: DW_IDX_compile_unit: 0x00 233; BOLT-NEXT: DW_IDX_die_offset: 0x0000005d 234; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 235; BOLT-NEXT: } 236; BOLT-NEXT: } 237; BOLT-NEXT: Name 13 { 238; BOLT-NEXT: Hash: 0xF73809C 239; BOLT-NEXT: String: {{.+}} "Foo2a" 240; BOLT-NEXT: Entry @ {{.+}} { 241; BOLT-NEXT: Abbrev: [[ABBREV1]] 242; BOLT-NEXT: Tag: DW_TAG_structure_type 243; BOLT-NEXT: DW_IDX_compile_unit: 0x01 244; BOLT-NEXT: DW_IDX_die_offset: 0x00000078 245; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 246; BOLT-NEXT: } 247; BOLT-NEXT: Entry @ {{.+}} { 248; BOLT-NEXT: Abbrev: [[ABBREV1]] 249; BOLT-NEXT: Tag: DW_TAG_structure_type 250; BOLT-NEXT: DW_IDX_compile_unit: 0x00 251; BOLT-NEXT: DW_IDX_die_offset: 0x00000104 252; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 253; BOLT-NEXT: } 254; BOLT-NEXT: } 255; BOLT-NEXT: Name 14 { 256; BOLT-NEXT: Hash: 0x7C9A7F6A 257; BOLT-NEXT: String: {{.+}} "main" 258; BOLT-NEXT: Entry @ {{.+}} { 259; BOLT-NEXT: Abbrev: [[ABBREV3]] 260; BOLT-NEXT: Tag: DW_TAG_subprogram 261; BOLT-NEXT: DW_IDX_compile_unit: 0x00 262; BOLT-NEXT: DW_IDX_die_offset: 0x00000073 263; BOLT-NEXT: DW_IDX_parent: <parent not indexed> 264; BOLT-NEXT: } 265; BOLT-NEXT: } 266; BOLT-NEXT: ] 267; BOLT-NEXT: Bucket 11 [ 268; BOLT-NEXT: EMPTY 269; BOLT-NEXT: ] 270; BOLT-NEXT: Bucket 12 [ 271; BOLT-NEXT: Name 15 { 272; BOLT-NEXT: Hash: 0x59796A 273; BOLT-NEXT: String: {{.+}} "t1" 274; BOLT-NEXT: Entry @ {{.+}} { 275; BOLT-NEXT: Abbrev: [[ABBREV6]] 276; BOLT-NEXT: Tag: DW_TAG_structure_type 277; BOLT-NEXT: DW_IDX_compile_unit: 0x00 278; BOLT-NEXT: DW_IDX_die_offset: 0x00000062 279; BOLT-NEXT: DW_IDX_parent: Entry @ [[ENTRY]] 280; BOLT-NEXT: } 281; BOLT-NEXT: } 282; BOLT-NEXT: ] 283; BOLT-NEXT: Bucket 13 [ 284; BOLT-NEXT: EMPTY 285; BOLT-NEXT: ] 286; BOLT-NEXT: } 287