xref: /llvm-project/llvm/test/tools/llvm-dwarfutil/ELF/X86/dwarf5-loclists.test (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1## Test that DWARFv5 .debug_loclists is correctly recognized
2## and converted into the DW_FORM_sec_offset form in --garbage-collection
3## case or correctly preserved in --no-garbage-collection case.
4
5# RUN: yaml2obj %s -o %t.o
6
7# RUN: llvm-dwarfutil %t.o %t1
8# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
9# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK
10
11# RUN: llvm-dwarfutil --no-garbage-collection %t.o %t1
12# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
13# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
14
15# RUN: llvm-dwarfutil --no-garbage-collection --build-accelerator=DWARF %t.o %t1
16# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
17# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
18
19# RUN: llvm-dwarfutil --linker parallel %t.o %t1
20# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
21# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix DWARF-CHECK
22
23# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection %t.o %t1
24# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
25# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
26
27# RUN: llvm-dwarfutil --linker parallel --no-garbage-collection --build-accelerator=DWARF %t.o %t1
28# RUN: llvm-dwarfdump -verify %t1 | FileCheck %s
29# RUN: llvm-dwarfdump -a --verbose %t1 | FileCheck %s --check-prefix UPD-DWARF-CHECK
30
31#CHECK: No errors.
32
33#DWARF-CHECK: DW_TAG_compile_unit
34#DWARF-CHECK: DW_AT_name {{.*}}"CU1"
35#DWARF-CHECK-NOT: DW_AT_loclists_base
36#DWARF-CHECK: DW_TAG_variable
37#DWARF-CHECK: DW_AT_name {{.*}}"var1"
38#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset]      (0x0000000c:
39#DWARF-CHECK: [0x0000000000001130, 0x0000000000001140): DW_OP_reg5 RDI)
40#DWARF-CHECK: DW_AT_name {{.*}}"var2"
41#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset]     (0x00000014:
42#DWARF-CHECK: <default>: DW_OP_reg5 RDI)
43#DWARF-CHECK: DW_TAG_variable
44#DWARF-CHECK: DW_AT_name {{.*}}"var3"
45#DWARF-CHECK: DW_AT_location [DW_FORM_sec_offset]     (0x00000018:
46#DWARF-CHECK: [0x0000000000001140, 0x0000000000001150): DW_OP_reg5 RDI
47#DWARF-CHECK: [0x0000000000001160, 0x0000000000001170): DW_OP_reg6 RBP)
48
49#UPD-DWARF-CHECK: DW_TAG_compile_unit
50#UPD-DWARF-CHECK:   DW_AT_name {{.*}}"CU1"
51#UPD-DWARF-CHECK:              DW_AT_loclists_base [DW_FORM_sec_offset]  (0x0000000c)
52#UPD-DWARF-CHECK:   DW_TAG_variable
53#UPD-DWARF-CHECK:     DW_AT_name {{.*}}"var1"
54#UPD-DWARF-CHECK:     DW_AT_location [DW_FORM_loclistx]       (indexed (0x0) loclist = 0x00000018:
55#UPD-DWARF-CHECK:     [0x0000000000001130, 0x0000000000001140): DW_OP_reg5 RDI)
56#UPD-DWARF-CHECK:   DW_TAG_variable
57#UPD-DWARF-CHECK:     DW_AT_name {{.*}}"var2"
58#UPD-DWARF-CHECK:     DW_AT_location [DW_FORM_loclistx]       (indexed (0x1) loclist = 0x0000001e:
59#UPD-DWARF-CHECK:        <default>: DW_OP_reg5 RDI)
60#UPD-DWARF-CHECK:   DW_TAG_variable
61#UPD-DWARF-CHECK:     DW_AT_name {{.*}}"var3"
62#UPD-DWARF-CHECK:     DW_AT_location [DW_FORM_loclistx]       (indexed (0x2) loclist = 0x00000022:
63#UPD-DWARF-CHECK:        [0x0000000000001140, 0x0000000000001150): DW_OP_reg5 RDI
64#UPD-DWARF-CHECK:        [0x0000000000001160, 0x0000000000001170): DW_OP_reg6 RBP)
65
66## Following yaml description has Content of the .debug_rnglists exactly like following data vvvvvvvvvvv
67## .debug_rnglists contents:
68## 0x00000000: range list header: length = 0x0000003e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000005
69## offsets: [
70## 0x00000014 => 0x00000020
71## 0x00000018 => 0x00000024
72## 0x0000001c => 0x00000028
73## 0x00000027 => 0x00000033
74## 0x00000032 => 0x0000003e
75## ]
76## ranges:
77## 0x00000020: [DW_RLE_startx_length]:  0x0000000000000000, 0x0000000000000010 => [0x0000000000001130, 0x0000000000001140)
78## 0x00000023: [DW_RLE_end_of_list  ]
79## 0x00000024: [DW_RLE_startx_length]:  0x0000000000000001, 0x0000000000000010 => [0x0000000000001140, 0x0000000000001150)
80## 0x00000027: [DW_RLE_end_of_list  ]
81## 0x00000028: [DW_RLE_start_length ]:  0x0000000000001150, 0x0000000000000010 => [0x0000000000001150, 0x0000000000001160)
82## 0x00000032: [DW_RLE_end_of_list  ]
83## 0x00000033: [DW_RLE_start_length ]:  0x0000000000001160, 0x0000000000000010 => [0x0000000000001160, 0x0000000000001170)
84## 0x0000003d: [DW_RLE_end_of_list  ]
85## 0x0000003e: [DW_RLE_startx_length]:  0x0000000000000000, 0x0000000000000040 => [0x0000000000001130, 0x0000000000001170)
86## 0x00000041: [DW_RLE_end_of_list  ]
87
88
89## Following yaml description has Content of the .debug_loclists exactly like following data vvvvvvvvvvv
90## .debug_loclists contents:
91## 0x00000000: locations list header: length = 0x00000029, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000003
92## offsets: [
93## 0x0000000c => 0x00000018
94## 0x00000012 => 0x0000001e
95## 0x00000016 => 0x00000022
96## ]
97## 0x00000018:
98##             DW_LLE_startx_length   (0x0000000000000000, 0x0000000000000010): DW_OP_reg5 RDI
99##             DW_LLE_end_of_list     ()
100##
101## 0x0000001e:
102##             DW_LLE_default_location()
103##                       => <default>: DW_OP_reg5 RDI
104##             DW_LLE_end_of_list     ()
105##
106## 0x00000022:
107##             DW_LLE_startx_length   (0x0000000000000001, 0x0000000000000010): DW_OP_reg5 RDI
108##             DW_LLE_startx_length   (0x0000000000000003, 0x0000000000000010): DW_OP_reg6 RBP
109##             DW_LLE_end_of_list     ()
110
111--- !ELF
112FileHeader:
113  Class:    ELFCLASS64
114  Data:     ELFDATA2LSB
115  Type:     ET_REL
116  Machine:  EM_X86_64
117Sections:
118  - Name:            .text
119    Type:            SHT_PROGBITS
120    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
121    Address:         0x1130
122    Size:            0x70
123  - Name:            .debug_rnglists
124    Type:            SHT_PROGBITS
125    Flags:           [  ]
126    Content:        "3e000000050008000500000014000000180000001c000000270000003200000003001000030110000750110000000000001000076011000000000000100003004000"
127  - Name:            .debug_loclists
128    Type:            SHT_PROGBITS
129    Flags:           [  ]
130    Content:        "2900000005000800030000000c0000001200000016000000030010015500050155000301100155030310015600"
131DWARF:
132  debug_abbrev:
133    - Table:
134      - Tag:      DW_TAG_compile_unit
135        Children: DW_CHILDREN_yes
136        Attributes:
137          - Attribute: DW_AT_producer
138            Form:      DW_FORM_string
139          - Attribute: DW_AT_language
140            Form:      DW_FORM_data2
141          - Attribute: DW_AT_name
142            Form:      DW_FORM_string
143          - Attribute: DW_AT_low_pc
144            Form:      DW_FORM_addrx
145          - Attribute: DW_AT_ranges
146            Form:      DW_FORM_rnglistx
147          - Attribute: DW_AT_rnglists_base
148            Form:      DW_FORM_sec_offset
149          - Attribute: DW_AT_loclists_base
150            Form:      DW_FORM_sec_offset
151          - Attribute: DW_AT_addr_base
152            Form:      DW_FORM_sec_offset
153      - Tag:      DW_TAG_base_type
154        Children: DW_CHILDREN_no
155        Attributes:
156          - Attribute: DW_AT_name
157            Form:      DW_FORM_string
158      - Tag:      DW_TAG_variable
159        Children: DW_CHILDREN_no
160        Attributes:
161          - Attribute: DW_AT_name
162            Form:      DW_FORM_string
163          - Attribute: DW_AT_const_value
164            Form:      DW_FORM_data4
165          - Attribute: DW_AT_type
166            Form:      DW_FORM_ref_addr
167          - Attribute: DW_AT_location
168            Form:      DW_FORM_loclistx
169  debug_info:
170    - Version: 5
171      UnitType:   DW_UT_compile
172      Entries:
173        - AbbrCode: 1
174          Values:
175            - CStr: by_hand
176            - Value:  0x04
177            - CStr: CU1
178            - Value:  0x0
179            - Value:  0x4
180            - Value:  0xc
181            - Value:  0xc
182            - Value:  0x8
183        - AbbrCode: 2
184          Values:
185            - CStr: int
186        - AbbrCode: 3
187          Values:
188            - CStr: var1
189            - Value:  0x00000000
190            - Value:  0x00000029
191            - Value:  0x0
192        - AbbrCode: 3
193          Values:
194            - CStr: var2
195            - Value:  0x00000000
196            - Value:  0x00000029
197            - Value:  0x1
198        - AbbrCode: 3
199          Values:
200            - CStr: var3
201            - Value:  0x00000000
202            - Value:  0x00000029
203            - Value:  0x2
204        - AbbrCode: 0
205  debug_addr:
206    - Version: 5
207      AddressSize: 0x08
208      Entries:
209        - Address: 0x1130
210        - Address: 0x1140
211        - Address: 0x1150
212        - Address: 0x1160
213...
214