1c2bea66cSGeorge Rimar# REQUIRES: x86 2c2bea66cSGeorge Rimar# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o 38a480d2cSDavid Blaikie# RUN: ld.lld --gdb-index %t1.o -o %t 2>&1 | FileCheck --check-prefix=LLD %s 4c2bea66cSGeorge Rimar# RUN: llvm-dwarfdump -gdb-index %t | FileCheck %s 5c2bea66cSGeorge Rimar 68a480d2cSDavid Blaikie# FIXME: Remove this once lld correctly returns non-zero on errors like this 78a480d2cSDavid Blaikie# There's no other behavior to test hidden behind this error - lld only parses 88a480d2cSDavid Blaikie# the CU for the address ranges, it doesn't need to decode any strings. 98a480d2cSDavid Blaikie# LLD-NOT: error: 108a480d2cSDavid Blaikie 11c2bea66cSGeorge Rimar## The code contains DWARF v5 sections .debug_rnglists and .debug_addr. 12c2bea66cSGeorge Rimar## Check we are able to build the correct address 13c2bea66cSGeorge Rimar## area using address range lists. 14c2bea66cSGeorge Rimar 15c2bea66cSGeorge Rimar# CHECK: .gdb_index contents: 16c2bea66cSGeorge Rimar# CHECK: Address area offset = 0x28, has 2 entries: 17*d4306e90SFangrui Song# CHECK-NEXT: Low/High address = [0x201120, 0x201121) (Size: 0x1), CU id = 0 18*d4306e90SFangrui Song# CHECK-NEXT: Low/High address = [0x201121, 0x201123) (Size: 0x2), CU id = 0 19c2bea66cSGeorge Rimar 20c2bea66cSGeorge Rimar.text 21c2bea66cSGeorge Rimar.section .text._Z3zedv,"ax",@progbits 22c2bea66cSGeorge Rimar.Lfunc_begin0: 23c2bea66cSGeorge Rimar retq 24c2bea66cSGeorge Rimar.Lfunc_end0: 25c2bea66cSGeorge Rimar 26c2bea66cSGeorge Rimar.section .text.main,"ax",@progbits 27c2bea66cSGeorge Rimar.Lfunc_begin1: 28c2bea66cSGeorge Rimar retq 29c2bea66cSGeorge Rimar retq 30c2bea66cSGeorge Rimar.Lfunc_end1: 31c2bea66cSGeorge Rimar 32c2bea66cSGeorge Rimar.section .debug_str_offsets,"",@progbits 33c2bea66cSGeorge Rimar.long 32 34c2bea66cSGeorge Rimar.short 5 35c2bea66cSGeorge Rimar.short 0 36c2bea66cSGeorge Rimar.Lstr_offsets_base0: 37c2bea66cSGeorge Rimar .long .Linfo_string0 38c2bea66cSGeorge Rimar .long .Linfo_string0 39c2bea66cSGeorge Rimar .long .Linfo_string0 40c2bea66cSGeorge Rimar .long .Linfo_string0 41c2bea66cSGeorge Rimar .long .Linfo_string0 42c2bea66cSGeorge Rimar .long .Linfo_string0 43c2bea66cSGeorge Rimar .long .Linfo_string0 44c2bea66cSGeorge Rimar 45c2bea66cSGeorge Rimar.section .debug_str,"MS",@progbits,1 46c2bea66cSGeorge Rimar.Linfo_string0: 47c2bea66cSGeorge Rimar .asciz "stub" 48c2bea66cSGeorge Rimar 49c2bea66cSGeorge Rimar.section .debug_abbrev,"",@progbits 50c2bea66cSGeorge Rimar .byte 1 # Abbreviation Code 51c2bea66cSGeorge Rimar .byte 17 # DW_TAG_compile_unit 52c2bea66cSGeorge Rimar .byte 1 # DW_CHILDREN_yes 53c2bea66cSGeorge Rimar .byte 37 # DW_AT_producer 54c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 55c2bea66cSGeorge Rimar .byte 19 # DW_AT_language 56c2bea66cSGeorge Rimar .byte 5 # DW_FORM_data2 57c2bea66cSGeorge Rimar .byte 3 # DW_AT_name 58c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 59c2bea66cSGeorge Rimar .byte 114 # DW_AT_str_offsets_base 60c2bea66cSGeorge Rimar .byte 23 # DW_FORM_sec_offset 61c2bea66cSGeorge Rimar .byte 16 # DW_AT_stmt_list 62c2bea66cSGeorge Rimar .byte 23 # DW_FORM_sec_offset 63c2bea66cSGeorge Rimar .byte 27 # DW_AT_comp_dir 64c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 65c2bea66cSGeorge Rimar .byte 115 # DW_AT_addr_base 66c2bea66cSGeorge Rimar .byte 23 # DW_FORM_sec_offset 67c2bea66cSGeorge Rimar .byte 17 # DW_AT_low_pc 68c2bea66cSGeorge Rimar .byte 1 # DW_FORM_addr 69c2bea66cSGeorge Rimar .byte 85 # DW_AT_ranges 70c2bea66cSGeorge Rimar .byte 35 # DW_FORM_rnglistx 71c2bea66cSGeorge Rimar .byte 116 # DW_AT_rnglists_base 72c2bea66cSGeorge Rimar .byte 23 # DW_FORM_sec_offset 73c2bea66cSGeorge Rimar .byte 0 # EOM(1) 74c2bea66cSGeorge Rimar .byte 0 # EOM(2) 75c2bea66cSGeorge Rimar .byte 2 # Abbreviation Code 76c2bea66cSGeorge Rimar .byte 46 # DW_TAG_subprogram 77c2bea66cSGeorge Rimar .byte 0 # DW_CHILDREN_no 78c2bea66cSGeorge Rimar .byte 17 # DW_AT_low_pc 79c2bea66cSGeorge Rimar .byte 27 # DW_FORM_addrx 80c2bea66cSGeorge Rimar .byte 18 # DW_AT_high_pc 81c2bea66cSGeorge Rimar .byte 6 # DW_FORM_data4 82c2bea66cSGeorge Rimar .byte 64 # DW_AT_frame_base 83c2bea66cSGeorge Rimar .byte 24 # DW_FORM_exprloc 84c2bea66cSGeorge Rimar .byte 110 # DW_AT_linkage_name 85c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 86c2bea66cSGeorge Rimar .byte 3 # DW_AT_name 87c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 88c2bea66cSGeorge Rimar .byte 58 # DW_AT_decl_file 89c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 90c2bea66cSGeorge Rimar .byte 59 # DW_AT_decl_line 91c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 92c2bea66cSGeorge Rimar .byte 73 # DW_AT_type 93c2bea66cSGeorge Rimar .byte 19 # DW_FORM_ref4 94c2bea66cSGeorge Rimar .byte 63 # DW_AT_external 95c2bea66cSGeorge Rimar .byte 25 # DW_FORM_flag_present 96c2bea66cSGeorge Rimar .byte 0 # EOM(1) 97c2bea66cSGeorge Rimar .byte 0 # EOM(2) 98c2bea66cSGeorge Rimar .byte 3 # Abbreviation Code 99c2bea66cSGeorge Rimar .byte 46 # DW_TAG_subprogram 100c2bea66cSGeorge Rimar .byte 0 # DW_CHILDREN_no 101c2bea66cSGeorge Rimar .byte 17 # DW_AT_low_pc 102c2bea66cSGeorge Rimar .byte 27 # DW_FORM_addrx 103c2bea66cSGeorge Rimar .byte 18 # DW_AT_high_pc 104c2bea66cSGeorge Rimar .byte 6 # DW_FORM_data4 105c2bea66cSGeorge Rimar .byte 64 # DW_AT_frame_base 106c2bea66cSGeorge Rimar .byte 24 # DW_FORM_exprloc 107c2bea66cSGeorge Rimar .byte 3 # DW_AT_name 108c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 109c2bea66cSGeorge Rimar .byte 58 # DW_AT_decl_file 110c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 111c2bea66cSGeorge Rimar .byte 59 # DW_AT_decl_line 112c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 113c2bea66cSGeorge Rimar .byte 73 # DW_AT_type 114c2bea66cSGeorge Rimar .byte 19 # DW_FORM_ref4 115c2bea66cSGeorge Rimar .byte 63 # DW_AT_external 116c2bea66cSGeorge Rimar .byte 25 # DW_FORM_flag_present 117c2bea66cSGeorge Rimar .byte 0 # EOM(1) 118c2bea66cSGeorge Rimar .byte 0 # EOM(2) 119c2bea66cSGeorge Rimar .byte 4 # Abbreviation Code 120c2bea66cSGeorge Rimar .byte 36 # DW_TAG_base_type 121c2bea66cSGeorge Rimar .byte 0 # DW_CHILDREN_no 122c2bea66cSGeorge Rimar .byte 3 # DW_AT_name 123c2bea66cSGeorge Rimar .byte 37 # DW_FORM_strx1 124c2bea66cSGeorge Rimar .byte 62 # DW_AT_encoding 125c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 126c2bea66cSGeorge Rimar .byte 11 # DW_AT_byte_size 127c2bea66cSGeorge Rimar .byte 11 # DW_FORM_data1 128c2bea66cSGeorge Rimar .byte 0 # EOM(1) 129c2bea66cSGeorge Rimar .byte 0 # EOM(2) 130c2bea66cSGeorge Rimar .byte 0 # EOM(3) 131c2bea66cSGeorge Rimar 132c2bea66cSGeorge Rimar.section .debug_info,"",@progbits 133c2bea66cSGeorge Rimar.Lcu_begin0: 134c2bea66cSGeorge Rimar .long 75 # Length of Unit 135c2bea66cSGeorge Rimar .short 5 # DWARF version number 136c2bea66cSGeorge Rimar .byte 1 # DWARF Unit Type 137c2bea66cSGeorge Rimar .byte 8 # Address Size (in bytes) 138c2bea66cSGeorge Rimar .long .debug_abbrev # Offset Into Abbrev. Section 139c2bea66cSGeorge Rimar 140c2bea66cSGeorge Rimar .byte 1 # Abbrev [1] 0xc:0x43 DW_TAG_compile_unit 141c2bea66cSGeorge Rimar .byte 0 # DW_AT_producer 142c2bea66cSGeorge Rimar .short 4 # DW_AT_language 143c2bea66cSGeorge Rimar .byte 1 # DW_AT_name 144c2bea66cSGeorge Rimar .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 145c2bea66cSGeorge Rimar .long 0 # DW_AT_stmt_list 146c2bea66cSGeorge Rimar .byte 2 # DW_AT_comp_dir 147c2bea66cSGeorge Rimar .long .Laddr_table_base0 # DW_AT_addr_base 148c2bea66cSGeorge Rimar .quad 0 # DW_AT_low_pc 149c2bea66cSGeorge Rimar .byte 0 # DW_AT_ranges 150c2bea66cSGeorge Rimar .long .Lrnglists_table_base0 # DW_AT_rnglists_base 151c2bea66cSGeorge Rimar 152c2bea66cSGeorge Rimar .byte 2 # Abbrev [2] 0x2b:0x10 DW_TAG_subprogram 153c2bea66cSGeorge Rimar .byte 0 # DW_AT_low_pc 154c2bea66cSGeorge Rimar .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 155c2bea66cSGeorge Rimar .byte 1 # DW_AT_frame_base 156c2bea66cSGeorge Rimar .byte 86 157c2bea66cSGeorge Rimar .byte 3 # DW_AT_linkage_name 158c2bea66cSGeorge Rimar .byte 4 # DW_AT_name 159c2bea66cSGeorge Rimar .byte 1 # DW_AT_decl_file 160c2bea66cSGeorge Rimar .byte 1 # DW_AT_decl_line 161c2bea66cSGeorge Rimar .long 74 # DW_AT_type 162c2bea66cSGeorge Rimar # DW_AT_external 163c2bea66cSGeorge Rimar 164c2bea66cSGeorge Rimar .byte 3 # Abbrev [3] 0x3b:0xf DW_TAG_subprogram 165c2bea66cSGeorge Rimar .byte 1 # DW_AT_low_pc 166c2bea66cSGeorge Rimar .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 167c2bea66cSGeorge Rimar .byte 1 # DW_AT_frame_base 168c2bea66cSGeorge Rimar .byte 86 169c2bea66cSGeorge Rimar .byte 6 # DW_AT_name 170c2bea66cSGeorge Rimar .byte 1 # DW_AT_decl_file 171c2bea66cSGeorge Rimar .byte 5 # DW_AT_decl_line 172c2bea66cSGeorge Rimar .long 74 # DW_AT_type 173c2bea66cSGeorge Rimar # DW_AT_external 174c2bea66cSGeorge Rimar 175c2bea66cSGeorge Rimar .byte 4 # Abbrev [4] 0x4a:0x4 DW_TAG_base_type 176c2bea66cSGeorge Rimar .byte 5 # DW_AT_name 177c2bea66cSGeorge Rimar .byte 5 # DW_AT_encoding 178c2bea66cSGeorge Rimar .byte 4 # DW_AT_byte_size 179c2bea66cSGeorge Rimar .byte 0 # End Of Children Mark 180c2bea66cSGeorge Rimar 181c2bea66cSGeorge Rimar.section .debug_rnglists,"",@progbits 182c2bea66cSGeorge Rimar.long .Ldebug_rnglist_table_end0-.Ldebug_rnglist_table_start0 # Length 183c2bea66cSGeorge Rimar.Ldebug_rnglist_table_start0: 184c2bea66cSGeorge Rimar .short 5 # Version 185c2bea66cSGeorge Rimar .byte 8 # Address size 186c2bea66cSGeorge Rimar .byte 0 # Segment selector size 187c2bea66cSGeorge Rimar .long 1 # Offset entry count 188c2bea66cSGeorge Rimar.Lrnglists_table_base0: 189c2bea66cSGeorge Rimar .long .Ldebug_ranges0-.Lrnglists_table_base0 190c2bea66cSGeorge Rimar.Ldebug_ranges0: 191c2bea66cSGeorge Rimar .byte 3 # DW_RLE_startx_length 192c2bea66cSGeorge Rimar .byte 0 # start index 193c2bea66cSGeorge Rimar .uleb128 .Lfunc_end0-.Lfunc_begin0 # length 194c2bea66cSGeorge Rimar .byte 3 # DW_RLE_startx_length 195c2bea66cSGeorge Rimar .byte 1 # start index 196c2bea66cSGeorge Rimar .uleb128 .Lfunc_end1-.Lfunc_begin1 # length 197c2bea66cSGeorge Rimar .byte 0 # DW_RLE_end_of_list 198c2bea66cSGeorge Rimar.Ldebug_rnglist_table_end0: 199c2bea66cSGeorge Rimar 200c2bea66cSGeorge Rimar.section .debug_addr,"",@progbits 201c2bea66cSGeorge Rimar .long 20 202c2bea66cSGeorge Rimar .short 5 203c2bea66cSGeorge Rimar .byte 8 204c2bea66cSGeorge Rimar .byte 0 205c2bea66cSGeorge Rimar.Laddr_table_base0: 206c2bea66cSGeorge Rimar .quad .Lfunc_begin0 207c2bea66cSGeorge Rimar .quad .Lfunc_begin1 208