1# REQUIRES: x86
2
3# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s > %t
4# RUN: %lldb %t -o "image lookup -v -s lookup_ranges" -o exit | FileCheck %s
5
6# CHECK:  Function: id = {0x0000002b}, name = "ranges", range = [0x0000000000000000-0x0000000000000004)
7# CHECK:    Blocks: id = {0x0000002b}, range = [0x00000000-0x00000004)
8# CHECK-NEXT:       id = {0x0000003f}, ranges = [0x00000001-0x00000002)[0x00000003-0x00000004)
9
10        .text
11        .p2align 12
12ranges:
13        nop
14.Lblock1_begin:
15lookup_ranges:
16        nop
17.Lblock1_end:
18        nop
19.Lblock2_begin:
20        nop
21.Lblock2_end:
22.Lranges_end:
23
24        .section        .debug_abbrev,"",@progbits
25        .byte   1                       # Abbreviation Code
26        .byte   17                      # DW_TAG_compile_unit
27        .byte   1                       # DW_CHILDREN_yes
28        .byte   37                      # DW_AT_producer
29        .byte   8                       # DW_FORM_string
30        .byte   17                      # DW_AT_low_pc
31        .byte   1                       # DW_FORM_addr
32        .byte   18                      # DW_AT_high_pc
33        .byte   6                       # DW_FORM_data4
34        .byte   0                       # EOM(1)
35        .byte   0                       # EOM(2)
36        .byte   2                       # Abbreviation Code
37        .byte   46                      # DW_TAG_subprogram
38        .byte   1                       # DW_CHILDREN_yes
39        .byte   17                      # DW_AT_low_pc
40        .byte   1                       # DW_FORM_addr
41        .byte   18                      # DW_AT_high_pc
42        .byte   6                       # DW_FORM_data4
43        .byte   3                       # DW_AT_name
44        .byte   8                       # DW_FORM_string
45        .byte   0                       # EOM(1)
46        .byte   0                       # EOM(2)
47        .byte   5                       # Abbreviation Code
48        .byte   11                      # DW_TAG_lexical_block
49        .byte   0                       # DW_CHILDREN_no
50        .byte   85                      # DW_AT_ranges
51        .byte   23                      # DW_FORM_sec_offset
52        .byte   0                       # EOM(1)
53        .byte   0                       # EOM(2)
54        .byte   0                       # EOM(3)
55
56        .section        .debug_info,"",@progbits
57.Lcu_begin0:
58        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
59.Ldebug_info_start0:
60        .short  4                       # DWARF version number
61        .long   .debug_abbrev           # Offset Into Abbrev. Section
62        .byte   8                       # Address Size (in bytes)
63        .byte   1                       # Abbrev [1] 0xb:0x7b DW_TAG_compile_unit
64        .asciz  "Hand-written DWARF"    # DW_AT_producer
65        .quad   ranges                  # DW_AT_low_pc
66        .long   .Lranges_end-ranges     # DW_AT_high_pc
67        .byte   2                       # Abbrev [2] 0x2a:0x4d DW_TAG_subprogram
68        .quad   ranges                  # DW_AT_low_pc
69        .long   .Lranges_end-ranges     # DW_AT_high_pc
70        .asciz  "ranges"                # DW_AT_name
71        .byte   5                       # Abbrev [5] 0x61:0x15 DW_TAG_lexical_block
72        .long   .Ldebug_ranges0         # DW_AT_ranges
73        .byte   0                       # End Of Children Mark
74        .byte   0                       # End Of Children Mark
75.Ldebug_info_end0:
76
77        .section        .debug_ranges,"",@progbits
78.Ldebug_ranges0:
79        .quad   .Lblock1_begin-ranges
80        .quad   .Lblock1_end-ranges
81        .quad   .Lblock2_begin-ranges
82        .quad   .Lblock2_end-ranges
83        .quad   0
84        .quad   0
85