Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / docs / AMDGPUDwarfExtensionsForHeterogeneousDebugging.rst
blob88e9d6131f7ddba38c429fb78bf4ea0bd6ac33f9
1 .. _amdgpu-dwarf-extensions-for-heterogeneous-debugging:
3 ********************************************
4 DWARF Extensions For Heterogeneous Debugging
5 ********************************************
7 .. contents::
8    :local:
10 .. warning::
12    This document describes **provisional extensions** to DWARF Version 5
13    [:ref:`DWARF <amdgpu-dwarf-DWARF>`] to support heterogeneous debugging. It is
14    not currently fully implemented and is subject to change.
16 .. _amdgpu-dwarf-introduction:
18 1. Introduction
19 ===============
21 AMD [:ref:`AMD <amdgpu-dwarf-AMD>`] has been working on supporting heterogeneous
22 computing. A heterogeneous computing program can be written in a high level
23 language such as C++ or Fortran with OpenMP pragmas, OpenCL, or HIP (a portable
24 C++ programming environment for heterogeneous computing [:ref:`HIP
25 <amdgpu-dwarf-HIP>`]). A heterogeneous compiler and runtime allows a program to
26 execute on multiple devices within the same native process. Devices could
27 include CPUs, GPUs, DSPs, FPGAs, or other special purpose accelerators.
28 Currently HIP programs execute on systems with CPUs and GPUs.
30 The AMD [:ref:`AMD <amdgpu-dwarf-AMD>`] ROCm platform [:ref:`AMD-ROCm
31 <amdgpu-dwarf-AMD-ROCm>`] is an implementation of the industry standard for
32 heterogeneous computing devices defined by the Heterogeneous System Architecture
33 (HSA) Foundation [:ref:`HSA <amdgpu-dwarf-HSA>`]. It is open sourced and
34 includes contributions to open source projects such as LLVM [:ref:`LLVM
35 <amdgpu-dwarf-LLVM>`] for compilation and GDB for debugging [:ref:`GDB
36 <amdgpu-dwarf-GDB>`].
38 The LLVM compiler has upstream support for commercially available AMD GPU
39 hardware (AMDGPU) [:ref:`AMDGPU-LLVM <amdgpu-dwarf-AMDGPU-LLVM>`]. The open
40 source ROCgdb [:ref:`AMD-ROCgdb <amdgpu-dwarf-AMD-ROCgdb>`] GDB based debugger
41 also has support for AMDGPU which is being upstreamed. Support for AMDGPU is
42 also being added by third parties to the GCC [:ref:`GCC <amdgpu-dwarf-GCC>`]
43 compiler and the Perforce TotalView HPC Debugger [:ref:`Perforce-TotalView
44 <amdgpu-dwarf-Perforce-TotalView>`].
46 To support debugging heterogeneous programs several features that are not
47 provided by current DWARF Version 5 [:ref:`DWARF <amdgpu-dwarf-DWARF>`] have
48 been identified. The :ref:`amdgpu-dwarf-extensions` section gives an overview of
49 the extensions devised to address the missing features. The extensions seek to
50 be general in nature and backwards compatible with DWARF Version 5. Their goal
51 is to be applicable to meeting the needs of any heterogeneous system and not be
52 vendor or architecture specific. That is followed by appendix
53 :ref:`amdgpu-dwarf-changes-relative-to-dwarf-version-5` which contains the
54 textual changes for the extensions relative to the DWARF Version 5 standard.
55 There are a number of notes included that raise open questions, or provide
56 alternative approaches that may be worth considering. Then appendix
57 :ref:`amdgpu-dwarf-further-examples` links to the AMD GPU specific usage of the
58 extensions that includes an example. Finally, appendix
59 :ref:`amdgpu-dwarf-references` provides references to further information.
61 .. _amdgpu-dwarf-extensions:
63 2. Extensions
64 =============
66 The extensions continue to evolve through collaboration with many individuals and
67 active prototyping within the GDB debugger and LLVM compiler. Input has also
68 been very much appreciated from the developers working on the Perforce TotalView
69 HPC Debugger and GCC compiler.
71 The inputs provided and insights gained so far have been incorporated into this
72 current version. The plan is to participate in upstreaming the work and
73 addressing any feedback. If there is general interest then some or all of these
74 extensions could be submitted as future DWARF standard proposals.
76 The general principles in designing the extensions have been:
78 1.  Be backwards compatible with the DWARF Version 5 [:ref:`DWARF
79     <amdgpu-dwarf-DWARF>`] standard.
81 2.  Be vendor and architecture neutral. They are intended to apply to other
82     heterogeneous hardware devices including GPUs, DSPs, FPGAs, and other
83     specialized hardware. These collectively include similar characteristics and
84     requirements as AMDGPU devices.
86 3.  Provide improved optimization support for non-GPU code. For example, some
87     extensions apply to traditional CPU hardware that supports large vector
88     registers. Compilers can map source languages, and source language
89     extensions, that describe large scale parallel execution, onto the lanes of
90     the vector registers. This is common in programming languages used in ML and
91     HPC.
93 4.  Fully define well-formed DWARF in a consistent style based on the DWARF
94     Version 5 specification.
96 It is possible that some of the generalizations may also benefit other DWARF
97 issues that have been raised.
99 The remainder of this section enumerates the extensions and provides motivation
100 for each in terms of heterogeneous debugging.
102 .. _amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack:
104 2.1 Allow Location Description on the DWARF Expression Stack
105 ------------------------------------------------------------
107 DWARF Version 5 does not allow location descriptions to be entries on the DWARF
108 expression stack. They can only be the final result of the evaluation of a DWARF
109 expression. However, by allowing a location description to be a first-class
110 entry on the DWARF expression stack it becomes possible to compose expressions
111 containing both values and location descriptions naturally. It allows objects to
112 be located in any kind of memory address space, in registers, be implicit
113 values, be undefined, or a composite of any of these.
115 By extending DWARF carefully, all existing DWARF expressions can retain their
116 current semantic meaning. DWARF has implicit conversions that convert from a
117 value that represents an address in the default address space to a memory
118 location description. This can be extended to allow a default address space
119 memory location description to be implicitly converted back to its address
120 value. This allows all DWARF Version 5 expressions to retain their same meaning,
121 while enabling the ability to explicitly create memory location descriptions in
122 non-default address spaces and generalizing the power of composite location
123 descriptions to any kind of location description.
125 For those familiar with the definition of location descriptions in DWARF Version
126 5, the definitions in these extensions are presented differently, but does in
127 fact define the same concept with the same fundamental semantics. However, it
128 does so in a way that allows the concept to extend to support address spaces,
129 bit addressing, the ability for composite location descriptions to be composed
130 of any kind of location description, and the ability to support objects located
131 at multiple places. Collectively these changes expand the set of architectures
132 that can be supported and improves support for optimized code.
134 Several approaches were considered, and the one presented, together with the
135 extensions it enables, appears to be the simplest and cleanest one that offers
136 the greatest improvement of DWARF's ability to support debugging optimized GPU
137 and non-GPU code. Examining the GDB debugger and LLVM compiler, it appears only
138 to require modest changes as they both already have to support general use of
139 location descriptions. It is anticipated that will also be the case for other
140 debuggers and compilers.
142 GDB has been modified to evaluate DWARF Version 5 expressions with location
143 descriptions as stack entries and with implicit conversions. All GDB tests have
144 passed, except one that turned out to be an invalid test case by DWARF Version 5
145 rules. The code in GDB actually became simpler as all evaluation is done on a
146 single stack and there was no longer a need to maintain a separate structure for
147 the location description results. This gives confidence in backwards
148 compatibility.
150 See :ref:`amdgpu-dwarf-expressions` and nested sections.
152 This extension is separately described at *Allow Location Descriptions on the
153 DWARF Expression Stack* [:ref:`AMDGPU-DWARF-LOC
154 <amdgpu-dwarf-AMDGPU-DWARF-LOC>`].
156 2.2 Generalize CFI to Allow Any Location Description Kind
157 ---------------------------------------------------------
159 CFI describes restoring callee saved registers that are spilled. Currently CFI
160 only allows a location description that is a register, memory address, or
161 implicit location description. AMDGPU optimized code may spill scalar registers
162 into portions of vector registers. This requires extending CFI to allow any
163 location description kind to be supported.
165 See :ref:`amdgpu-dwarf-call-frame-information`.
167 2.3 Generalize DWARF Operation Expressions to Support Multiple Places
168 ---------------------------------------------------------------------
170 In DWARF Version 5 a location description is defined as a single location
171 description or a location list. A location list is defined as either
172 effectively an undefined location description or as one or more single
173 location descriptions to describe an object with multiple places.
175 With
176 :ref:`amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack`,
177 the ``DW_OP_push_object_address`` and ``DW_OP_call*`` operations can put a
178 location description on the stack. Furthermore, debugger information entry
179 attributes such as ``DW_AT_data_member_location``, ``DW_AT_use_location``, and
180 ``DW_AT_vtable_elem_location`` are defined as pushing a location description on
181 the expression stack before evaluating the expression.
183 DWARF Version 5 only allows the stack to contain values and so only a single
184 memory address can be on the stack. This makes these operations and attributes
185 incapable of handling location descriptions with multiple places, or places
186 other than memory.
188 Since
189 :ref:`amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack`
190 allows the stack to contain location descriptions, the operations are
191 generalized to support location descriptions that can have multiple places. This
192 is backwards compatible with DWARF Version 5 and allows objects with multiple
193 places to be supported. For example, the expression that describes how to access
194 the field of an object can be evaluated with a location description that has
195 multiple places and will result in a location description with multiple places.
197 With this change, the separate DWARF Version 5 sections that described DWARF
198 expressions and location lists are unified into a single section that describes
199 DWARF expressions in general. This unification is a natural consequence of, and
200 a necessity of, allowing location descriptions to be part of the evaluation
201 stack.
203 See :ref:`amdgpu-dwarf-location-description`.
205 2.4 Generalize Offsetting of Location Descriptions
206 --------------------------------------------------
208 The ``DW_OP_plus`` and ``DW_OP_minus`` operations can be defined to operate on a
209 memory location description in the default target architecture specific address
210 space and a generic type value to produce an updated memory location
211 description. This allows them to continue to be used to offset an address.
213 To generalize offsetting to any location description, including location
214 descriptions that describe when bytes are in registers, are implicit, or a
215 composite of these, the ``DW_OP_LLVM_offset``, ``DW_OP_LLVM_offset_uconst``, and
216 ``DW_OP_LLVM_bit_offset`` offset operations are added.
218 The offset operations can operate on location storage of any size. For example,
219 implicit location storage could be any number of bits in size. It is simpler to
220 define offsets that exceed the size of the location storage as being an
221 evaluation error, than having to force an implementation to support potentially
222 infinite precision offsets to allow it to correctly track a series of positive
223 and negative offsets that may transiently overflow or underflow, but end up in
224 range. This is simple for the arithmetic operations as they are defined in terms
225 of two's complement arithmetic on a base type of a fixed size. Therefore, the
226 offset operation define that integer overflow is ill-formed. This is in contrast
227 to the ``DW_OP_plus``, ``DW_OP_plus_uconst``, and ``DW_OP_minus`` arithmetic
228 operations which define that it causes wrap-around.
230 Having the offset operations allows ``DW_OP_push_object_address`` to push a
231 location description that may be in a register, or be an implicit value. The
232 DWARF expression of ``DW_TAG_ptr_to_member_type`` can use the offset operations
233 without regard to what kind of location description was pushed.
235 Since
236 :ref:`amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack` has
237 generalized location storage to be bit indexable, ``DW_OP_LLVM_bit_offset``
238 generalizes DWARF to work with bit fields. This is generally not possible in
239 DWARF Version 5.
241 The ``DW_OP_*piece`` operations only allow literal indices. A way to use a
242 computed offset of an arbitrary location description (such as a vector register)
243 is required. The offset operations provide this ability since they can be used
244 to compute a location description on the stack.
246 It could be possible to define ``DW_OP_plus``, ``DW_OP_plus_uconst``, and
247 ``DW_OP_minus`` to operate on location descriptions to avoid needing
248 ``DW_OP_LLVM_offset`` and ``DW_OP_LLVM_offset_uconst``. However, this is not
249 proposed since currently the arithmetic operations are defined to require values
250 of the same base type and produces a result with the same base type. Allowing
251 these operations to act on location descriptions would permit the first operand
252 to be a location description and the second operand to be an integral value
253 type, or vice versa, and return a location description. This complicates the
254 rules for implicit conversions between default address space memory location
255 descriptions and generic base type values. Currently the rules would convert
256 such a location description to the memory address value and then perform two's
257 compliment wrap around arithmetic. If the result was used as a location
258 description, it would be implicitly converted back to a default address space
259 memory location description. This is different to the overflow rules on location
260 descriptions. To allow control, an operation that converts a memory location
261 description to an address integral type value would be required. Keeping a
262 separation of location description operations and arithmetic operations avoids
263 this semantic complexity.
265 See ``DW_OP_LLVM_offset``, ``DW_OP_LLVM_offset_uconst``, and
266 ``DW_OP_LLVM_bit_offset`` in
267 :ref:`amdgpu-dwarf-general-location-description-operations`.
269 2.5 Generalize Creation of Undefined Location Descriptions
270 ----------------------------------------------------------
272 Current DWARF uses an empty expression to indicate an undefined location
273 description. Since
274 :ref:`amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack`
275 allows location descriptions to be created on the stack, it is necessary to have
276 an explicit way to specify an undefined location description.
278 For example, the ``DW_OP_LLVM_select_bit_piece`` (see
279 :ref:`amdgpu-dwarf-support-for-divergent-control-flow-of-simt-hardware`)
280 operation takes more than one location description on the stack. Without this
281 ability, it is not possible to specify that a particular one of the input
282 location descriptions is undefined.
284 See the ``DW_OP_LLVM_undefined`` operation in
285 :ref:`amdgpu-dwarf-undefined-location-description-operations`.
287 2.6 Generalize Creation of Composite Location Descriptions
288 ----------------------------------------------------------
290 To allow composition of composite location descriptions, an explicit operation
291 that indicates the end of the definition of a composite location description is
292 required. This can be implied if the end of a DWARF expression is reached,
293 allowing current DWARF expressions to remain legal.
295 See ``DW_OP_LLVM_piece_end`` in
296 :ref:`amdgpu-dwarf-composite-location-description-operations`.
298 2.7 Generalize DWARF Base Objects to Allow Any Location Description Kind
299 ------------------------------------------------------------------------
301 The number of registers and the cost of memory operations is much higher for
302 AMDGPU than a typical CPU. The compiler attempts to optimize whole variables and
303 arrays into registers.
305 Currently DWARF only allows ``DW_OP_push_object_address`` and related operations
306 to work with a global memory location. To support AMDGPU optimized code it is
307 required to generalize DWARF to allow any location description to be used. This
308 allows registers, or composite location descriptions that may be a mixture of
309 memory, registers, or even implicit values.
311 See ``DW_OP_push_object_address`` in
312 :ref:`amdgpu-dwarf-general-location-description-operations`.
314 2.8 General Support for Address Spaces
315 --------------------------------------
317 AMDGPU needs to be able to describe addresses that are in different kinds of
318 memory. Optimized code may need to describe a variable that resides in pieces
319 that are in different kinds of storage which may include parts of registers,
320 memory that is in a mixture of memory kinds, implicit values, or be undefined.
322 DWARF has the concept of segment addresses. However, the segment cannot be
323 specified within a DWARF expression, which is only able to specify the offset
324 portion of a segment address. The segment index is only provided by the entity
325 that specifies the DWARF expression. Therefore, the segment index is a property
326 that can only be put on complete objects, such as a variable. That makes it only
327 suitable for describing an entity (such as variable or subprogram code) that is
328 in a single kind of memory.
330 AMDGPU uses multiple address spaces. For example, a variable may be allocated in
331 a register that is partially spilled to the call stack which is in the private
332 address space, and partially spilled to the local address space. DWARF mentions
333 address spaces, for example as an argument to the ``DW_OP_xderef*`` operations.
334 A new section that defines address spaces is added (see
335 :ref:`amdgpu-dwarf-address-spaces`).
337 A new attribute ``DW_AT_LLVM_address_space`` is added to pointer and reference
338 types (see :ref:`amdgpu-dwarf-type-modifier-entries`). This allows the compiler
339 to specify which address space is being used to represent the pointer or
340 reference type.
342 DWARF uses the concept of an address in many expression operations but does not
343 define how it relates to address spaces. For example,
344 ``DW_OP_push_object_address`` pushes the address of an object. Other contexts
345 implicitly push an address on the stack before evaluating an expression. For
346 example, the ``DW_AT_use_location`` attribute of the
347 ``DW_TAG_ptr_to_member_type``. The expression belongs to a source language type
348 which may apply to objects allocated in different kinds of storage. Therefore,
349 it is desirable that the expression that uses the address can do so without
350 regard to what kind of storage it specifies, including the address space of a
351 memory location description. For example, a pointer to member value may want to
352 be applied to an object that may reside in any address space.
354 The DWARF ``DW_OP_xderef*`` operations allow a value to be converted into an
355 address of a specified address space which is then read. But it provides no
356 way to create a memory location description for an address in the non-default
357 address space. For example, AMDGPU variables can be allocated in the local
358 address space at a fixed address.
360 The ``DW_OP_LLVM_form_aspace_address`` (see
361 :ref:`amdgpu-dwarf-memory-location-description-operations`) operation is defined
362 to create a memory location description from an address and address space. If
363 can be used to specify the location of a variable that is allocated in a
364 specific address space. This allows the size of addresses in an address space to
365 be larger than the generic type. It also allows a consumer great implementation
366 freedom. It allows the implicit conversion back to a value to be limited only to
367 the default address space to maintain compatibility with DWARF Version 5. For
368 other address spaces the producer can use the new operations that explicitly
369 specify the address space.
371 In contrast, if the ``DW_OP_LLVM_form_aspace_address`` operation had been
372 defined to produce a value, and an implicit conversion to a memory location
373 description was defined, then it would be limited to the size of the generic
374 type (which matches the size of the default address space). An implementation
375 would likely have to use *reserved ranges* of value to represent different
376 address spaces. Such a value would likely not match any address value in the
377 actual hardware. That would require the consumer to have special treatment for
378 such values.
380 ``DW_OP_breg*`` treats the register as containing an address in the default
381 address space. A ``DW_OP_LLVM_aspace_bregx`` (see
382 :ref:`amdgpu-dwarf-memory-location-description-operations`) operation is added
383 to allow the address space of the address held in a register to be specified.
385 Similarly, ``DW_OP_implicit_pointer`` treats its implicit pointer value as being
386 in the default address space. A ``DW_OP_LLVM_aspace_implicit_pointer``
387 (:ref:`amdgpu-dwarf-implicit-location-description-operations`) operation is
388 added to allow the address space to be specified.
390 Almost all uses of addresses in DWARF are limited to defining location
391 descriptions, or to be dereferenced to read memory. The exception is
392 ``DW_CFA_val_offset`` which uses the address to set the value of a register. In
393 order to support address spaces, the CFA DWARF expression is defined to be a
394 memory location description. This allows it to specify an address space which is
395 used to convert the offset address back to an address in that address space. See
396 :ref:`amdgpu-dwarf-call-frame-information`.
398 This approach of extending memory location descriptions to support address
399 spaces, allows all existing DWARF Version 5 expressions to have the identical
400 semantics. It allows the compiler to explicitly specify the address space it is
401 using. For example, a compiler could choose to access private memory in a
402 swizzled manner when mapping a source language thread to the lane of a wavefront
403 in a SIMT manner. Or a compiler could choose to access it in an unswizzled
404 manner if mapping the same language with the wavefront being the thread.
406 It also allows the compiler to mix the address space it uses to access private
407 memory. For example, for SIMT it can still spill entire vector registers in an
408 unswizzled manner, while using a swizzled private memory for SIMT variable
409 access.
411 This approach also allows memory location descriptions for different address
412 spaces to be combined using the regular ``DW_OP_*piece`` operations.
414 Location descriptions are an abstraction of storage. They give freedom to the
415 consumer on how to implement them. They allow the address space to encode lane
416 information so they can be used to read memory with only the memory location
417 description and no extra information. The same set of operations can operate on
418 locations independent of their kind of storage. The ``DW_OP_deref*`` therefore
419 can be used on any storage kind, including memory location descriptions of
420 different address spaces. Therefore, the ``DW_OP_xderef*`` operations are
421 unnecessary, except to become a more compact way to encode a non-default address
422 space address followed by dereferencing it. See
423 :ref:`amdgpu-dwarf-general-operations`.
425 2.9 Support for Vector Base Types
426 ---------------------------------
428 The vector registers of the AMDGPU are represented as their full wavefront
429 size, meaning the wavefront size times the dword size. This reflects the
430 actual hardware and allows the compiler to generate DWARF for languages that
431 map a thread to the complete wavefront. It also allows more efficient DWARF to
432 be generated to describe the CFI as only a single expression is required for
433 the whole vector register, rather than a separate expression for each lane's
434 dword of the vector register. It also allows the compiler to produce DWARF
435 that indexes the vector register if it spills scalar registers into portions
436 of a vector register.
438 Since DWARF stack value entries have a base type and AMDGPU registers are a
439 vector of dwords, the ability to specify that a base type is a vector is
440 required.
442 See ``DW_AT_LLVM_vector_size`` in :ref:`amdgpu-dwarf-base-type-entries`.
444 .. _amdgpu-dwarf-operation-to-create-vector-composite-location-descriptions:
446 2.10 DWARF Operations to Create Vector Composite Location Descriptions
447 ----------------------------------------------------------------------
449 AMDGPU optimized code may spill vector registers to non-global address space
450 memory, and this spilling may be done only for SIMT lanes that are active on
451 entry to the subprogram.
453 To support this, a composite location description that can be created as a
454 masked select is required. In addition, an operation that creates a composite
455 location description that is a vector on another location description is needed.
457 An example that uses these operations is referenced in the
458 :ref:`amdgpu-dwarf-further-examples` appendix.
460 See ``DW_OP_LLVM_select_bit_piece`` and ``DW_OP_LLVM_extend`` in
461 :ref:`amdgpu-dwarf-composite-location-description-operations`.
463 2.11 DWARF Operation to Access Call Frame Entry Registers
464 ---------------------------------------------------------
466 As described in
467 :ref:`amdgpu-dwarf-operation-to-create-vector-composite-location-descriptions`,
468 a DWARF expression involving the set of SIMT lanes active on entry to a
469 subprogram is required. The SIMT active lane mask may be held in a register that
470 is modified as the subprogram executes. However, its value may be saved on entry
471 to the subprogram.
473 The  Call Frame Information (CFI) already encodes such register saving, so it is
474 more efficient to provide an operation to return the location of a saved
475 register than have to generate a loclist to describe the same information. This
476 is now possible since
477 :ref:`amdgpu-dwarf-allow-location-description-on-the-dwarf-evaluation-stack`
478 allows location descriptions on the stack.
480 See ``DW_OP_LLVM_call_frame_entry_reg`` in
481 :ref:`amdgpu-dwarf-general-location-description-operations` and
482 :ref:`amdgpu-dwarf-call-frame-information`.
484 2.12 Support for Source Languages Mapped to SIMT Hardware
485 ---------------------------------------------------------
487 If the source language is mapped onto the AMDGPU wavefronts in a SIMT manner,
488 then the variable DWARF location expressions must compute the location for a
489 single lane of the wavefront. Therefore, a DWARF operation is required to denote
490 the current lane, much like ``DW_OP_push_object_address`` denotes the current
491 object. See ``DW_OP_LLVM_push_lane`` in :ref:`amdgpu-dwarf-literal-operations`.
493 In addition, a way is needed for the compiler to communicate how many source
494 language threads of execution are mapped to a target architecture thread's SIMT
495 lanes. See ``DW_AT_LLVM_lanes`` in :ref:`amdgpu-dwarf-low-level-information`.
497 .. _amdgpu-dwarf-support-for-divergent-control-flow-of-simt-hardware:
499 2.13 Support for Divergent Control Flow of SIMT Hardware
500 --------------------------------------------------------
502 If the source language is mapped onto the AMDGPU wavefronts in a SIMT manner the
503 compiler can use the AMDGPU execution mask register to control which lanes are
504 active. To describe the conceptual location of non-active lanes requires an
505 attribute that has an expression that computes the source location PC for each
506 lane.
508 For efficiency, the expression calculates the source location the wavefront as a
509 whole. This can be done using the ``DW_OP_LLVM_select_bit_piece`` (see
510 :ref:`amdgpu-dwarf-operation-to-create-vector-composite-location-descriptions`)
511 operation.
513 The AMDGPU may update the execution mask to perform whole wavefront operations.
514 Therefore, there is a need for an attribute that computes the current active
515 lane mask. This can have an expression that may evaluate to the SIMT active lane
516 mask register or to a saved mask when in whole wavefront execution mode.
518 An example that uses these attributes is referenced in the
519 :ref:`amdgpu-dwarf-further-examples` appendix.
521 See ``DW_AT_LLVM_lane_pc`` and ``DW_AT_LLVM_active_lane`` in
522 :ref:`amdgpu-dwarf-composite-location-description-operations`.
524 2.14 Define Source Language Memory Classes
525 -------------------------------------------
527 AMDGPU supports languages, such as OpenCL [:ref:`OpenCL <amdgpu-dwarf-OpenCL>`],
528 that define source language memory classes. Support is added to define language
529 specific memory spaces so they can be used in a consistent way by consumers.
531 Support for using memory spaces in defining source language types and data
532 object allocation is also added.
534 See :ref:`amdgpu-dwarf-memory-spaces`.
536 2.15 Define Augmentation Strings to Support Multiple Extensions
537 ---------------------------------------------------------------
539 A ``DW_AT_LLVM_augmentation`` attribute is added to a compilation unit debugger
540 information entry to indicate that there is additional target architecture
541 specific information in the debugging information entries of that compilation
542 unit. This allows a consumer to know what extensions are present in the debugger
543 information entries as is possible with the augmentation string of other
544 sections. See .
546 The format that should be used for an augmentation string is also recommended.
547 This allows a consumer to parse the string when it contains information from
548 multiple vendors. Augmentation strings occur in the ``DW_AT_LLVM_augmentation``
549 attribute, in the lookup by name table, and in the CFI Common Information Entry
550 (CIE).
552 See :ref:`amdgpu-dwarf-full-and-partial-compilation-unit-entries`,
553 :ref:`amdgpu-dwarf-name-index-section-header`, and
554 :ref:`amdgpu-dwarf-structure_of-call-frame-information`.
556 2.16 Support Embedding Source Text for Online Compilation
557 ---------------------------------------------------------
559 AMDGPU supports programming languages that include online compilation where the
560 source text may be created at runtime. For example, the OpenCL and HIP language
561 runtimes support online compilation. To support is, a way to embed the source
562 text in the debug information is provided.
564 See :ref:`amdgpu-dwarf-line-number-information`.
566 2.17 Allow MD5 Checksums to be Optionally Present
567 -------------------------------------------------
569 In DWARF Version 5 the file timestamp and file size can be optional, but if the
570 MD5 checksum is present it must be valid for all files. This is a problem if
571 using link time optimization to combine compilation units where some have MD5
572 checksums and some do not. Therefore, sSupport to allow MD5 checksums to be
573 optionally present in the line table is added.
575 See :ref:`amdgpu-dwarf-line-number-information`.
577 2.18 Add the HIP Programing Language
578 ------------------------------------
580 The HIP programming language [:ref:`HIP <amdgpu-dwarf-HIP>`], which is supported
581 by the AMDGPU, is added.
583 See :ref:`amdgpu-dwarf-language-names-table`.
585 2.19 Support for Source Language Optimizations that Result in Concurrent Iteration Execution
586 --------------------------------------------------------------------------------------------
588 A compiler can perform loop optimizations that result in the generated code
589 executing multiple iterations concurrently. For example, software pipelining
590 schedules multiple iterations in an interleaved fashion to allow the
591 instructions of one iteration to hide the latencies of the instructions of
592 another iteration. Another example is vectorization that can exploit SIMD
593 hardware to allow a single instruction to execute multiple iterations using
594 vector registers.
596 Note that although this is similar to SIMT execution, the way a client debugger
597 uses the information is fundamentally different. In SIMT execution the debugger
598 needs to present the concurrent execution as distinct source language threads
599 that the user can list and switch focus between. With iteration concurrency
600 optimizations, such as software pipelining and vectorized SIMD, the debugger
601 must not present the concurrency as distinct source language threads. Instead,
602 it must inform the user that multiple loop iterations are executing in parallel
603 and allow the user to select between them.
605 In general, SIMT execution fixes the number of concurrent executions per target
606 architecture thread. However, both software pipelining and SIMD vectorization
607 may vary the number of concurrent iterations for different loops executed by a
608 single source language thread.
610 It is possible for the compiler to use both SIMT concurrency and iteration
611 concurrency techniques in the code of a single source language thread.
613 Therefore, a DWARF operation is required to denote the current concurrent
614 iteration instance, much like ``DW_OP_push_object_address`` denotes the current
615 object. See ``DW_OP_LLVM_push_iteration`` in
616 :ref:`amdgpu-dwarf-literal-operations`.
618 In addition, a way is needed for the compiler to communicate how many source
619 language loop iterations are executing concurrently. See
620 ``DW_AT_LLVM_iterations`` in :ref:`amdgpu-dwarf-low-level-information`.
622 2.20 DWARF Operation to Create Runtime Overlay Composite Location Description
623 -----------------------------------------------------------------------------
625 It is common in SIMD vectorization for the compiler to generate code that
626 promotes portions of an array into vector registers. For example, if the
627 hardware has vector registers with 8 elements, and 8 wide SIMD instructions, the
628 compiler may vectorize a loop so that is executes 8 iterations concurrently for
629 each vectorized loop iteration.
631 On the first iteration of the generated vectorized loop, iterations 0 to 7 of
632 the source language loop will be executed using SIMD instructions. Then on the
633 next iteration of the generated vectorized loop, iteration 8 to 15 will be
634 executed, and so on.
636 If the source language loop accesses an array element based on the loop
637 iteration index, the compiler may read the element into a register for the
638 duration of that iteration. Next iteration it will read the next element into
639 the register, and so on. With SIMD, this generalizes to the compiler reading
640 array elements 0 to 7 into a vector register on the first vectorized loop
641 iteration, then array elements 8 to 15 on the next iteration, and so on.
643 The DWARF location description for the array needs to express that all elements
644 are in memory, except the slice that has been promoted to the vector register.
645 The starting position of the slice is a runtime value based on the iteration
646 index modulo the vectorization size. This cannot be expressed by ``DW_OP_piece``
647 and ``DW_OP_bit_piece`` which only allow constant offsets to be expressed.
649 Therefore, a new operator is defined that takes two location descriptions, an
650 offset and a size, and creates a composite that effectively uses the second
651 location description as an overlay of the first, positioned according to the
652 offset and size. See ``DW_OP_LLVM_overlay`` and ``DW_OP_LLVM_bit_overlay`` in
653 :ref:`amdgpu-dwarf-composite-location-description-operations`.
655 Consider an array that has been partially registerized such that the currently
656 processed elements are held in registers, whereas the remainder of the array
657 remains in memory. Consider the loop in this C function, for example:
659 .. code::
660   :number-lines:
662   extern void foo(uint32_t dst[], uint32_t src[], int len) {
663     for (int i = 0; i < len; ++i)
664       dst[i] += src[i];
665   }
667 Inside the loop body, the machine code loads ``src[i]`` and ``dst[i]`` into
668 registers, adds them, and stores the result back into ``dst[i]``.
670 Considering the location of ``dst`` and ``src`` in the loop body, the elements
671 ``dst[i]`` and ``src[i]`` would be located in registers, all other elements are
672 located in memory. Let register ``R0`` contain the base address of ``dst``,
673 register ``R1`` contain ``i``, and register ``R2`` contain the registerized
674 ``dst[i]`` element. We can describe the location of ``dst`` as a memory location
675 with a register location overlaid at a runtime offset involving ``i``:
677 .. code::
678   :number-lines:
680   // 1. Memory location description of dst elements located in memory:
681   DW_OP_breg0 0
683   // 2. Register location description of element dst[i] is located in R2:
684   DW_OP_reg2
686   // 3. Offset of the register within the memory of dst:
687   DW_OP_breg1 0
688   DW_OP_lit4
689   DW_OP_mul
691   // 4. The size of the register element:
692   DW_OP_lit4
694   // 5. Make a composite location description for dst that is the memory #1 with
695   //    the register #2 positioned as an overlay at offset #3 of size #4:
696   DW_OP_LLVM_overlay
698 2.21 Support for Source Language Memory Spaces
699 ----------------------------------------------
701 AMDGPU supports languages, such as OpenCL, that define source language memory
702 spaces. Support is added to define language specific memory spaces so they can
703 be used in a consistent way by consumers. See :ref:`amdgpu-dwarf-memory-spaces`.
705 A new attribute ``DW_AT_LLVM_memory_space`` is added to support using memory
706 spaces in defining source language pointer and reference types (see
707 :ref:`amdgpu-dwarf-type-modifier-entries`) and data object allocation (see
708 :ref:`amdgpu-dwarf-data-object-entries`).
710 2.22 Expression Operation Vendor Extensibility Opcode
711 -----------------------------------------------------
713 The vendor extension encoding space for DWARF expression operations
714 accommodates only 32 unique operations. In practice, the lack of a central
715 registry and a desire for backwards compatibility means vendor extensions are
716 never retired, even when standard versions are accepted into DWARF proper. This
717 has produced a situation where the effective encoding space available for new
718 vendor extensions is miniscule today.
720 To expand this encoding space a new DWARF operation ``DW_OP_LLVM_user`` is
721 added which acts as a "prefix" for vendor extensions. It is followed by a
722 ULEB128 encoded vendor extension opcode, which is then followed by the operands
723 of the corresponding vendor extension operation.
725 This approach allows all remaining operations defined in these extensions to be
726 encoded without conflicting with existing vendor extensions.
728 See ``DW_OP_LLVM_user`` in :ref:`amdgpu-dwarf-vendor-extensions-operations`.
730 .. _amdgpu-dwarf-changes-relative-to-dwarf-version-5:
732 A. Changes Relative to DWARF Version 5
733 ======================================
735 .. note::
737   This appendix provides changes relative to DWARF Version 5. It has been
738   defined such that it is backwards compatible with DWARF Version 5.
739   Non-normative text is shown in *italics*. The section numbers generally
740   correspond to those in the DWARF Version 5 standard unless specified
741   otherwise. Definitions are given for the additional operations, as well as
742   clarifying how existing expression operations, CFI operations, and attributes
743   behave with respect to generalized location descriptions that support address
744   spaces and multiple places.
746   The names for the new operations, attributes, and constants include "\
747   ``LLVM``\ " and are encoded with vendor specific codes so these extensions
748   can be implemented as an LLVM vendor extension to DWARF Version 5. New
749   operations other than ``DW_OP_LLVM_user`` are "prefixed" by
750   ``DW_OP_LLVM_user`` to make enough encoding space available for their
751   implementation.
753   .. note::
755     Notes are included to describe how the changes are to be applied to the
756     DWARF Version 5 standard. They also describe rational and issues that may
757     need further consideration.
759 A.2 General Description
760 -----------------------
762 A.2.2 Attribute Types
763 ~~~~~~~~~~~~~~~~~~~~~
765 .. note::
767   This augments DWARF Version 5 section 2.2 and Table 2.2.
769 The following table provides the additional attributes.
771 .. table:: Attribute names
772    :name: amdgpu-dwarf-attribute-names-table
774    ============================ ====================================
775    Attribute                    Usage
776    ============================ ====================================
777    ``DW_AT_LLVM_active_lane``   SIMT active lanes (see :ref:`amdgpu-dwarf-low-level-information`)
778    ``DW_AT_LLVM_augmentation``  Compilation unit augmentation string (see :ref:`amdgpu-dwarf-full-and-partial-compilation-unit-entries`)
779    ``DW_AT_LLVM_lane_pc``       SIMT lane program location (see :ref:`amdgpu-dwarf-low-level-information`)
780    ``DW_AT_LLVM_lanes``         SIMT lane count (see :ref:`amdgpu-dwarf-low-level-information`)
781    ``DW_AT_LLVM_iterations``    Concurrent iteration count (see :ref:`amdgpu-dwarf-low-level-information`)
782    ``DW_AT_LLVM_vector_size``   Base type vector size (see :ref:`amdgpu-dwarf-base-type-entries`)
783    ``DW_AT_LLVM_address_space`` Architecture specific address space (see :ref:`amdgpu-dwarf-address-spaces`)
784    ``DW_AT_LLVM_memory_space``  Pointer or reference types (see 5.3 "Type Modifier Entries")
785                                 Data objects (see 4.1 "Data Object Entries")
786    ============================ ====================================
788 .. _amdgpu-dwarf-expressions:
790 A.2.5 DWARF Expressions
791 ~~~~~~~~~~~~~~~~~~~~~~~
793 .. note::
795   This section, and its nested sections, replaces DWARF Version 5 section 2.5
796   and section 2.6. The new DWARF expression operation extensions are defined as
797   well as clarifying the extensions to already existing DWARF Version 5
798   operations. It is based on the text of the existing DWARF Version 5 standard.
800 DWARF expressions describe how to compute a value or specify a location.
802 *The evaluation of a DWARF expression can provide the location of an object, the
803 value of an array bound, the length of a dynamic string, the desired value
804 itself, and so on.*
806 If the evaluation of a DWARF expression does not encounter an error, then it can
807 either result in a value (see :ref:`amdgpu-dwarf-expression-value`) or a
808 location description (see :ref:`amdgpu-dwarf-location-description`). When a
809 DWARF expression is evaluated, it may be specified whether a value or location
810 description is required as the result kind.
812 If a result kind is specified, and the result of the evaluation does not match
813 the specified result kind, then the implicit conversions described in
814 :ref:`amdgpu-dwarf-memory-location-description-operations` are performed if
815 valid. Otherwise, the DWARF expression is ill-formed.
817 If the evaluation of a DWARF expression encounters an evaluation error, then the
818 result is an evaluation error.
820 .. note::
822   Decided to define the concept of an evaluation error. An alternative is to
823   introduce an undefined value base type in a similar way to location
824   descriptions having an undefined location description. Then operations that
825   encounter an evaluation error can return the undefined location description or
826   value with an undefined base type.
828   All operations that act on values would return an undefined entity if given an
829   undefined value. The expression would then always evaluate to completion, and
830   can be tested to determine if it is an undefined entity.
832   However, this would add considerable additional complexity and does not match
833   that GDB throws an exception when these evaluation errors occur.
835 If a DWARF expression is ill-formed, then the result is undefined.
837 The following sections detail the rules for when a DWARF expression is
838 ill-formed or results in an evaluation error.
840 A DWARF expression can either be encoded as an operation expression (see
841 :ref:`amdgpu-dwarf-operation-expressions`), or as a location list expression
842 (see :ref:`amdgpu-dwarf-location-list-expressions`).
844 .. _amdgpu-dwarf-expression-evaluation-context:
846 A.2.5.1 DWARF Expression Evaluation Context
847 +++++++++++++++++++++++++++++++++++++++++++
849 A DWARF expression is evaluated in a context that can include a number of
850 context elements. If multiple context elements are specified then they must be
851 self consistent or the result of the evaluation is undefined. The context
852 elements that can be specified are:
854 *A current result kind*
856   The kind of result required by the DWARF expression evaluation. If specified
857   it can be a location description or a value.
859 *A current thread*
861   The target architecture thread identifier. For source languages that are not
862   implemented using a SIMT execution model, this corresponds to the source
863   program thread of execution for which a user presented expression is currently
864   being evaluated. For source languages that are implemented using a SIMT
865   execution model, this together with the current lane corresponds to the source
866   program thread of execution for which a user presented expression is currently
867   being evaluated.
869   It is required for operations that are related to target architecture threads.
871   *For example, the* ``DW_OP_regval_type`` *operation, or the*
872   ``DW_OP_form_tls_address`` *and* ``DW_OP_LLVM_form_aspace_address``
873   *operations when given an address space that is target architecture thread
874   specific.*
876 *A current lane*
878   The 0 based SIMT lane identifier to be used in evaluating a user presented
879   expression. This applies to source languages that are implemented for a target
880   architecture using a SIMT execution model. These implementations map source
881   language threads of execution to lanes of the target architecture threads.
883   It is required for operations that are related to SIMT lanes.
885   *For example, the* ``DW_OP_LLVM_push_lane`` *operation and*
886   ``DW_OP_LLVM_form_aspace_address`` *operation when given an address space that
887   is SIMT lane specific.*
889   If specified, it must be consistent with the value of the ``DW_AT_LLVM_lanes``
890   attribute of the subprogram corresponding to context's frame and program
891   location. It is consistent if the value is greater than or equal to 0 and less
892   than the, possibly default, value of the ``DW_AT_LLVM_lanes`` attribute.
893   Otherwise the result is undefined.
895 *A current iteration*
897   The 0 based source language iteration instance to be used in evaluating a user
898   presented expression. This applies to target architectures that support
899   optimizations that result in executing multiple source language loop iterations
900   concurrently.
902   *For example, software pipelining and SIMD vectorization.*
904   It is required for operations that are related to source language loop
905   iterations.
907   *For example, the* ``DW_OP_LLVM_push_iteration`` *operation.*
909   If specified, it must be consistent with the value of the
910   ``DW_AT_LLVM_iterations`` attribute of the subprogram corresponding to
911   context's frame and program location. It is consistent if the value is greater
912   than or equal to 0 and less than the, possibly default, value of the
913   ``DW_AT_LLVM_iterations`` attribute. Otherwise the result is undefined.
915 *A current call frame*
917   The target architecture call frame identifier. It identifies a call frame that
918   corresponds to an active invocation of a subprogram in the current thread. It
919   is identified by its address on the call stack. The address is referred to as
920   the Canonical Frame Address (CFA). The call frame information is used to
921   determine the CFA for the call frames of the current thread's call stack (see
922   :ref:`amdgpu-dwarf-call-frame-information`).
924   It is required for operations that specify target architecture registers to
925   support virtual unwinding of the call stack.
927   *For example, the* ``DW_OP_*reg*`` *operations.*
929   If specified, it must be an active call frame in the current thread. If the
930   current lane is specified, then that lane must have been active on entry to
931   the call frame (see the ``DW_AT_LLVM_lane_pc`` attribute). Otherwise the
932   result is undefined.
934   If it is the currently executing call frame, then it is termed the top call
935   frame.
937 *A current program location*
939   The target architecture program location corresponding to the current call
940   frame of the current thread.
942   The program location of the top call frame is the target architecture program
943   counter for the current thread. The call frame information is used to obtain
944   the value of the return address register to determine the program location of
945   the other call frames (see :ref:`amdgpu-dwarf-call-frame-information`).
947   It is required for the evaluation of location list expressions to select
948   amongst multiple program location ranges. It is required for operations that
949   specify target architecture registers to support virtual unwinding of the call
950   stack (see :ref:`amdgpu-dwarf-call-frame-information`).
952   If specified:
954   * If the current lane is not specified:
956     * If the current call frame is the top call frame, it must be the current
957       target architecture program location.
959     * If the current call frame F is not the top call frame, it must be the
960       program location associated with the call site in the current caller frame
961       F that invoked the callee frame.
963   * If the current lane is specified and the architecture program location LPC
964     computed by the ``DW_AT_LLVM_lane_pc`` attribute for the current lane is not
965     the undefined location description (indicating the lane was not active on
966     entry to the call frame), it must be LPC.
968   * Otherwise the result is undefined.
970 *A current compilation unit*
972   The compilation unit debug information entry that contains the DWARF expression
973   being evaluated.
975   It is required for operations that reference debug information associated with
976   the same compilation unit, including indicating if such references use the
977   32-bit or 64-bit DWARF format. It can also provide the default address space
978   address size if no current target architecture is specified.
980   *For example, the* ``DW_OP_constx`` *and* ``DW_OP_addrx`` *operations.*
982   *Note that this compilation unit may not be the same as the compilation unit
983   determined from the loaded code object corresponding to the current program
984   location. For example, the evaluation of the expression E associated with a*
985   ``DW_AT_location`` *attribute of the debug information entry operand of the*
986   ``DW_OP_call*`` *operations is evaluated with the compilation unit that
987   contains E and not the one that contains the* ``DW_OP_call*`` *operation
988   expression.*
990 *A current target architecture*
992   The target architecture.
994   It is required for operations that specify target architecture specific
995   entities.
997   *For example, target architecture specific entities include DWARF register
998   identifiers, DWARF lane identifiers, DWARF address space identifiers, the
999   default address space, and the address space address sizes.*
1001   If specified:
1003   * If the current frame is specified, then the current target architecture must
1004     be the same as the target architecture of the current frame.
1006   * If the current frame is specified and is the top frame, and if the current
1007     thread is specified, then the current target architecture must be the same
1008     as the target architecture of the current thread.
1010   * If the current compilation unit is specified, then the current target
1011     architecture default address space address size must be the same as the
1012     ``address_size`` field in the header of the current compilation unit and any
1013     associated entry in the ``.debug_aranges`` section.
1015   * If the current program location is specified, then the current target
1016     architecture must be the same as the target architecture of any line number
1017     information entry (see :ref:`amdgpu-dwarf-line-number-information`)
1018     corresponding to the current program location.
1020   * If the current program location is specified, then the current target
1021     architecture default address space address size must be the same as the
1022     ``address_size`` field in the header of any entry corresponding to the
1023     current program location in the ``.debug_addr``, ``.debug_line``,
1024     ``.debug_rnglists``, ``.debug_rnglists.dwo``, ``.debug_loclists``, and
1025     ``.debug_loclists.dwo`` sections.
1027   * Otherwise the result is undefined.
1029 *A current object*
1031   The location description of a program object.
1033   It is required for the ``DW_OP_push_object_address`` operation.
1035   *For example, the* ``DW_AT_data_location`` *attribute on type debug
1036   information entries specifies the program object corresponding to a runtime
1037   descriptor as the current object when it evaluates its associated expression.*
1039   The result is undefined if the location description is invalid (see
1040   :ref:`amdgpu-dwarf-location-description`).
1042 *An initial stack*
1044   This is a list of values or location descriptions that will be pushed on the
1045   operation expression evaluation stack in the order provided before evaluation
1046   of an operation expression starts.
1048   Some debugger information entries have attributes that evaluate their DWARF
1049   expression value with initial stack entries. In all other cases the initial
1050   stack is empty.
1052   The result is undefined if any location descriptions are invalid (see
1053   :ref:`amdgpu-dwarf-location-description`).
1055 If the evaluation requires a context element that is not specified, then the
1056 result of the evaluation is an error.
1058 *A DWARF expression for a location description may be able to be evaluated
1059 without a thread, lane, call frame, program location, or architecture context.
1060 For example, the location of a global variable may be able to be evaluated
1061 without such context. If the expression evaluates with an error then it may
1062 indicate the variable has been optimized and so requires more context.*
1064 *The DWARF expression for call frame information (see*
1065 :ref:`amdgpu-dwarf-call-frame-information`\ *) operations are restricted to
1066 those that do not require the compilation unit context to be specified.*
1068 The DWARF is ill-formed if all the ``address_size`` fields in the headers of all
1069 the entries in the ``.debug_info``, ``.debug_addr``, ``.debug_line``,
1070 ``.debug_rnglists``, ``.debug_rnglists.dwo``, ``.debug_loclists``, and
1071 ``.debug_loclists.dwo`` sections corresponding to any given program location do
1072 not match.
1074 .. _amdgpu-dwarf-expression-value:
1076 A.2.5.2 DWARF Expression Value
1077 ++++++++++++++++++++++++++++++
1079 A value has a type and a literal value. It can represent a literal value of any
1080 supported base type of the target architecture. The base type specifies the
1081 size, encoding, and endianity of the literal value.
1083 .. note::
1085   It may be desirable to add an implicit pointer base type encoding. It would be
1086   used for the type of the value that is produced when the ``DW_OP_deref*``
1087   operation retrieves the full contents of an implicit pointer location storage
1088   created by the ``DW_OP_implicit_pointer`` or
1089   ``DW_OP_LLVM_aspace_implicit_pointer`` operations. The literal value would
1090   record the debugging information entry and byte displacement specified by the
1091   associated ``DW_OP_implicit_pointer`` or
1092   ``DW_OP_LLVM_aspace_implicit_pointer`` operations.
1094 There is a distinguished base type termed the generic type, which is an integral
1095 type that has the size of an address in the target architecture default address
1096 space, a target architecture defined endianity, and unspecified signedness.
1098 *The generic type is the same as the unspecified type used for stack operations
1099 defined in DWARF Version 4 and before.*
1101 An integral type is a base type that has an encoding of ``DW_ATE_signed``,
1102 ``DW_ATE_signed_char``, ``DW_ATE_unsigned``, ``DW_ATE_unsigned_char``,
1103 ``DW_ATE_boolean``, or any target architecture defined integral encoding in the
1104 inclusive range ``DW_ATE_lo_user`` to ``DW_ATE_hi_user``.
1106 .. note::
1108   It is unclear if ``DW_ATE_address`` is an integral type. GDB does not seem to
1109   consider it as integral.
1111 .. _amdgpu-dwarf-location-description:
1113 A.2.5.3 DWARF Location Description
1114 ++++++++++++++++++++++++++++++++++
1116 *Debugging information must provide consumers a way to find the location of
1117 program variables, determine the bounds of dynamic arrays and strings, and
1118 possibly to find the base address of a subprogram’s call frame or the return
1119 address of a subprogram. Furthermore, to meet the needs of recent computer
1120 architectures and optimization techniques, debugging information must be able to
1121 describe the location of an object whose location changes over the object’s
1122 lifetime, and may reside at multiple locations simultaneously during parts of an
1123 object's lifetime.*
1125 Information about the location of program objects is provided by location
1126 descriptions.
1128 Location descriptions can consist of one or more single location descriptions.
1130 A single location description specifies the location storage that holds a
1131 program object and a position within the location storage where the program
1132 object starts. The position within the location storage is expressed as a bit
1133 offset relative to the start of the location storage.
1135 A location storage is a linear stream of bits that can hold values. Each
1136 location storage has a size in bits and can be accessed using a zero-based bit
1137 offset. The ordering of bits within a location storage uses the bit numbering
1138 and direction conventions that are appropriate to the current language on the
1139 target architecture.
1141 There are five kinds of location storage:
1143 *memory location storage*
1144   Corresponds to the target architecture memory address spaces.
1146 *register location storage*
1147   Corresponds to the target architecture registers.
1149 *implicit location storage*
1150   Corresponds to fixed values that can only be read.
1152 *undefined location storage*
1153   Indicates no value is available and therefore cannot be read or written.
1155 *composite location storage*
1156   Allows a mixture of these where some bits come from one location storage and
1157   some from another location storage, or from disjoint parts of the same
1158   location storage.
1160 .. note::
1162   It may be better to add an implicit pointer location storage kind used by the
1163   ``DW_OP_implicit_pointer`` and ``DW_OP_LLVM_aspace_implicit_pointer``
1164   operations. It would specify the debugger information entry and byte offset
1165   provided by the operations.
1167 *Location descriptions are a language independent representation of addressing
1168 rules.*
1170 * *They can be the result of evaluating a debugger information entry attribute
1171   that specifies an operation expression of arbitrary complexity. In this usage
1172   they can describe the location of an object as long as its lifetime is either
1173   static or the same as the lexical block (see
1174   :ref:`amdgpu-dwarf-lexical-block-entries`) that owns it, and it does not move
1175   during its lifetime.*
1177 * *They can be the result of evaluating a debugger information entry attribute
1178   that specifies a location list expression. In this usage they can describe the
1179   location of an object that has a limited lifetime, changes its location during
1180   its lifetime, or has multiple locations over part or all of its lifetime.*
1182 If a location description has more than one single location description, the
1183 DWARF expression is ill-formed if the object value held in each single location
1184 description's position within the associated location storage is not the same
1185 value, except for the parts of the value that are uninitialized.
1187 *A location description that has more than one single location description can
1188 only be created by a location list expression that has overlapping program
1189 location ranges, or certain expression operations that act on a location
1190 description that has more than one single location description. There are no
1191 operation expression operations that can directly create a location description
1192 with more than one single location description.*
1194 *A location description with more than one single location description can be
1195 used to describe objects that reside in more than one piece of storage at the
1196 same time. An object may have more than one location as a result of
1197 optimization. For example, a value that is only read may be promoted from memory
1198 to a register for some region of code, but later code may revert to reading the
1199 value from memory as the register may be used for other purposes. For the code
1200 region where the value is in a register, any change to the object value must be
1201 made in both the register and the memory so both regions of code will read the
1202 updated value.*
1204 *A consumer of a location description with more than one single location
1205 description can read the object's value from any of the single location
1206 descriptions (since they all refer to location storage that has the same value),
1207 but must write any changed value to all the single location descriptions.*
1209 The evaluation of an expression may require context elements to create a
1210 location description. If such a location description is accessed, the storage it
1211 denotes is that associated with the context element values specified when the
1212 location description was created, which may differ from the context at the time
1213 it is accessed.
1215 *For example, creating a register location description requires the thread
1216 context: the location storage is for the specified register of that thread.
1217 Creating a memory location description for an address space may required a
1218 thread and a lane context: the location storage is the memory associated with
1219 that thread and lane.*
1221 If any of the context elements required to create a location description change,
1222 the location description becomes invalid and accessing it is undefined.
1224 *Examples of context that can invalidate a location description are:*
1226 * *The thread context is required and execution causes the thread to terminate.*
1227 * *The call frame context is required and further execution causes the call
1228   frame to return to the calling frame.*
1229 * *The program location is required and further execution of the thread occurs.
1230   That could change the location list entry or call frame information entry that
1231   applies.*
1232 * *An operation uses call frame information:*
1234   * *Any of the frames used in the virtual call frame unwinding return.*
1235   * *The top call frame is used, the program location is used to select the call
1236     frame information entry, and further execution of the thread occurs.*
1238 *A DWARF expression can be used to compute a location description for an object.
1239 A subsequent DWARF expression evaluation can be given the object location
1240 description as the object context or initial stack context to compute a
1241 component of the object. The final result is undefined if the object location
1242 description becomes invalid between the two expression evaluations.*
1244 A change of a thread's program location may not make a location description
1245 invalid, yet may still render it as no longer meaningful. Accessing such a
1246 location description, or using it as the object context or initial stack context
1247 of an expression evaluation, may produce an undefined result.
1249 *For example, a location description may specify a register that no longer holds
1250 the intended program object after a program location change. One way to avoid
1251 such problems is to recompute location descriptions associated with threads when
1252 their program locations change.*
1254 .. _amdgpu-dwarf-operation-expressions:
1256 A.2.5.4 DWARF Operation Expressions
1257 +++++++++++++++++++++++++++++++++++
1259 An operation expression is comprised of a stream of operations, each consisting
1260 of an opcode followed by zero or more operands. The number of operands is
1261 implied by the opcode.
1263 Operations represent a postfix operation on a simple stack machine. Each stack
1264 entry can hold either a value or a location description. Operations can act on
1265 entries on the stack, including adding entries and removing entries. If the kind
1266 of a stack entry does not match the kind required by the operation and is not
1267 implicitly convertible to the required kind (see
1268 :ref:`amdgpu-dwarf-memory-location-description-operations`), then the DWARF
1269 operation expression is ill-formed.
1271 Evaluation of an operation expression starts with an empty stack on which the
1272 entries from the initial stack provided by the context are pushed in the order
1273 provided. Then the operations are evaluated, starting with the first operation
1274 of the stream. Evaluation continues until either an operation has an evaluation
1275 error, or until one past the last operation of the stream is reached.
1277 The result of the evaluation is:
1279 * If an operation has an evaluation error, or an operation evaluates an
1280   expression that has an evaluation error, then the result is an evaluation
1281   error.
1283 * If the current result kind specifies a location description, then:
1285   * If the stack is empty, the result is a location description with one
1286     undefined location description.
1288     *This rule is for backwards compatibility with DWARF Version 5 which has no
1289     explicit operation to create an undefined location description, and uses an
1290     empty operation expression for this purpose.*
1292   * If the top stack entry is a location description, or can be converted
1293     to one (see :ref:`amdgpu-dwarf-memory-location-description-operations`),
1294     then the result is that, possibly converted, location description. Any other
1295     entries on the stack are discarded.
1297   * Otherwise the DWARF expression is ill-formed.
1299     .. note::
1301       Could define this case as returning an implicit location description as
1302       if the ``DW_OP_implicit`` operation is performed.
1304 * If the current result kind specifies a value, then:
1306   * If the top stack entry is a value, or can be converted to one (see
1307     :ref:`amdgpu-dwarf-memory-location-description-operations`), then the result
1308     is that, possibly converted, value. Any other entries on the stack are
1309     discarded.
1311   * Otherwise the DWARF expression is ill-formed.
1313 * If the current result kind is not specified, then:
1315   * If the stack is empty, the result is a location description with one
1316     undefined location description.
1318     *This rule is for backwards compatibility with DWARF Version 5 which has no
1319     explicit operation to create an undefined location description, and uses an
1320     empty operation expression for this purpose.*
1322     .. note::
1324       This rule is consistent with the rule above for when a location
1325       description is requested. However, GDB appears to report this as an error
1326       and no GDB tests appear to cause an empty stack for this case.
1328   * Otherwise, the top stack entry is returned. Any other entries on the stack
1329     are discarded.
1331 An operation expression is encoded as a byte block with some form of prefix that
1332 specifies the byte count. It can be used:
1334 * as the value of a debugging information entry attribute that is encoded using
1335   class ``exprloc`` (see :ref:`amdgpu-dwarf-classes-and-forms`),
1337 * as the operand to certain operation expression operations,
1339 * as the operand to certain call frame information operations (see
1340   :ref:`amdgpu-dwarf-call-frame-information`),
1342 * and in location list entries (see
1343   :ref:`amdgpu-dwarf-location-list-expressions`).
1345 .. _amdgpu-dwarf-vendor-extensions-operations:
1347 A.2.5.4.0 Vendor Extension Operations
1348 #####################################
1350 1.  ``DW_OP_LLVM_user``
1352   ``DW_OP_LLVM_user`` encodes a vendor extension operation. It has at least one
1353   operand: a ULEB128 constant identifying a vendor extension operation. The
1354   remaining operands are defined by the vendor extension. The vendor extension
1355   opcode 0 is reserved and cannot be used by any vendor extension.
1357   *The DW_OP_user encoding space can be understood to supplement the space
1358   defined by DW_OP_lo_user and DW_OP_hi_user that is allocated by the standard
1359   for the same purpose.*
1361 .. _amdgpu-dwarf-stack-operations:
1363 A.2.5.4.1 Stack Operations
1364 ##########################
1366 .. note::
1368   This section replaces DWARF Version 5 section 2.5.1.3.
1370 The following operations manipulate the DWARF stack. Operations that index the
1371 stack assume that the top of the stack (most recently added entry) has index 0.
1372 They allow the stack entries to be either a value or location description.
1374 If any stack entry accessed by a stack operation is an incomplete composite
1375 location description (see
1376 :ref:`amdgpu-dwarf-composite-location-description-operations`), then the DWARF
1377 expression is ill-formed.
1379 .. note::
1381   These operations now support stack entries that are values and location
1382   descriptions.
1384 .. note::
1386   If it is desired to also make them work with incomplete composite location
1387   descriptions, then would need to define that the composite location storage
1388   specified by the incomplete composite location description is also replicated
1389   when a copy is pushed. This ensures that each copy of the incomplete composite
1390   location description can update the composite location storage they specify
1391   independently.
1393 1.  ``DW_OP_dup``
1395     ``DW_OP_dup`` duplicates the stack entry at the top of the stack.
1397 2.  ``DW_OP_drop``
1399     ``DW_OP_drop`` pops the stack entry at the top of the stack and discards it.
1401 3.  ``DW_OP_pick``
1403     ``DW_OP_pick`` has a single unsigned 1-byte operand that represents an index
1404     I. A copy of the stack entry with index I is pushed onto the stack.
1406 4.  ``DW_OP_over``
1408     ``DW_OP_over`` pushes a copy of the entry with index 1.
1410     *This is equivalent to a* ``DW_OP_pick 1`` *operation.*
1412 5.  ``DW_OP_swap``
1414     ``DW_OP_swap`` swaps the top two stack entries. The entry at the top of the
1415     stack becomes the second stack entry, and the second stack entry becomes the
1416     top of the stack.
1418 6.  ``DW_OP_rot``
1420     ``DW_OP_rot`` rotates the first three stack entries. The entry at the top of
1421     the stack becomes the third stack entry, the second entry becomes the top of
1422     the stack, and the third entry becomes the second entry.
1424 *Examples illustrating many of these stack operations are found in Appendix
1425 D.1.2 on page 289.*
1427 .. _amdgpu-dwarf-control-flow-operations:
1429 A.2.5.4.2 Control Flow Operations
1430 #################################
1432 .. note::
1434   This section replaces DWARF Version 5 section 2.5.1.5.
1436 The following operations provide simple control of the flow of a DWARF operation
1437 expression.
1439 1.  ``DW_OP_nop``
1441     ``DW_OP_nop`` is a place holder. It has no effect on the DWARF stack
1442     entries.
1444 2.  ``DW_OP_le``, ``DW_OP_ge``, ``DW_OP_eq``, ``DW_OP_lt``, ``DW_OP_gt``,
1445     ``DW_OP_ne``
1447     .. note::
1449       The same as in DWARF Version 5 section 2.5.1.5.
1451 3.  ``DW_OP_skip``
1453     ``DW_OP_skip`` is an unconditional branch. Its single operand is a 2-byte
1454     signed integer constant. The 2-byte constant is the number of bytes of the
1455     DWARF expression to skip forward or backward from the current operation,
1456     beginning after the 2-byte constant.
1458     If the updated position is at one past the end of the last operation, then
1459     the operation expression evaluation is complete.
1461     Otherwise, the DWARF expression is ill-formed if the updated operation
1462     position is not in the range of the first to last operation inclusive, or
1463     not at the start of an operation.
1465 4.  ``DW_OP_bra``
1467     ``DW_OP_bra`` is a conditional branch. Its single operand is a 2-byte signed
1468     integer constant. This operation pops the top of stack. If the value popped
1469     is not the constant 0, the 2-byte constant operand is the number of bytes of
1470     the DWARF operation expression to skip forward or backward from the current
1471     operation, beginning after the 2-byte constant.
1473     If the updated position is at one past the end of the last operation, then
1474     the operation expression evaluation is complete.
1476     Otherwise, the DWARF expression is ill-formed if the updated operation
1477     position is not in the range of the first to last operation inclusive, or
1478     not at the start of an operation.
1480 5.  ``DW_OP_call2, DW_OP_call4, DW_OP_call_ref``
1482     ``DW_OP_call2``, ``DW_OP_call4``, and ``DW_OP_call_ref`` perform DWARF
1483     procedure calls during evaluation of a DWARF operation expression.
1485     ``DW_OP_call2`` and ``DW_OP_call4``, have one operand that is, respectively,
1486     a 2-byte or 4-byte unsigned offset DR that represents the byte offset of a
1487     debugging information entry D relative to the beginning of the current
1488     compilation unit.
1490     ``DW_OP_call_ref`` has one operand that is a 4-byte unsigned value in the
1491     32-bit DWARF format, or an 8-byte unsigned value in the 64-bit DWARF format,
1492     that represents the byte offset DR of a debugging information entry D
1493     relative to the beginning of the ``.debug_info`` section that contains the
1494     current compilation unit. D may not be in the current compilation unit.
1496     .. note::
1498       DWARF Version 5 states that DR can be an offset in a ``.debug_info``
1499       section other than the one that contains the current compilation unit. It
1500       states that relocation of references from one executable or shared object
1501       file to another must be performed by the consumer. But given that DR is
1502       defined as an offset in a ``.debug_info`` section this seems impossible.
1503       If DR was defined as an implementation defined value, then the consumer
1504       could choose to interpret the value in an implementation defined manner to
1505       reference a debug information in another executable or shared object.
1507       In ELF the ``.debug_info`` section is in a non-\ ``PT_LOAD`` segment so
1508       standard dynamic relocations cannot be used. But even if they were loaded
1509       segments and dynamic relocations were used, DR would need to be the
1510       address of D, not an offset in a ``.debug_info`` section. That would also
1511       need DR to be the size of a global address. So it would not be possible to
1512       use the 32-bit DWARF format in a 64-bit global address space. In addition,
1513       the consumer would need to determine what executable or shared object the
1514       relocated address was in so it could determine the containing compilation
1515       unit.
1517       GDB only interprets DR as an offset in the ``.debug_info`` section that
1518       contains the current compilation unit.
1520       This comment also applies to ``DW_OP_implicit_pointer`` and
1521       ``DW_OP_LLVM_aspace_implicit_pointer``.
1523     *Operand interpretation of* ``DW_OP_call2``\ *,* ``DW_OP_call4``\ *, and*
1524     ``DW_OP_call_ref`` *is exactly like that for* ``DW_FORM_ref2``\ *,
1525     ``DW_FORM_ref4``\ *, and* ``DW_FORM_ref_addr``\ *, respectively.*
1527     The call operation is evaluated by:
1529     * If D has a ``DW_AT_location`` attribute that is encoded as a ``exprloc``
1530       that specifies an operation expression E, then execution of the current
1531       operation expression continues from the first operation of E. Execution
1532       continues until one past the last operation of E is reached, at which
1533       point execution continues with the operation following the call operation.
1534       The operations of E are evaluated with the same current context, except
1535       current compilation unit is the one that contains D and the stack is the
1536       same as that being used by the call operation. After the call operation
1537       has been evaluated, the stack is therefore as it is left by the evaluation
1538       of the operations of E. Since E is evaluated on the same stack as the call
1539       operation, E can use, and/or remove entries already on the stack, and can
1540       add new entries to the stack.
1542       *Values on the stack at the time of the call may be used as parameters by
1543       the called expression and values left on the stack by the called expression
1544       may be used as return values by prior agreement between the calling and
1545       called expressions.*
1547     * If D has a ``DW_AT_location`` attribute that is encoded as a ``loclist`` or
1548       ``loclistsptr``, then the specified location list expression E is
1549       evaluated. The evaluation of E uses the current context, except the result
1550       kind is a location description, the compilation unit is the one that
1551       contains D, and the initial stack is empty. The location description
1552       result is pushed on the stack.
1554       .. note::
1556         This rule avoids having to define how to execute a matched location list
1557         entry operation expression on the same stack as the call when there are
1558         multiple matches. But it allows the call to obtain the location
1559         description for a variable or formal parameter which may use a location
1560         list expression.
1562         An alternative is to treat the case when D has a ``DW_AT_location``
1563         attribute that is encoded as a ``loclist`` or ``loclistsptr``, and the
1564         specified location list expression E' matches a single location list
1565         entry with operation expression E, the same as the ``exprloc`` case and
1566         evaluate on the same stack.
1568         But this is not attractive as if the attribute is for a variable that
1569         happens to end with a non-singleton stack, it will not simply put a
1570         location description on the stack. Presumably the intent of using
1571         ``DW_OP_call*`` on a variable or formal parameter debugger information
1572         entry is to push just one location description on the stack. That
1573         location description may have more than one single location description.
1575         The previous rule for ``exprloc`` also has the same problem, as normally
1576         a variable or formal parameter location expression may leave multiple
1577         entries on the stack and only return the top entry.
1579         GDB implements ``DW_OP_call*`` by always executing E on the same stack.
1580         If the location list has multiple matching entries, it simply picks the
1581         first one and ignores the rest. This seems fundamentally at odds with
1582         the desire to support multiple places for variables.
1584         So, it feels like ``DW_OP_call*`` should both support pushing a location
1585         description on the stack for a variable or formal parameter, and also
1586         support being able to execute an operation expression on the same stack.
1587         Being able to specify a different operation expression for different
1588         program locations seems a desirable feature to retain.
1590         A solution to that is to have a distinct ``DW_AT_LLVM_proc`` attribute
1591         for the ``DW_TAG_dwarf_procedure`` debugging information entry. Then the
1592         ``DW_AT_location`` attribute expression is always executed separately
1593         and pushes a location description (that may have multiple single
1594         location descriptions), and the ``DW_AT_LLVM_proc`` attribute expression
1595         is always executed on the same stack and can leave anything on the
1596         stack.
1598         The ``DW_AT_LLVM_proc`` attribute could have the new classes
1599         ``exprproc``, ``loclistproc``, and ``loclistsptrproc`` to indicate that
1600         the expression is executed on the same stack. ``exprproc`` is the same
1601         encoding as ``exprloc``. ``loclistproc`` and ``loclistsptrproc`` are the
1602         same encoding as their non-\ ``proc`` counterparts, except the DWARF is
1603         ill-formed if the location list does not match exactly one location list
1604         entry and a default entry is required. These forms indicate explicitly
1605         that the matched single operation expression must be executed on the
1606         same stack. This is better than ad hoc special rules for ``loclistproc``
1607         and ``loclistsptrproc`` which are currently clearly defined to always
1608         return a location description. The producer then explicitly indicates
1609         the intent through the attribute classes.
1611         Such a change would be a breaking change for how GDB implements
1612         ``DW_OP_call*``. However, are the breaking cases actually occurring in
1613         practice? GDB could implement the current approach for DWARF Version 5,
1614         and the new semantics for DWARF Version 6 which has been done for some
1615         other features.
1617         Another option is to limit the execution to be on the same stack only to
1618         the evaluation of an expression E that is the value of a
1619         ``DW_AT_location`` attribute of a ``DW_TAG_dwarf_procedure`` debugging
1620         information entry. The DWARF would be ill-formed if E is a location list
1621         expression that does not match exactly one location list entry. In all
1622         other cases the evaluation of an expression E that is the value of a
1623         ``DW_AT_location`` attribute would evaluate E with the current context,
1624         except the result kind is a location description, the compilation unit
1625         is the one that contains D, and the initial stack is empty. The location
1626         description result is pushed on the stack.
1628     * If D has a ``DW_AT_const_value`` attribute with a value V, then it is as
1629       if a ``DW_OP_implicit_value V`` operation was executed.
1631       *This allows a call operation to be used to compute the location
1632       description for any variable or formal parameter regardless of whether the
1633       producer has optimized it to a constant. This is consistent with the*
1634       ``DW_OP_implicit_pointer`` *operation.*
1636       .. note::
1638         Alternatively, could deprecate using ``DW_AT_const_value`` for
1639         ``DW_TAG_variable`` and ``DW_TAG_formal_parameter`` debugger information
1640         entries that are constants and instead use ``DW_AT_location`` with an
1641         operation expression that results in a location description with one
1642         implicit location description. Then this rule would not be required.
1644     * Otherwise, there is no effect and no changes are made to the stack.
1646       .. note::
1648         In DWARF Version 5, if D does not have a ``DW_AT_location`` then
1649         ``DW_OP_call*`` is defined to have no effect. It is unclear that this is
1650         the right definition as a producer should be able to rely on using
1651         ``DW_OP_call*`` to get a location description for any non-\
1652         ``DW_TAG_dwarf_procedure`` debugging information entries. Also, the
1653         producer should not be creating DWARF with ``DW_OP_call*`` to a
1654         ``DW_TAG_dwarf_procedure`` that does not have a ``DW_AT_location``
1655         attribute. So, should this case be defined as an ill-formed DWARF
1656         expression?
1658     *The* ``DW_TAG_dwarf_procedure`` *debugging information entry can be used to
1659     define DWARF procedures that can be called.*
1661 .. _amdgpu-dwarf-value-operations:
1663 A.2.5.4.3 Value Operations
1664 ##########################
1666 This section describes the operations that push values on the stack.
1668 Each value stack entry has a type and a literal value. It can represent a
1669 literal value of any supported base type of the target architecture. The base
1670 type specifies the size, encoding, and endianity of the literal value.
1672 The base type of value stack entries can be the distinguished generic type.
1674 .. _amdgpu-dwarf-literal-operations:
1676 A.2.5.4.3.1 Literal Operations
1677 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1679 .. note::
1681   This section replaces DWARF Version 5 section 2.5.1.1.
1683 The following operations all push a literal value onto the DWARF stack.
1685 Operations other than ``DW_OP_const_type`` push a value V with the generic type.
1686 If V is larger than the generic type, then V is truncated to the generic type
1687 size and the low-order bits used.
1689 1.  ``DW_OP_lit0``, ``DW_OP_lit1``, ..., ``DW_OP_lit31``
1691     ``DW_OP_lit<N>`` operations encode an unsigned literal value N from 0
1692     through 31, inclusive. They push the value N with the generic type.
1694 2.  ``DW_OP_const1u``, ``DW_OP_const2u``, ``DW_OP_const4u``, ``DW_OP_const8u``
1696     ``DW_OP_const<N>u`` operations have a single operand that is a 1, 2, 4, or
1697     8-byte unsigned integer constant U, respectively. They push the value U with
1698     the generic type.
1700 3.  ``DW_OP_const1s``, ``DW_OP_const2s``, ``DW_OP_const4s``, ``DW_OP_const8s``
1702     ``DW_OP_const<N>s`` operations have a single operand that is a 1, 2, 4, or
1703     8-byte signed integer constant S, respectively. They push the value S with
1704     the generic type.
1706 4.  ``DW_OP_constu``
1708     ``DW_OP_constu`` has a single unsigned LEB128 integer operand N. It pushes
1709     the value N with the generic type.
1711 5.  ``DW_OP_consts``
1713     ``DW_OP_consts`` has a single signed LEB128 integer operand N. It pushes the
1714     value N with the generic type.
1716 6.  ``DW_OP_constx``
1718     ``DW_OP_constx`` has a single unsigned LEB128 integer operand that
1719     represents a zero-based index into the ``.debug_addr`` section relative to
1720     the value of the ``DW_AT_addr_base`` attribute of the associated compilation
1721     unit. The value N in the ``.debug_addr`` section has the size of the generic
1722     type. It pushes the value N with the generic type.
1724     *The* ``DW_OP_constx`` *operation is provided for constants that require
1725     link-time relocation but should not be interpreted by the consumer as a
1726     relocatable address (for example, offsets to thread-local storage).*
1728 7.  ``DW_OP_const_type``
1730     ``DW_OP_const_type`` has three operands. The first is an unsigned LEB128
1731     integer DR that represents the byte offset of a debugging information entry
1732     D relative to the beginning of the current compilation unit, that provides
1733     the type T of the constant value. The second is a 1-byte unsigned integral
1734     constant S. The third is a block of bytes B, with a length equal to S.
1736     TS is the bit size of the type T. The least significant TS bits of B are
1737     interpreted as a value V of the type D. It pushes the value V with the type
1738     D.
1740     The DWARF is ill-formed if D is not a ``DW_TAG_base_type`` debugging
1741     information entry in the current compilation unit, or if TS divided by 8
1742     (the byte size) and rounded up to a whole number is not equal to S.
1744     *While the size of the byte block B can be inferred from the type D
1745     definition, it is encoded explicitly into the operation so that the
1746     operation can be parsed easily without reference to the* ``.debug_info``
1747     *section.*
1749 8.  ``DW_OP_LLVM_push_lane`` *New*
1751     ``DW_OP_LLVM_push_lane`` pushes the current lane as a value with the generic
1752     type.
1754     *For source languages that are implemented using a SIMT execution model,
1755     this is the zero-based lane number that corresponds to the source language
1756     thread of execution upon which the user is focused.*
1758     The value must be greater than or equal to 0 and less than the value of the
1759     ``DW_AT_LLVM_lanes`` attribute, otherwise the DWARF expression is
1760     ill-formed. See :ref:`amdgpu-dwarf-low-level-information`.
1762 9.  ``DW_OP_LLVM_push_iteration`` *New*
1764     ``DW_OP_LLVM_push_iteration`` pushes the current iteration as a value with
1765     the generic type.
1767     *For source language implementations with optimizations that cause multiple
1768     loop iterations to execute concurrently, this is the zero-based iteration
1769     number that corresponds to the source language concurrent loop iteration
1770     upon which the user is focused.*
1772     The value must be greater than or equal to 0 and less than the value of the
1773     ``DW_AT_LLVM_iterations`` attribute, otherwise the DWARF expression is
1774     ill-formed. See :ref:`amdgpu-dwarf-low-level-information`.
1776 .. _amdgpu-dwarf-arithmetic-logical-operations:
1778 A.2.5.4.3.2 Arithmetic and Logical Operations
1779 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1781 .. note::
1783   This section is the same as DWARF Version 5 section 2.5.1.4.
1785 .. _amdgpu-dwarf-type-conversions-operations:
1787 A.2.5.4.3.3 Type Conversion Operations
1788 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1790 .. note::
1792   This section is the same as DWARF Version 5 section 2.5.1.6.
1794 .. _amdgpu-dwarf-general-operations:
1796 A.2.5.4.3.4 Special Value Operations
1797 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1799 .. note::
1801   This section replaces parts of DWARF Version 5 sections 2.5.1.2, 2.5.1.3, and
1802   2.5.1.7.
1804 There are these special value operations currently defined:
1806 1.  ``DW_OP_regval_type``
1808     ``DW_OP_regval_type`` has two operands. The first is an unsigned LEB128
1809     integer that represents a register number R. The second is an unsigned
1810     LEB128 integer DR that represents the byte offset of a debugging information
1811     entry D relative to the beginning of the current compilation unit, that
1812     provides the type T of the register value.
1814     The operation is equivalent to performing ``DW_OP_regx R; DW_OP_deref_type
1815     DR``.
1817     .. note::
1819       Should DWARF allow the type T to be a larger size than the size of the
1820       register R? Restricting a larger bit size avoids any issue of conversion
1821       as the, possibly truncated, bit contents of the register is simply
1822       interpreted as a value of T. If a conversion is wanted it can be done
1823       explicitly using a ``DW_OP_convert`` operation.
1825       GDB has a per register hook that allows a target specific conversion on a
1826       register by register basis. It defaults to truncation of bigger registers.
1827       Removing use of the target hook does not cause any test failures in common
1828       architectures. If the compiler for a target architecture did want some
1829       form of conversion, including a larger result type, it could always
1830       explicitly use the ``DW_OP_convert`` operation.
1832       If T is a larger type than the register size, then the default GDB
1833       register hook reads bytes from the next register (or reads out of bounds
1834       for the last register!). Removing use of the target hook does not cause
1835       any test failures in common architectures (except an illegal hand written
1836       assembly test). If a target architecture requires this behavior, these
1837       extensions allow a composite location description to be used to combine
1838       multiple registers.
1840 2.  ``DW_OP_deref``
1842     S is the bit size of the generic type divided by 8 (the byte size) and
1843     rounded up to a whole number. DR is the offset of a hypothetical debug
1844     information entry D in the current compilation unit for a base type of the
1845     generic type.
1847     The operation is equivalent to performing ``DW_OP_deref_type S, DR``.
1849 3.  ``DW_OP_deref_size``
1851     ``DW_OP_deref_size`` has a single 1-byte unsigned integral constant that
1852     represents a byte result size S.
1854     TS is the smaller of the generic type bit size and S scaled by 8 (the byte
1855     size). If TS is smaller than the generic type bit size then T is an unsigned
1856     integral type of bit size TS, otherwise T is the generic type. DR is the
1857     offset of a hypothetical debug information entry D in the current
1858     compilation unit for a base type T.
1860     .. note::
1862       Truncating the value when S is larger than the generic type matches what
1863       GDB does. This allows the generic type size to not be an integral byte
1864       size. It does allow S to be arbitrarily large. Should S be restricted to
1865       the size of the generic type rounded up to a multiple of 8?
1867     The operation is equivalent to performing ``DW_OP_deref_type S, DR``, except
1868     if T is not the generic type, the value V pushed is zero-extended to the
1869     generic type bit size and its type changed to the generic type.
1871 4.  ``DW_OP_deref_type``
1873     ``DW_OP_deref_type`` has two operands. The first is a 1-byte unsigned
1874     integral constant S. The second is an unsigned LEB128 integer DR that
1875     represents the byte offset of a debugging information entry D relative to
1876     the beginning of the current compilation unit, that provides the type T of
1877     the result value.
1879     TS is the bit size of the type T.
1881     *While the size of the pushed value V can be inferred from the type T, it is
1882     encoded explicitly as the operand S so that the operation can be parsed
1883     easily without reference to the* ``.debug_info`` *section.*
1885     .. note::
1887       It is unclear why the operand S is needed. Unlike ``DW_OP_const_type``,
1888       the size is not needed for parsing. Any evaluation needs to get the base
1889       type T to push with the value to know its encoding and bit size.
1891     It pops one stack entry that must be a location description L.
1893     A value V of TS bits is retrieved from the location storage LS specified by
1894     one of the single location descriptions SL of L.
1896     *If L, or the location description of any composite location description
1897     part that is a subcomponent of L, has more than one single location
1898     description, then any one of them can be selected as they are required to
1899     all have the same value. For any single location description SL, bits are
1900     retrieved from the associated storage location starting at the bit offset
1901     specified by SL. For a composite location description, the retrieved bits
1902     are the concatenation of the N bits from each composite location part PL,
1903     where N is limited to the size of PL.*
1905     V is pushed on the stack with the type T.
1907     .. note::
1909       This definition makes it an evaluation error if L is a register location
1910       description that has less than TS bits remaining in the register storage.
1911       Particularly since these extensions extend location descriptions to have
1912       a bit offset, it would be odd to define this as performing sign extension
1913       based on the type, or be target architecture dependent, as the number of
1914       remaining bits could be any number. This matches the GDB implementation
1915       for ``DW_OP_deref_type``.
1917       These extensions define ``DW_OP_*breg*`` in terms of
1918       ``DW_OP_regval_type``. ``DW_OP_regval_type`` is defined in terms of
1919       ``DW_OP_regx``, which uses a 0 bit offset, and ``DW_OP_deref_type``.
1920       Therefore, it requires the register size to be greater or equal to the
1921       address size of the address space. This matches the GDB implementation for
1922       ``DW_OP_*breg*``.
1924     The DWARF is ill-formed if D is not in the current compilation unit, D is
1925     not a ``DW_TAG_base_type`` debugging information entry, or if TS divided by
1926     8 (the byte size) and rounded up to a whole number is not equal to S.
1928     .. note::
1930       This definition allows the base type to be a bit size since there seems no
1931       reason to restrict it.
1933     It is an evaluation error if any bit of the value is retrieved from the
1934     undefined location storage or the offset of any bit exceeds the size of the
1935     location storage LS specified by any single location description SL of L.
1937     See :ref:`amdgpu-dwarf-implicit-location-description-operations` for special
1938     rules concerning implicit location descriptions created by the
1939     ``DW_OP_implicit_pointer`` and ``DW_OP_LLVM_aspace_implicit_pointer``
1940     operations.
1942 5.  ``DW_OP_xderef`` *Deprecated*
1944     ``DW_OP_xderef`` pops two stack entries. The first must be an integral type
1945     value that represents an address A. The second must be an integral type
1946     value that represents a target architecture specific address space
1947     identifier AS.
1949     The operation is equivalent to performing ``DW_OP_swap;
1950     DW_OP_LLVM_form_aspace_address; DW_OP_deref``. The value V retrieved is left
1951     on the stack with the generic type.
1953     *This operation is deprecated as the* ``DW_OP_LLVM_form_aspace_address``
1954     *operation can be used and provides greater expressiveness.*
1956 6.  ``DW_OP_xderef_size`` *Deprecated*
1958     ``DW_OP_xderef_size`` has a single 1-byte unsigned integral constant that
1959     represents a byte result size S.
1961     It pops two stack entries. The first must be an integral type value that
1962     represents an address A. The second must be an integral type value that
1963     represents a target architecture specific address space identifier AS.
1965     The operation is equivalent to performing ``DW_OP_swap;
1966     DW_OP_LLVM_form_aspace_address; DW_OP_deref_size S``. The zero-extended
1967     value V retrieved is left on the stack with the generic type.
1969     *This operation is deprecated as the* ``DW_OP_LLVM_form_aspace_address``
1970     *operation can be used and provides greater expressiveness.*
1972 7.  ``DW_OP_xderef_type`` *Deprecated*
1974     ``DW_OP_xderef_type`` has two operands. The first is a 1-byte unsigned
1975     integral constant S. The second operand is an unsigned LEB128 integer DR
1976     that represents the byte offset of a debugging information entry D relative
1977     to the beginning of the current compilation unit, that provides the type T
1978     of the result value.
1980     It pops two stack entries. The first must be an integral type value that
1981     represents an address A. The second must be an integral type value that
1982     represents a target architecture specific address space identifier AS.
1984     The operation is equivalent to performing ``DW_OP_swap;
1985     DW_OP_LLVM_form_aspace_address; DW_OP_deref_type S DR``. The value V
1986     retrieved is left on the stack with the type T.
1988     *This operation is deprecated as the* ``DW_OP_LLVM_form_aspace_address``
1989     *operation can be used and provides greater expressiveness.*
1991 8.  ``DW_OP_entry_value`` *Deprecated*
1993     ``DW_OP_entry_value`` pushes the value of an expression that is evaluated in
1994     the context of the calling frame.
1996     *It may be used to determine the value of arguments on entry to the current
1997     call frame provided they are not clobbered.*
1999     It has two operands. The first is an unsigned LEB128 integer S. The second
2000     is a block of bytes, with a length equal S, interpreted as a DWARF
2001     operation expression E.
2003     E is evaluated with the current context, except the result kind is
2004     unspecified, the call frame is the one that called the current frame, the
2005     program location is the call site in the calling frame, the object is
2006     unspecified, and the initial stack is empty. The calling frame information
2007     is obtained by virtually unwinding the current call frame using the call
2008     frame information (see :ref:`amdgpu-dwarf-call-frame-information`).
2010     If the result of E is a location description L (see
2011     :ref:`amdgpu-dwarf-register-location-description-operations`), and the last
2012     operation executed by E is a ``DW_OP_reg*`` for register R with a target
2013     architecture specific base type of T, then the contents of the register are
2014     retrieved as if a ``DW_OP_deref_type DR`` operation was performed where DR
2015     is the offset of a hypothetical debug information entry in the current
2016     compilation unit for T. The resulting value V s pushed on the stack.
2018     *Using* ``DW_OP_reg*`` *provides a more compact form for the case where the
2019     value was in a register on entry to the subprogram.*
2021     .. note::
2023       It is unclear how this provides a more compact expression, as
2024       ``DW_OP_regval_type`` could be used which is marginally larger.
2026     If the result of E is a value V, then V is pushed on the stack.
2028     Otherwise, the DWARF expression is ill-formed.
2030     *The* ``DW_OP_entry_value`` *operation is deprecated as its main usage is
2031     provided by other means. DWARF Version 5 added the*
2032     ``DW_TAG_call_site_parameter`` *debugger information entry for call sites
2033     that has* ``DW_AT_call_value``\ *,* ``DW_AT_call_data_location``\ *, and*
2034     ``DW_AT_call_data_value`` *attributes that provide DWARF expressions to
2035     compute actual parameter values at the time of the call, and requires the
2036     producer to ensure the expressions are valid to evaluate even when virtually
2037     unwound. The* ``DW_OP_LLVM_call_frame_entry_reg`` *operation provides access
2038     to registers in the virtually unwound calling frame.*
2040     .. note::
2042       GDB only implements ``DW_OP_entry_value`` when E is exactly
2043       ``DW_OP_reg*`` or ``DW_OP_breg*; DW_OP_deref*``.
2045 .. _amdgpu-dwarf-location-description-operations:
2047 A.2.5.4.4 Location Description Operations
2048 #########################################
2050 This section describes the operations that push location descriptions on the
2051 stack.
2053 .. _amdgpu-dwarf-general-location-description-operations:
2055 A.2.5.4.4.1 General Location Description Operations
2056 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2058 .. note::
2060   This section replaces part of DWARF Version 5 section 2.5.1.3.
2062 1.  ``DW_OP_LLVM_offset`` *New*
2064     ``DW_OP_LLVM_offset`` pops two stack entries. The first must be an integral
2065     type value that represents a byte displacement B. The second must be a
2066     location description L.
2068     It adds the value of B scaled by 8 (the byte size) to the bit offset of each
2069     single location description SL of L, and pushes the updated L.
2071     It is an evaluation error if the updated bit offset of any SL is less than 0
2072     or greater than or equal to the size of the location storage specified by
2073     SL.
2075 2.  ``DW_OP_LLVM_offset_uconst`` *New*
2077     ``DW_OP_LLVM_offset_uconst`` has a single unsigned LEB128 integer operand
2078     that represents a byte displacement B.
2080     The operation is equivalent to performing ``DW_OP_constu B;
2081     DW_OP_LLVM_offset``.
2083     *This operation is supplied specifically to be able to encode more field
2084     displacements in two bytes than can be done with* ``DW_OP_lit*;
2085     DW_OP_LLVM_offset``\ *.*
2087     .. note::
2089       Should this be named ``DW_OP_LLVM_offset_uconst`` to match
2090       ``DW_OP_plus_uconst``, or ``DW_OP_LLVM_offset_constu`` to match
2091       ``DW_OP_constu``?
2093 3.  ``DW_OP_LLVM_bit_offset`` *New*
2095     ``DW_OP_LLVM_bit_offset`` pops two stack entries. The first must be an
2096     integral type value that represents a bit displacement B. The second must be
2097     a location description L.
2099     It adds the value of B to the bit offset of each single location description
2100     SL of L, and pushes the updated L.
2102     It is an evaluation error if the updated bit offset of any SL is less than 0
2103     or greater than or equal to the size of the location storage specified by
2104     SL.
2106 4.  ``DW_OP_push_object_address``
2108     ``DW_OP_push_object_address`` pushes the location description L of the
2109     current object.
2111     *This object may correspond to an independent variable that is part of a
2112     user presented expression that is being evaluated. The object location
2113     description may be determined from the variable's own debugging information
2114     entry or it may be a component of an array, structure, or class whose
2115     address has been dynamically determined by an earlier step during user
2116     expression evaluation.*
2118     *This operation provides explicit functionality (especially for arrays
2119     involving descriptors) that is analogous to the implicit push of the base
2120     location description of a structure prior to evaluation of a*
2121     ``DW_AT_data_member_location`` *to access a data member of a structure.*
2123     .. note::
2125       This operation could be removed and the object location description
2126       specified as the initial stack as for ``DW_AT_data_member_location``.
2128       Or this operation could be used instead of needing to specify an initial
2129       stack. The latter approach is more composable as access to the object may
2130       be needed at any point of the expression, and passing it as the initial
2131       stack requires the entire expression to be aware where on the stack it is.
2132       If this were done, ``DW_AT_use_location`` would require a
2133       ``DW_OP_push_object2_address`` operation for the second object.
2135       Or a more general way to pass an arbitrary number of arguments in and an
2136       operation to get the Nth one such as ``DW_OP_arg N``. A vector of
2137       arguments would then be passed in the expression context rather than an
2138       initial stack. This could also resolve the issues with ``DW_OP_call*`` by
2139       allowing a specific number of arguments passed in and returned to be
2140       specified. The ``DW_OP_call*`` operation could then always execute on a
2141       separate stack: the number of arguments would be specified in a new call
2142       operation and taken from the callers stack, and similarly the number of
2143       return results specified and copied from the called stack back to the
2144       callee stack when the called expression was complete.
2146       The only attribute that specifies a current object is
2147       ``DW_AT_data_location`` so the non-normative text seems to overstate how
2148       this is being used. Or are there other attributes that need to state they
2149       pass an object?
2151 5.  ``DW_OP_LLVM_call_frame_entry_reg`` *New*
2153     ``DW_OP_LLVM_call_frame_entry_reg`` has a single unsigned LEB128 integer
2154     operand that represents a target architecture register number R.
2156     It pushes a location description L that holds the value of register R on
2157     entry to the current subprogram as defined by the call frame information
2158     (see :ref:`amdgpu-dwarf-call-frame-information`).
2160     *If there is no call frame information defined, then the default rules for
2161     the target architecture are used. If the register rule is* undefined\ *, then
2162     the undefined location description is pushed. If the register rule is* same
2163     value\ *, then a register location description for R is pushed.*
2165 .. _amdgpu-dwarf-undefined-location-description-operations:
2167 A.2.5.4.4.2 Undefined Location Description Operations
2168 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2170 .. note::
2172   This section replaces DWARF Version 5 section 2.6.1.1.1.
2174 *The undefined location storage represents a piece or all of an object that is
2175 present in the source but not in the object code (perhaps due to optimization).
2176 Neither reading nor writing to the undefined location storage is meaningful.*
2178 An undefined location description specifies the undefined location storage.
2179 There is no concept of the size of the undefined location storage, nor of a bit
2180 offset for an undefined location description. The ``DW_OP_LLVM_*offset``
2181 operations leave an undefined location description unchanged. The
2182 ``DW_OP_*piece`` operations can explicitly or implicitly specify an undefined
2183 location description, allowing any size and offset to be specified, and results
2184 in a part with all undefined bits.
2186 1.  ``DW_OP_LLVM_undefined`` *New*
2188     ``DW_OP_LLVM_undefined`` pushes a location description L that comprises one
2189     undefined location description SL.
2191 .. _amdgpu-dwarf-memory-location-description-operations:
2193 A.2.5.4.4.3 Memory Location Description Operations
2194 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2196 .. note::
2198   This section replaces parts of DWARF Version 5 section 2.5.1.1, 2.5.1.2,
2199   2.5.1.3, and 2.6.1.1.2.
2201 Each of the target architecture specific address spaces has a corresponding
2202 memory location storage that denotes the linear addressable memory of that
2203 address space. The size of each memory location storage corresponds to the range
2204 of the addresses in the corresponding address space.
2206 *It is target architecture defined how address space location storage maps to
2207 target architecture physical memory. For example, they may be independent
2208 memory, or more than one location storage may alias the same physical memory
2209 possibly at different offsets and with different interleaving. The mapping may
2210 also be dictated by the source language address classes.*
2212 A memory location description specifies a memory location storage. The bit
2213 offset corresponds to a bit position within a byte of the memory. Bits accessed
2214 using a memory location description, access the corresponding target
2215 architecture memory starting at the bit position within the byte specified by
2216 the bit offset.
2218 A memory location description that has a bit offset that is a multiple of 8 (the
2219 byte size) is defined to be a byte address memory location description. It has a
2220 memory byte address A that is equal to the bit offset divided by 8.
2222 A memory location description that does not have a bit offset that is a multiple
2223 of 8 (the byte size) is defined to be a bit field memory location description.
2224 It has a bit position B equal to the bit offset modulo 8, and a memory byte
2225 address A equal to the bit offset minus B that is then divided by 8.
2227 The address space AS of a memory location description is defined to be the
2228 address space that corresponds to the memory location storage associated with
2229 the memory location description.
2231 A location description that is comprised of one byte address memory location
2232 description SL is defined to be a memory byte address location description. It
2233 has a byte address equal to A and an address space equal to AS of the
2234 corresponding SL.
2236 ``DW_ASPACE_LLVM_none`` is defined as the target architecture default address
2237 space. See :ref:`amdgpu-dwarf-address-spaces`.
2239 If a stack entry is required to be a location description, but it is a value V
2240 with the generic type, then it is implicitly converted to a location description
2241 L with one memory location description SL. SL specifies the memory location
2242 storage that corresponds to the target architecture default address space with a
2243 bit offset equal to V scaled by 8 (the byte size).
2245 .. note::
2247   If it is wanted to allow any integral type value to be implicitly converted to
2248   a memory location description in the target architecture default address
2249   space:
2251     If a stack entry is required to be a location description, but is a value V
2252     with an integral type, then it is implicitly converted to a location
2253     description L with a one memory location description SL. If the type size of
2254     V is less than the generic type size, then the value V is zero extended to
2255     the size of the generic type. The least significant generic type size bits
2256     are treated as an unsigned value to be used as an address A. SL specifies
2257     memory location storage corresponding to the target architecture default
2258     address space with a bit offset equal to A scaled by 8 (the byte size).
2260   The implicit conversion could also be defined as target architecture specific.
2261   For example, GDB checks if V is an integral type. If it is not it gives an
2262   error. Otherwise, GDB zero-extends V to 64 bits. If the GDB target defines a
2263   hook function, then it is called. The target specific hook function can modify
2264   the 64-bit value, possibly sign extending based on the original value type.
2265   Finally, GDB treats the 64-bit value V as a memory location address.
2267 If a stack entry is required to be a location description, but it is an implicit
2268 pointer value IPV with the target architecture default address space, then it is
2269 implicitly converted to a location description with one single location
2270 description specified by IPV. See
2271 :ref:`amdgpu-dwarf-implicit-location-description-operations`.
2273 .. note::
2275   Is this rule required for DWARF Version 5 backwards compatibility? If not, it
2276   can be eliminated, and the producer can use
2277   ``DW_OP_LLVM_form_aspace_address``.
2279 If a stack entry is required to be a value, but it is a location description L
2280 with one memory location description SL in the target architecture default
2281 address space with a bit offset B that is a multiple of 8, then it is implicitly
2282 converted to a value equal to B divided by 8 (the byte size) with the generic
2283 type.
2285 1.  ``DW_OP_addr``
2287     ``DW_OP_addr`` has a single byte constant value operand, which has the size
2288     of the generic type, that represents an address A.
2290     It pushes a location description L with one memory location description SL
2291     on the stack. SL specifies the memory location storage corresponding to the
2292     target architecture default address space with a bit offset equal to A
2293     scaled by 8 (the byte size).
2295     *If the DWARF is part of a code object, then A may need to be relocated. For
2296     example, in the ELF code object format, A must be adjusted by the difference
2297     between the ELF segment virtual address and the virtual address at which the
2298     segment is loaded.*
2300 2.  ``DW_OP_addrx``
2302     ``DW_OP_addrx`` has a single unsigned LEB128 integer operand that represents
2303     a zero-based index into the ``.debug_addr`` section relative to the value of
2304     the ``DW_AT_addr_base`` attribute of the associated compilation unit. The
2305     address value A in the ``.debug_addr`` section has the size of the generic
2306     type.
2308     It pushes a location description L with one memory location description SL
2309     on the stack. SL specifies the memory location storage corresponding to the
2310     target architecture default address space with a bit offset equal to A
2311     scaled by 8 (the byte size).
2313     *If the DWARF is part of a code object, then A may need to be relocated. For
2314     example, in the ELF code object format, A must be adjusted by the difference
2315     between the ELF segment virtual address and the virtual address at which the
2316     segment is loaded.*
2318 3.  ``DW_OP_LLVM_form_aspace_address`` *New*
2320     ``DW_OP_LLVM_form_aspace_address`` pops top two stack entries. The first
2321     must be an integral type value that represents a target architecture
2322     specific address space identifier AS. The second must be an integral type
2323     value that represents an address A.
2325     The address size S is defined as the address bit size of the target
2326     architecture specific address space that corresponds to AS.
2328     A is adjusted to S bits by zero extending if necessary, and then treating
2329     the least significant S bits as an unsigned value A'.
2331     It pushes a location description L with one memory location description SL
2332     on the stack. SL specifies the memory location storage LS that corresponds
2333     to AS with a bit offset equal to A' scaled by 8 (the byte size).
2335     If AS is an address space that is specific to context elements, then LS
2336     corresponds to the location storage associated with the current context.
2338     *For example, if AS is for per thread storage then LS is the location
2339     storage for the current thread. For languages that are implemented using a
2340     SIMT execution model, then if AS is for per lane storage then LS is the
2341     location storage for the current lane of the current thread. Therefore, if L
2342     is accessed by an operation, the location storage selected when the location
2343     description was created is accessed, and not the location storage associated
2344     with the current context of the access operation.*
2346     The DWARF expression is ill-formed if AS is not one of the values defined by
2347     the target architecture specific ``DW_ASPACE_LLVM_*`` values.
2349     See :ref:`amdgpu-dwarf-implicit-location-description-operations` for special
2350     rules concerning implicit pointer values produced by dereferencing implicit
2351     location descriptions created by the ``DW_OP_implicit_pointer`` and
2352     ``DW_OP_LLVM_aspace_implicit_pointer`` operations.
2354 4.  ``DW_OP_form_tls_address``
2356     ``DW_OP_form_tls_address`` pops one stack entry that must be an integral
2357     type value and treats it as a thread-local storage address TA.
2359     It pushes a location description L with one memory location description SL
2360     on the stack. SL is the target architecture specific memory location
2361     description that corresponds to the thread-local storage address TA.
2363     The meaning of the thread-local storage address TA is defined by the
2364     run-time environment. If the run-time environment supports multiple
2365     thread-local storage blocks for a single thread, then the block
2366     corresponding to the executable or shared library containing this DWARF
2367     expression is used.
2369     *Some implementations of C, C++, Fortran, and other languages, support a
2370     thread-local storage class. Variables with this storage class have distinct
2371     values and addresses in distinct threads, much as automatic variables have
2372     distinct values and addresses in each subprogram invocation. Typically,
2373     there is a single block of storage containing all thread-local variables
2374     declared in the main executable, and a separate block for the variables
2375     declared in each shared library. Each thread-local variable can then be
2376     accessed in its block using an identifier. This identifier is typically a
2377     byte offset into the block and pushed onto the DWARF stack by one of the*
2378     ``DW_OP_const*`` *operations prior to the* ``DW_OP_form_tls_address``
2379     *operation. Computing the address of the appropriate block can be complex
2380     (in some cases, the compiler emits a function call to do it), and difficult
2381     to describe using ordinary DWARF location descriptions. Instead of forcing
2382     complex thread-local storage calculations into the DWARF expressions, the*
2383     ``DW_OP_form_tls_address`` *allows the consumer to perform the computation
2384     based on the target architecture specific run-time environment.*
2386 5.  ``DW_OP_call_frame_cfa``
2388     ``DW_OP_call_frame_cfa`` pushes the location description L of the Canonical
2389     Frame Address (CFA) of the current subprogram, obtained from the call frame
2390     information on the stack. See :ref:`amdgpu-dwarf-call-frame-information`.
2392     *Although the value of the* ``DW_AT_frame_base`` *attribute of the debugger
2393     information entry corresponding to the current subprogram can be computed
2394     using a location list expression, in some cases this would require an
2395     extensive location list because the values of the registers used in
2396     computing the CFA change during a subprogram execution. If the call frame
2397     information is present, then it already encodes such changes, and it is
2398     space efficient to reference that using the* ``DW_OP_call_frame_cfa``
2399     *operation.*
2401 6.  ``DW_OP_fbreg``
2403     ``DW_OP_fbreg`` has a single signed LEB128 integer operand that represents a
2404     byte displacement B.
2406     The location description L for the *frame base* of the current subprogram is
2407     obtained from the ``DW_AT_frame_base`` attribute of the debugger information
2408     entry corresponding to the current subprogram as described in
2409     :ref:`amdgpu-dwarf-low-level-information`.
2411     The location description L is updated as if the ``DW_OP_LLVM_offset_uconst
2412     B`` operation was applied. The updated L is pushed on the stack.
2414 7.  ``DW_OP_breg0``, ``DW_OP_breg1``, ..., ``DW_OP_breg31``
2416     The ``DW_OP_breg<N>`` operations encode the numbers of up to 32 registers,
2417     numbered from 0 through 31, inclusive. The register number R corresponds to
2418     the N in the operation name.
2420     They have a single signed LEB128 integer operand that represents a byte
2421     displacement B.
2423     The address space identifier AS is defined as the one corresponding to the
2424     target architecture specific default address space.
2426     The address size S is defined as the address bit size of the target
2427     architecture specific address space corresponding to AS.
2429     The contents of the register specified by R are retrieved as if a
2430     ``DW_OP_regval_type R, DR`` operation was performed where DR is the offset
2431     of a hypothetical debug information entry in the current compilation unit
2432     for an unsigned integral base type of size S bits. B is added and the least
2433     significant S bits are treated as an unsigned value to be used as an address
2434     A.
2436     They push a location description L comprising one memory location
2437     description LS on the stack. LS specifies the memory location storage that
2438     corresponds to AS with a bit offset equal to A scaled by 8 (the byte size).
2440 8.  ``DW_OP_bregx``
2442     ``DW_OP_bregx`` has two operands. The first is an unsigned LEB128 integer
2443     that represents a register number R. The second is a signed LEB128
2444     integer that represents a byte displacement B.
2446     The action is the same as for ``DW_OP_breg<N>``, except that R is used as
2447     the register number and B is used as the byte displacement.
2449 9.  ``DW_OP_LLVM_aspace_bregx`` *New*
2451     ``DW_OP_LLVM_aspace_bregx`` has two operands. The first is an unsigned
2452     LEB128 integer that represents a register number R. The second is a signed
2453     LEB128 integer that represents a byte displacement B. It pops one stack
2454     entry that is required to be an integral type value that represents a target
2455     architecture specific address space identifier AS.
2457     The action is the same as for ``DW_OP_breg<N>``, except that R is used as
2458     the register number, B is used as the byte displacement, and AS is used as
2459     the address space identifier.
2461     The DWARF expression is ill-formed if AS is not one of the values defined by
2462     the target architecture specific ``DW_ASPACE_LLVM_*`` values.
2464     .. note::
2466       Could also consider adding ``DW_OP_LLVM_aspace_breg0,
2467       DW_OP_LLVM_aspace_breg1, ..., DW_OP_LLVM_aspace_bref31`` which would save
2468       encoding size.
2470 .. _amdgpu-dwarf-register-location-description-operations:
2472 A.2.5.4.4.4 Register Location Description Operations
2473 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2475 .. note::
2477   This section replaces DWARF Version 5 section 2.6.1.1.3.
2479 There is a register location storage that corresponds to each of the target
2480 architecture registers. The size of each register location storage corresponds
2481 to the size of the corresponding target architecture register.
2483 A register location description specifies a register location storage. The bit
2484 offset corresponds to a bit position within the register. Bits accessed using a
2485 register location description access the corresponding target architecture
2486 register starting at the specified bit offset.
2488 1.  ``DW_OP_reg0``, ``DW_OP_reg1``, ..., ``DW_OP_reg31``
2490     ``DW_OP_reg<N>`` operations encode the numbers of up to 32 registers,
2491     numbered from 0 through 31, inclusive. The target architecture register
2492     number R corresponds to the N in the operation name.
2494     The operation is equivalent to performing ``DW_OP_regx R``.
2496 2.  ``DW_OP_regx``
2498     ``DW_OP_regx`` has a single unsigned LEB128 integer operand that represents
2499     a target architecture register number R.
2501     If the current call frame is the top call frame, it pushes a location
2502     description L that specifies one register location description SL on the
2503     stack. SL specifies the register location storage that corresponds to R with
2504     a bit offset of 0 for the current thread.
2506     If the current call frame is not the top call frame, call frame information
2507     (see :ref:`amdgpu-dwarf-call-frame-information`) is used to determine the
2508     location description that holds the register for the current call frame and
2509     current program location of the current thread. The resulting location
2510     description L is pushed.
2512     *Note that if call frame information is used, the resulting location
2513     description may be register, memory, or undefined.*
2515     *An implementation may evaluate the call frame information immediately, or
2516     may defer evaluation until L is accessed by an operation. If evaluation is
2517     deferred, R and the current context can be recorded in L. When accessed, the
2518     recorded context is used to evaluate the call frame information, not the
2519     current context of the access operation.*
2521 *These operations obtain a register location. To fetch the contents of a
2522 register, it is necessary to use* ``DW_OP_regval_type``\ *, use one of the*
2523 ``DW_OP_breg*`` *register-based addressing operations, or use* ``DW_OP_deref*``
2524 *on a register location description.*
2526 .. _amdgpu-dwarf-implicit-location-description-operations:
2528 A.2.5.4.4.5 Implicit Location Description Operations
2529 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2531 .. note::
2533   This section replaces DWARF Version 5 section 2.6.1.1.4.
2535 Implicit location storage represents a piece or all of an object which has no
2536 actual location in the program but whose contents are nonetheless known, either
2537 as a constant or can be computed from other locations and values in the program.
2539 An implicit location description specifies an implicit location storage. The bit
2540 offset corresponds to a bit position within the implicit location storage. Bits
2541 accessed using an implicit location description, access the corresponding
2542 implicit storage value starting at the bit offset.
2544 1.  ``DW_OP_implicit_value``
2546     ``DW_OP_implicit_value`` has two operands. The first is an unsigned LEB128
2547     integer that represents a byte size S. The second is a block of bytes with a
2548     length equal to S treated as a literal value V.
2550     An implicit location storage LS is created with the literal value V and a
2551     size of S.
2553     It pushes location description L with one implicit location description SL
2554     on the stack. SL specifies LS with a bit offset of 0.
2556 2.  ``DW_OP_stack_value``
2558     ``DW_OP_stack_value`` pops one stack entry that must be a value V.
2560     An implicit location storage LS is created with the literal value V using
2561     the size, encoding, and endianity specified by V's base type.
2563     It pushes a location description L with one implicit location description SL
2564     on the stack. SL specifies LS with a bit offset of 0.
2566     *The* ``DW_OP_stack_value`` *operation specifies that the object does not
2567     exist in memory, but its value is nonetheless known. In this form, the
2568     location description specifies the actual value of the object, rather than
2569     specifying the memory or register storage that holds the value.*
2571     See ``DW_OP_implicit_pointer`` (following) for special rules concerning
2572     implicit pointer values produced by dereferencing implicit location
2573     descriptions created by the ``DW_OP_implicit_pointer`` and
2574     ``DW_OP_LLVM_aspace_implicit_pointer`` operations.
2576     Note: Since location descriptions are allowed on the stack, the
2577     ``DW_OP_stack_value`` operation no longer terminates the DWARF operation
2578     expression execution as in DWARF Version 5.
2580 3.  ``DW_OP_implicit_pointer``
2582     *An optimizing compiler may eliminate a pointer, while still retaining the
2583     value that the pointer addressed.* ``DW_OP_implicit_pointer`` *allows a
2584     producer to describe this value.*
2586     ``DW_OP_implicit_pointer`` *specifies an object is a pointer to the target
2587     architecture default address space that cannot be represented as a real
2588     pointer, even though the value it would point to can be described. In this
2589     form, the location description specifies a debugging information entry that
2590     represents the actual location description of the object to which the
2591     pointer would point. Thus, a consumer of the debug information would be able
2592     to access the dereferenced pointer, even when it cannot access the pointer
2593     itself.*
2595     ``DW_OP_implicit_pointer`` has two operands. The first operand is a 4-byte
2596     unsigned value in the 32-bit DWARF format, or an 8-byte unsigned value in
2597     the 64-bit DWARF format, that represents the byte offset DR of a debugging
2598     information entry D relative to the beginning of the ``.debug_info`` section
2599     that contains the current compilation unit. The second operand is a signed
2600     LEB128 integer that represents a byte displacement B.
2602     *Note that D might not be in the current compilation unit.*
2604     *The first operand interpretation is exactly like that for*
2605     ``DW_FORM_ref_addr``\ *.*
2607     The address space identifier AS is defined as the one corresponding to the
2608     target architecture specific default address space.
2610     The address size S is defined as the address bit size of the target
2611     architecture specific address space corresponding to AS.
2613     An implicit location storage LS is created with the debugging information
2614     entry D, address space AS, and size of S.
2616     It pushes a location description L that comprises one implicit location
2617     description SL on the stack. SL specifies LS with a bit offset of 0.
2619     It is an evaluation error if a ``DW_OP_deref*`` operation pops a location
2620     description L', and retrieves S bits, such that any retrieved bits come from
2621     an implicit location storage that is the same as LS, unless both the
2622     following conditions are met:
2624     1.  All retrieved bits come from an implicit location description that
2625         refers to an implicit location storage that is the same as LS.
2627         *Note that all bits do not have to come from the same implicit location
2628         description, as L' may involve composite location descriptions.*
2630     2.  The bits come from consecutive ascending offsets within their respective
2631         implicit location storage.
2633     *These rules are equivalent to retrieving the complete contents of LS.*
2635     If both the above conditions are met, then the value V pushed by the
2636     ``DW_OP_deref*`` operation is an implicit pointer value IPV with a target
2637     architecture specific address space of AS, a debugging information entry of
2638     D, and a base type of T. If AS is the target architecture default address
2639     space, then T is the generic type. Otherwise, T is a target architecture
2640     specific integral type with a bit size equal to S.
2642     If IPV is either implicitly converted to a location description (only done
2643     if AS is the target architecture default address space) or used by
2644     ``DW_OP_LLVM_form_aspace_address`` (only done if the address space popped by
2645     ``DW_OP_LLVM_form_aspace_address`` is AS), then the resulting location
2646     description RL is:
2648     * If D has a ``DW_AT_location`` attribute, the DWARF expression E from the
2649       ``DW_AT_location`` attribute is evaluated with the current context, except
2650       that the result kind is a location description, the compilation unit is
2651       the one that contains D, the object is unspecified, and the initial stack
2652       is empty. RL is the expression result.
2654       *Note that E is evaluated with the context of the expression accessing
2655       IPV, and not the context of the expression that contained the*
2656       ``DW_OP_implicit_pointer`` *or* ``DW_OP_LLVM_aspace_implicit_pointer``
2657       *operation that created L.*
2659     * If D has a ``DW_AT_const_value`` attribute, then an implicit location
2660       storage RLS is created from the ``DW_AT_const_value`` attribute's value
2661       with a size matching the size of the ``DW_AT_const_value`` attribute's
2662       value. RL comprises one implicit location description SRL. SRL specifies
2663       RLS with a bit offset of 0.
2665       .. note::
2667         If using ``DW_AT_const_value`` for variables and formal parameters is
2668         deprecated and instead ``DW_AT_location`` is used with an implicit
2669         location description, then this rule would not be required.
2671     * Otherwise, it is an evaluation error.
2673     The bit offset of RL is updated as if the ``DW_OP_LLVM_offset_uconst B``
2674     operation was applied.
2676     If a ``DW_OP_stack_value`` operation pops a value that is the same as IPV,
2677     then it pushes a location description that is the same as L.
2679     It is an evaluation error if LS or IPV is accessed in any other manner.
2681     *The restrictions on how an implicit pointer location description created
2682     by* ``DW_OP_implicit_pointer`` *and* ``DW_OP_LLVM_aspace_implicit_pointer``
2683     *can be used are to simplify the DWARF consumer. Similarly, for an implicit
2684     pointer value created by* ``DW_OP_deref*`` *and* ``DW_OP_stack_value``\ *.*
2686 4.  ``DW_OP_LLVM_aspace_implicit_pointer`` *New*
2688     ``DW_OP_LLVM_aspace_implicit_pointer`` has two operands that are the same as
2689     for ``DW_OP_implicit_pointer``.
2691     It pops one stack entry that must be an integral type value that represents
2692     a target architecture specific address space identifier AS.
2694     The location description L that is pushed on the stack is the same as for
2695     ``DW_OP_implicit_pointer``, except that the address space identifier used is
2696     AS.
2698     The DWARF expression is ill-formed if AS is not one of the values defined by
2699     the target architecture specific ``DW_ASPACE_LLVM_*`` values.
2701     .. note::
2703       This definition of ``DW_OP_LLVM_aspace_implicit_pointer`` may change when
2704       full support for address classes is added as required for languages such
2705       as OpenCL/SyCL.
2707 *Typically a* ``DW_OP_implicit_pointer`` *or*
2708 ``DW_OP_LLVM_aspace_implicit_pointer`` *operation is used in a DWARF expression
2709 E*\ :sub:`1` *of a* ``DW_TAG_variable`` *or* ``DW_TAG_formal_parameter``
2710 *debugging information entry D*\ :sub:`1`\ *'s* ``DW_AT_location`` *attribute.
2711 The debugging information entry referenced by the* ``DW_OP_implicit_pointer``
2712 *or* ``DW_OP_LLVM_aspace_implicit_pointer`` *operations is typically itself a*
2713 ``DW_TAG_variable`` *or* ``DW_TAG_formal_parameter`` *debugging information
2714 entry D*\ :sub:`2` *whose* ``DW_AT_location`` *attribute gives a second DWARF
2715 expression E*\ :sub:`2`\ *.*
2717 *D*\ :sub:`1` *and E*\ :sub:`1` *are describing the location of a pointer type
2718 object. D*\ :sub:`2` *and E*\ :sub:`2` *are describing the location of the
2719 object pointed to by that pointer object.*
2721 *However, D*\ :sub:`2` *may be any debugging information entry that contains a*
2722 ``DW_AT_location`` *or* ``DW_AT_const_value`` *attribute (for example,*
2723 ``DW_TAG_dwarf_procedure``\ *). By using E*\ :sub:`2`\ *, a consumer can
2724 reconstruct the value of the object when asked to dereference the pointer
2725 described by E*\ :sub:`1` *which contains the* ``DW_OP_implicit_pointer`` *or*
2726 ``DW_OP_LLVM_aspace_implicit_pointer`` *operation.*
2728 .. _amdgpu-dwarf-composite-location-description-operations:
2730 A.2.5.4.4.6 Composite Location Description Operations
2731 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2733 .. note::
2735   This section replaces DWARF Version 5 section 2.6.1.2.
2737 A composite location storage represents an object or value which may be
2738 contained in part of another location storage or contained in parts of more
2739 than one location storage.
2741 Each part has a part location description L and a part bit size S. L can have
2742 one or more single location descriptions SL. If there are more than one SL then
2743 that indicates that part is located in more than one place. The bits of each
2744 place of the part comprise S contiguous bits from the location storage LS
2745 specified by SL starting at the bit offset specified by SL. All the bits must
2746 be within the size of LS or the DWARF expression is ill-formed.
2748 A composite location storage can have zero or more parts. The parts are
2749 contiguous such that the zero-based location storage bit index will range over
2750 each part with no gaps between them. Therefore, the size of a composite location
2751 storage is the sum of the size of its parts. The DWARF expression is ill-formed
2752 if the size of the contiguous location storage is larger than the size of the
2753 memory location storage corresponding to the largest target architecture
2754 specific address space.
2756 A composite location description specifies a composite location storage. The bit
2757 offset corresponds to a bit position within the composite location storage.
2759 There are operations that create a composite location storage.
2761 There are other operations that allow a composite location storage to be
2762 incrementally created. Each part is created by a separate operation. There may
2763 be one or more operations to create the final composite location storage. A
2764 series of such operations describes the parts of the composite location storage
2765 that are in the order that the associated part operations are executed.
2767 To support incremental creation, a composite location storage can be in an
2768 incomplete state. When an incremental operation operates on an incomplete
2769 composite location storage, it adds a new part, otherwise it creates a new
2770 composite location storage. The ``DW_OP_LLVM_piece_end`` operation explicitly
2771 makes an incomplete composite location storage complete.
2773 A composite location description that specifies a composite location storage
2774 that is incomplete is termed an incomplete composite location description. A
2775 composite location description that specifies a composite location storage that
2776 is complete is termed a complete composite location description.
2778 If the top stack entry is a location description that has one incomplete
2779 composite location description SL after the execution of an operation expression
2780 has completed, SL is converted to a complete composite location description.
2782 *Note that this conversion does not happen after the completion of an operation
2783 expression that is evaluated on the same stack by the* ``DW_OP_call*``
2784 *operations. Such executions are not a separate evaluation of an operation
2785 expression, but rather the continued evaluation of the same operation expression
2786 that contains the* ``DW_OP_call*`` *operation.*
2788 If a stack entry is required to be a location description L, but L has an
2789 incomplete composite location description, then the DWARF expression is
2790 ill-formed. The exception is for the operations involved in incrementally
2791 creating a composite location description as described below.
2793 *Note that a DWARF operation expression may arbitrarily compose composite
2794 location descriptions from any other location description, including those that
2795 have multiple single location descriptions, and those that have composite
2796 location descriptions.*
2798 *The incremental composite location description operations are defined to be
2799 compatible with the definitions in DWARF Version 5.*
2801 1.  ``DW_OP_piece``
2803     ``DW_OP_piece`` has a single unsigned LEB128 integer that represents a byte
2804     size S.
2806     The action is based on the context:
2808     * If the stack is empty, then a location description L comprised of one
2809       incomplete composite location description SL is pushed on the stack.
2811       An incomplete composite location storage LS is created with a single part
2812       P. P specifies a location description PL and has a bit size of S scaled by
2813       8 (the byte size). PL is comprised of one undefined location description
2814       PSL.
2816       SL specifies LS with a bit offset of 0.
2818     * Otherwise, if the top stack entry is a location description L comprised of
2819       one incomplete composite location description SL, then the incomplete
2820       composite location storage LS that SL specifies is updated to append a new
2821       part P. P specifies a location description PL and has a bit size of S
2822       scaled by 8 (the byte size). PL is comprised of one undefined location
2823       description PSL. L is left on the stack.
2825     * Otherwise, if the top stack entry is a location description or can be
2826       converted to one, then it is popped and treated as a part location
2827       description PL. Then:
2829       * If the top stack entry (after popping PL) is a location description L
2830         comprised of one incomplete composite location description SL, then the
2831         incomplete composite location storage LS that SL specifies is updated to
2832         append a new part P. P specifies the location description PL and has a
2833         bit size of S scaled by 8 (the byte size). L is left on the stack.
2835       * Otherwise, a location description L comprised of one incomplete
2836         composite location description SL is pushed on the stack.
2838         An incomplete composite location storage LS is created with a single
2839         part P. P specifies the location description PL and has a bit size of S
2840         scaled by 8 (the byte size).
2842         SL specifies LS with a bit offset of 0.
2844     * Otherwise, the DWARF expression is ill-formed
2846     *Many compilers store a single variable in sets of registers or store a
2847     variable partially in memory and partially in registers.* ``DW_OP_piece``
2848     *provides a way of describing where a part of a variable is located.*
2850     *If a non-0 byte displacement is required, the* ``DW_OP_LLVM_offset``
2851     *operation can be used to update the location description before using it as
2852     the part location description of a* ``DW_OP_piece`` *operation.*
2854     *The evaluation rules for the* ``DW_OP_piece`` *operation allow it to be
2855     compatible with the DWARF Version 5 definition.*
2857     .. note::
2859       Since these extensions allow location descriptions to be entries on the
2860       stack, a simpler operation to create composite location descriptions could
2861       be defined. For example, just one operation that specifies how many parts,
2862       and pops pairs of stack entries for the part size and location
2863       description. Not only would this be a simpler operation and avoid the
2864       complexities of incomplete composite location descriptions, but it may
2865       also have a smaller encoding in practice. However, the desire for
2866       compatibility with DWARF Version 5 is likely a stronger consideration.
2868 2.  ``DW_OP_bit_piece``
2870     ``DW_OP_bit_piece`` has two operands. The first is an unsigned LEB128
2871     integer that represents the part bit size S. The second is an unsigned
2872     LEB128 integer that represents a bit displacement B.
2874     The action is the same as for ``DW_OP_piece``, except that any part created
2875     has the bit size S, and the location description PL of any created part is
2876     updated as if the ``DW_OP_constu B; DW_OP_LLVM_bit_offset`` operations were
2877     applied.
2879     ``DW_OP_bit_piece`` *is used instead of* ``DW_OP_piece`` *when the piece to
2880     be assembled is not byte-sized or is not at the start of the part location
2881     description.*
2883     *If a computed bit displacement is required, the* ``DW_OP_LLVM_bit_offset``
2884     *operation can be used to update the location description before using it as
2885     the part location description of a* ``DW_OP_bit_piece`` *operation.*
2887     .. note::
2889       The bit offset operand is not needed as ``DW_OP_LLVM_bit_offset`` can be
2890       used on the part's location description.
2892 3.  ``DW_OP_LLVM_piece_end`` *New*
2894     If the top stack entry is not a location description L comprised of one
2895     incomplete composite location description SL, then the DWARF expression is
2896     ill-formed.
2898     Otherwise, the incomplete composite location storage LS specified by SL is
2899     updated to be a complete composite location description with the same parts.
2901 4.  ``DW_OP_LLVM_extend`` *New*
2903     ``DW_OP_LLVM_extend`` has two operands. The first is an unsigned LEB128
2904     integer that represents the element bit size S. The second is an unsigned
2905     LEB128 integer that represents a count C.
2907     It pops one stack entry that must be a location description and is treated
2908     as the part location description PL.
2910     A location description L comprised of one complete composite location
2911     description SL is pushed on the stack.
2913     A complete composite location storage LS is created with C identical parts
2914     P. Each P specifies PL and has a bit size of S.
2916     SL specifies LS with a bit offset of 0.
2918     The DWARF expression is ill-formed if the element bit size or count are 0.
2920 5.  ``DW_OP_LLVM_select_bit_piece`` *New*
2922     ``DW_OP_LLVM_select_bit_piece`` has two operands. The first is an unsigned
2923     LEB128 integer that represents the element bit size S. The second is an
2924     unsigned LEB128 integer that represents a count C.
2926     It pops three stack entries. The first must be an integral type value that
2927     represents a bit mask value M. The second must be a location description
2928     that represents the one-location description L1. The third must be a
2929     location description that represents the zero-location description L0.
2931     A complete composite location storage LS is created with C parts P\ :sub:`N`
2932     ordered in ascending N from 0 to C-1 inclusive. Each P\ :sub:`N` specifies
2933     location description PL\ :sub:`N` and has a bit size of S.
2935     PL\ :sub:`N` is as if the ``DW_OP_LLVM_bit_offset N*S`` operation was
2936     applied to PLX\ :sub:`N`\ .
2938     PLX\ :sub:`N` is the same as L0 if the N\ :sup:`th` least significant bit of
2939     M is a zero, otherwise it is the same as L1.
2941     A location description L comprised of one complete composite location
2942     description SL is pushed on the stack. SL specifies LS with a bit offset of
2943     0.
2945     The DWARF expression is ill-formed if S or C are 0, or if the bit size of M
2946     is less than C.
2948     .. note::
2950       Should the count operand for DW_OP_extend and DW_OP_select_bit_piece be
2951       changed to get the count value off the stack? This would allow support for
2952       architectures that have variable length vector instructions such as ARM
2953       and RISC-V.
2955 6.  ``DW_OP_LLVM_overlay`` *New*
2957     ``DW_OP_LLVM_overlay`` pops four stack entries. The first must be an
2958     integral type value that represents the overlay byte size value S. The
2959     second must be an integral type value that represents the overlay byte
2960     offset value O. The third must be a location description that represents the
2961     overlay location description OL. The fourth must be a location description
2962     that represents the base location description BL.
2964     The action is the same as for ``DW_OP_LLVM_bit_overlay``, except that the
2965     overlay bit size BS and overlay bit offset BO used are S and O respectively
2966     scaled by 8 (the byte size).
2968 7.  ``DW_OP_LLVM_bit_overlay`` *New*
2970     ``DW_OP_LLVM_bit_overlay`` pops four stack entries. The first must be an
2971     integral type value that represents the overlay bit size value BS. The
2972     second must be an integral type value that represents the overlay bit offset
2973     value BO. The third must be a location description that represents the
2974     overlay location description OL. The fourth must be a location description
2975     that represents the base location description BL.
2977     The DWARF expression is ill-formed if BS or BO are negative values.
2979     *rbss(L)* is the minimum remaining bit storage size of L which is defined as
2980     follows. LS is the location storage and LO is the location bit offset
2981     specified by a single location description SL of L. The remaining bit
2982     storage size RBSS of SL is the bit size of LS minus LO. *rbss(L)* is the
2983     minimum RBSS of each single location description SL of L.
2985     The DWARF expression is ill-formed if *rbss(BL)* is less than BO plus BS.
2987     If BS is 0, then the operation pushes BL.
2989     If BO is 0 and BS equals *rbss(BL)*, then the operation pushes OL.
2991     Otherwise, the operation is equivalent to performing the following steps to
2992     push a composite location description.
2994     *The composite location description is conceptually the base location
2995     description BL with the overlay location description OL positioned as an
2996     overlay starting at the overlay offset BO and covering overlay bit size BS.*
2998     1.  If BO is not 0 then push BL followed by performing the ``DW_OP_bit_piece
2999         BO, 0`` operation.
3000     2.  Push OL followed by performing the ``DW_OP_bit_piece BS, 0`` operation.
3001     3.  If *rbss(BL)* is greater than BO plus BS, push BL followed by performing
3002         the ``DW_OP_bit_piece (rbss(BL) - BO - BS), (BO + BS)`` operation.
3003     4.  Perform the ``DW_OP_LLVM_piece_end`` operation.
3005 .. _amdgpu-dwarf-location-list-expressions:
3007 A.2.5.5 DWARF Location List Expressions
3008 +++++++++++++++++++++++++++++++++++++++
3010 .. note::
3012   This section replaces DWARF Version 5 section 2.6.2.
3014 *To meet the needs of recent computer architectures and optimization techniques,
3015 debugging information must be able to describe the location of an object whose
3016 location changes over the object’s lifetime, and may reside at multiple
3017 locations during parts of an object's lifetime. Location list expressions are
3018 used in place of operation expressions whenever the object whose location is
3019 being described has these requirements.*
3021 A location list expression consists of a series of location list entries. Each
3022 location list entry is one of the following kinds:
3024 *Bounded location description*
3026   This kind of location list entry provides an operation expression that
3027   evaluates to the location description of an object that is valid over a
3028   lifetime bounded by a starting and ending address. The starting address is the
3029   lowest address of the address range over which the location is valid. The
3030   ending address is the address of the first location past the highest address
3031   of the address range.
3033   The location list entry matches when the current program location is within
3034   the given range.
3036   There are several kinds of bounded location description entries which differ
3037   in the way that they specify the starting and ending addresses.
3039 *Default location description*
3041   This kind of location list entry provides an operation expression that
3042   evaluates to the location description of an object that is valid when no
3043   bounded location description entry applies.
3045   The location list entry matches when the current program location is not
3046   within the range of any bounded location description entry.
3048 *Base address*
3050   This kind of location list entry provides an address to be used as the base
3051   address for beginning and ending address offsets given in certain kinds of
3052   bounded location description entries. The applicable base address of a bounded
3053   location description entry is the address specified by the closest preceding
3054   base address entry in the same location list. If there is no preceding base
3055   address entry, then the applicable base address defaults to the base address
3056   of the compilation unit (see DWARF Version 5 section 3.1.1).
3058   In the case of a compilation unit where all of the machine code is contained
3059   in a single contiguous section, no base address entry is needed.
3061 *End-of-list*
3063   This kind of location list entry marks the end of the location list
3064   expression.
3066 The address ranges defined by the bounded location description entries of a
3067 location list expression may overlap. When they do, they describe a situation in
3068 which an object exists simultaneously in more than one place.
3070 If all of the address ranges in a given location list expression do not
3071 collectively cover the entire range over which the object in question is
3072 defined, and there is no following default location description entry, it is
3073 assumed that the object is not available for the portion of the range that is
3074 not covered.
3076 The result of the evaluation of a DWARF location list expression is:
3078 * If the current program location is not specified, then it is an evaluation
3079   error.
3081   .. note::
3083     If the location list only has a single default entry, should that be
3084     considered a match if there is no program location? If there are non-default
3085     entries then it seems it has to be an evaluation error when there is no
3086     program location as that indicates the location depends on the program
3087     location which is not known.
3089 * If there are no matching location list entries, then the result is a location
3090   description that comprises one undefined location description.
3092 * Otherwise, the operation expression E of each matching location list entry is
3093   evaluated with the current context, except that the result kind is a location
3094   description, the object is unspecified, and the initial stack is empty. The
3095   location list entry result is the location description returned by the
3096   evaluation of E.
3098   The result is a location description that is comprised of the union of the
3099   single location descriptions of the location description result of each
3100   matching location list entry.
3102 A location list expression can only be used as the value of a debugger
3103 information entry attribute that is encoded using class ``loclist`` or
3104 ``loclistsptr`` (see :ref:`amdgpu-dwarf-classes-and-forms`). The value of the
3105 attribute provides an index into a separate object file section called
3106 ``.debug_loclists`` or ``.debug_loclists.dwo`` (for split DWARF object files)
3107 that contains the location list entries.
3109 A ``DW_OP_call*`` and ``DW_OP_implicit_pointer`` operation can be used to
3110 specify a debugger information entry attribute that has a location list
3111 expression. Several debugger information entry attributes allow DWARF
3112 expressions that are evaluated with an initial stack that includes a location
3113 description that may originate from the evaluation of a location list
3114 expression.
3116 *This location list representation, the* ``loclist`` *and* ``loclistsptr``
3117 *class, and the related* ``DW_AT_loclists_base`` *attribute are new in DWARF
3118 Version 5. Together they eliminate most, or all of the code object relocations
3119 previously needed for location list expressions.*
3121 .. note::
3123   The rest of this section is the same as DWARF Version 5 section 2.6.2.
3125 .. _amdgpu-dwarf-address-spaces:
3127 A.2.13 Address Spaces
3128 ~~~~~~~~~~~~~~~~~~~~~
3130 .. note::
3132   This is a new section after DWARF Version 5 section 2.12 Segmented Addresses.
3134 DWARF address spaces correspond to target architecture specific linear
3135 addressable memory areas. They are used in DWARF expression location
3136 descriptions to describe in which target architecture specific memory area data
3137 resides.
3139 *Target architecture specific DWARF address spaces may correspond to hardware
3140 supported facilities such as memory utilizing base address registers, scratchpad
3141 memory, and memory with special interleaving. The size of addresses in these
3142 address spaces may vary. Their access and allocation may be hardware managed
3143 with each thread or group of threads having access to independent storage. For
3144 these reasons they may have properties that do not allow them to be viewed as
3145 part of the unified global virtual address space accessible by all threads.*
3147 *It is target architecture specific whether multiple DWARF address spaces are
3148 supported and how source language memory spaces map to target architecture
3149 specific DWARF address spaces. A target architecture may map multiple source
3150 language memory spaces to the same target architecture specific DWARF address
3151 class. Optimization may determine that variable lifetime and access pattern
3152 allows them to be allocated in faster scratchpad memory represented by a
3153 different DWARF address space than the default for the source language memory
3154 space.*
3156 Although DWARF address space identifiers are target architecture specific,
3157 ``DW_ASPACE_LLVM_none`` is a common address space supported by all target
3158 architectures, and defined as the target architecture default address space.
3160 DWARF address space identifiers are used by:
3162 * The ``DW_AT_LLVM_address_space`` attribute.
3164 * The DWARF expression operations: ``DW_OP_aspace_bregx``,
3165   ``DW_OP_form_aspace_address``, ``DW_OP_aspace_implicit_pointer``, and
3166   ``DW_OP_xderef*``.
3168 * The CFI instructions: ``DW_CFA_def_aspace_cfa`` and
3169   ``DW_CFA_def_aspace_cfa_sf``.
3171 .. note::
3173   Currently, DWARF defines address class values as being target architecture
3174   specific, and defines a DW_AT_address_class attribute. With the removal of
3175   DW_AT_segment in DWARF 6, it is unclear how the address class is intended to
3176   be used as the term is not used elsewhere. Should these be replaced by this
3177   proposal's more complete address space? Or are they intended to represent
3178   source language memory spaces such as in OpenCL?
3180 .. _amdgpu-dwarf-memory-spaces:
3182 A.2.14 Memory Spaces
3183 ~~~~~~~~~~~~~~~~~~~~
3185 .. note::
3187   This is a new section after DWARF Version 5 section 2.12 Segmented Addresses.
3189 DWARF memory spaces are used for source languages that have the concept of
3190 memory spaces. They are used in the ``DW_AT_LLVM_memory_space`` attribute for
3191 pointer type, reference type, variable, formal parameter, and constant debugger
3192 information entries.
3194 Each DWARF memory space is conceptually a separate source language memory space
3195 with its own lifetime and aliasing rules. DWARF memory spaces are used to
3196 specify the source language memory spaces that pointer type and reference type
3197 values refer, and to specify the source language memory space in which variables
3198 are allocated.
3200 Although DWARF memory space identifiers are source language specific,
3201 ``DW_MSPACE_LLVM_none`` is a common memory space supported by all source
3202 languages, and defined as the source language default memory space.
3204 The set of currently defined DWARF memory spaces, together with source language
3205 mappings, is given in :ref:`amdgpu-dwarf-source-language-memory-spaces-table`.
3207 Vendor defined source language memory spaces may be defined using codes in the
3208 range ``DW_MSPACE_LLVM_lo_user`` to ``DW_MSPACE_LLVM_hi_user``.
3210 .. table:: Source language memory spaces
3211    :name: amdgpu-dwarf-source-language-memory-spaces-table
3213    =========================== ============ ============== ============== ==============
3214    Memory Space Name           Meaning      C/C++          OpenCL         CUDA/HIP
3215    =========================== ============ ============== ============== ==============
3216    ``DW_MSPACE_LLVM_none``     generic      *default*      generic        *default*
3217    ``DW_MSPACE_LLVM_global``   global                      global
3218    ``DW_MSPACE_LLVM_constant`` constant                    constant       constant
3219    ``DW_MSPACE_LLVM_group``    thread-group                local          shared
3220    ``DW_MSPACE_LLVM_private``  thread                      private
3221    ``DW_MSPACE_LLVM_lo_user``
3222    ``DW_MSPACE_LLVM_hi_user``
3223    =========================== ============ ============== ============== ==============
3225 .. note::
3227   The approach presented in
3228   :ref:`amdgpu-dwarf-source-language-memory-spaces-table` is to define the
3229   default ``DW_MSPACE_LLVM_none`` to be the generic address class and not the
3230   global address class. This matches how CLANG and LLVM have added support for
3231   CUDA-like languages on top of existing C++ language support. This allows all
3232   addresses to be generic by default which matches CUDA-like languages.
3234   An alternative approach is to define ``DW_MSPACE_LLVM_none`` as being the
3235   global memory space and then change ``DW_MSPACE_LLVM_global`` to
3236   ``DW_MSPACE_LLVM_generic``. This would match the reality that languages that
3237   do not support multiple memory spaces only have one default global memory
3238   space. Generally, in these languages if they expose that the target
3239   architecture supports multiple memory spaces, the default one is still the
3240   global memory space. Then a language that does support multiple memory spaces
3241   has to explicitly indicate which pointers have the added ability to reference
3242   more than the global memory space. However, compilers generating DWARF for
3243   CUDA-like languages would then have to define every CUDA-like language pointer
3244   type or reference type with a ``DW_AT_LLVM_memory_space`` attribute of
3245   ``DW_MSPACE_LLVM_generic`` to match the language semantics.
3247 A.3 Program Scope Entries
3248 -------------------------
3250 .. note::
3252   This section provides changes to existing debugger information entry
3253   attributes. These would be incorporated into the corresponding DWARF Version 5
3254   chapter 3 sections.
3256 A.3.1 Unit Entries
3257 ~~~~~~~~~~~~~~~~~~
3259 .. _amdgpu-dwarf-full-and-partial-compilation-unit-entries:
3261 A.3.1.1 Full and Partial Compilation Unit Entries
3262 +++++++++++++++++++++++++++++++++++++++++++++++++
3264 .. note::
3266   This augments DWARF Version 5 section 3.1.1 and Table 3.1.
3268 Additional language codes defined for use with the ``DW_AT_language`` attribute
3269 are defined in :ref:`amdgpu-dwarf-language-names-table`.
3271 .. table:: Language Names
3272    :name: amdgpu-dwarf-language-names-table
3274    ==================== =============================
3275    Language Name        Meaning
3276    ==================== =============================
3277    ``DW_LANG_LLVM_HIP`` HIP Language.
3278    ==================== =============================
3280 The HIP language [:ref:`HIP <amdgpu-dwarf-HIP>`] can be supported by extending
3281 the C++ language.
3283 .. note::
3285   The following new attribute is added.
3287 1.  A ``DW_TAG_compile_unit`` debugger information entry for a compilation unit
3288     may have a ``DW_AT_LLVM_augmentation`` attribute, whose value is an
3289     augmentation string.
3291     *The augmentation string allows producers to indicate that there is
3292     additional vendor or target specific information in the debugging
3293     information entries. For example, this might be information about the
3294     version of vendor specific extensions that are being used.*
3296     If not present, or if the string is empty, then the compilation unit has no
3297     augmentation string.
3299     The format for the augmentation string is:
3301       | ``[``\ *vendor*\ ``:v``\ *X*\ ``.``\ *Y*\ [\ ``:``\ *options*\ ]\ ``]``\ *
3303     Where *vendor* is the producer, ``vX.Y`` specifies the major X and minor Y
3304     version number of the extensions used, and *options* is an optional string
3305     providing additional information about the extensions. The version number
3306     must conform to semantic versioning [:ref:`SEMVER <amdgpu-dwarf-SEMVER>`].
3307     The *options* string must not contain the "\ ``]``\ " character.
3309     For example:
3311       ::
3313         [abc:v0.0][def:v1.2:feature-a=on,feature-b=3]
3315 A.3.3 Subroutine and Entry Point Entries
3316 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3318 .. _amdgpu-dwarf-low-level-information:
3320 A.3.3.5 Low-Level Information
3321 +++++++++++++++++++++++++++++
3323 1.  A ``DW_TAG_subprogram``, ``DW_TAG_inlined_subroutine``, or
3324     ``DW_TAG_entry_point`` debugger information entry may have a
3325     ``DW_AT_return_addr`` attribute, whose value is a DWARF expression E.
3327     The result of the attribute is obtained by evaluating E with a context that
3328     has a result kind of a location description, an unspecified object, the
3329     compilation unit that contains E, an empty initial stack, and other context
3330     elements corresponding to the source language thread of execution upon which
3331     the user is focused, if any. The result of the evaluation is the location
3332     description L of the place where the return address for the current call
3333     frame's subprogram or entry point is stored.
3335     The DWARF is ill-formed if L is not comprised of one memory location
3336     description for one of the target architecture specific address spaces.
3338     .. note::
3340       It is unclear why ``DW_TAG_inlined_subroutine`` has a
3341       ``DW_AT_return_addr`` attribute but not a ``DW_AT_frame_base`` or
3342       ``DW_AT_static_link`` attribute. Seems it would either have all of them or
3343       none. Since inlined subprograms do not have a call frame it seems they
3344       would have none of these attributes.
3346 2.  A ``DW_TAG_subprogram`` or ``DW_TAG_entry_point`` debugger information entry
3347     may have a ``DW_AT_frame_base`` attribute, whose value is a DWARF expression
3348     E.
3350     The result of the attribute is obtained by evaluating E with a context that
3351     has a result kind of a location description, an unspecified object, the
3352     compilation unit that contains E, an empty initial stack, and other context
3353     elements corresponding to the source language thread of execution upon which
3354     the user is focused, if any.
3356     The DWARF is ill-formed if E contains a ``DW_OP_fbreg`` operation, or the
3357     resulting location description L is not comprised of one single location
3358     description SL.
3360     If SL is a register location description for register R, then L is replaced
3361     with the result of evaluating a ``DW_OP_bregx R, 0`` operation. This
3362     computes the frame base memory location description in the target
3363     architecture default address space.
3365     *This allows the more compact* ``DW_OP_reg*`` *to be used instead of*
3366     ``DW_OP_breg* 0``\ *.*
3368     .. note::
3370       This rule could be removed and require the producer to create the required
3371       location description directly using ``DW_OP_call_frame_cfa``,
3372       ``DW_OP_breg*``, or ``DW_OP_LLVM_aspace_bregx``. This would also then
3373       allow a target to implement the call frames within a large register.
3375     Otherwise, the DWARF is ill-formed if SL is not a memory location
3376     description in any of the target architecture specific address spaces.
3378     The resulting L is the *frame base* for the subprogram or entry point.
3380     *Typically, E will use the* ``DW_OP_call_frame_cfa`` *operation or be a
3381     stack pointer register plus or minus some offset.*
3383     *The frame base for a subprogram is typically an address relative to the
3384     first unit of storage allocated for the subprogram's stack frame. The*
3385     ``DW_AT_frame_base`` *attribute can be used in several ways:*
3387     1.  *In subprograms that need location lists to locate local variables, the*
3388         ``DW_AT_frame_base`` *can hold the needed location list, while all
3389         variables' location descriptions can be simpler ones involving the frame
3390         base.*
3392     2.  *It can be used in resolving "up-level" addressing within
3393         nested routines. (See also* ``DW_AT_static_link``\ *, below)*
3395     *Some languages support nested subroutines. In such languages, it is
3396     possible to reference the local variables of an outer subroutine from within
3397     an inner subroutine. The* ``DW_AT_static_link`` *and* ``DW_AT_frame_base``
3398     *attributes allow debuggers to support this same kind of referencing.*
3400 3.  If a ``DW_TAG_subprogram`` or ``DW_TAG_entry_point`` debugger information
3401     entry is lexically nested, it may have a ``DW_AT_static_link`` attribute,
3402     whose value is a DWARF expression E.
3404     The result of the attribute is obtained by evaluating E with a context that
3405     has a result kind of a location description, an unspecified object, the
3406     compilation unit that contains E, an empty initial stack, and other context
3407     elements corresponding to the source language thread of execution upon which
3408     the user is focused, if any. The result of the evaluation is the location
3409     description L of the *canonical frame address* (see
3410     :ref:`amdgpu-dwarf-call-frame-information`) of the relevant call frame of
3411     the subprogram instance that immediately lexically encloses the current call
3412     frame's subprogram or entry point.
3414     The DWARF is ill-formed if L is not comprised of one memory location
3415     description for one of the target architecture specific address spaces.
3417     In the context of supporting nested subroutines, the DW_AT_frame_base
3418     attribute value obeys the following constraints:
3420     1.  It computes a value that does not change during the life of the
3421         subprogram, and
3423     2.  The computed value is unique among instances of the same subroutine.
3425     *For typical DW_AT_frame_base use, this means that a recursive subroutine's
3426     stack frame must have non-zero size.*
3428     *If a debugger is attempting to resolve an up-level reference to a variable,
3429     it uses the nesting structure of DWARF to determine which subroutine is the
3430     lexical parent and the* ``DW_AT_static_link`` *value to identify the
3431     appropriate active frame of the parent. It can then attempt to find the
3432     reference within the context of the parent.*
3434     .. note::
3436       The following new attributes are added.
3438 4.  For languages that are implemented using a SIMT execution model, a
3439     ``DW_TAG_subprogram``, ``DW_TAG_inlined_subroutine``, or
3440     ``DW_TAG_entry_point`` debugger information entry may have a
3441     ``DW_AT_LLVM_lanes`` attribute whose value is an integer constant that is
3442     the number of source language threads of execution per target architecture
3443     thread.
3445     *For example, a compiler may map source language threads of execution onto
3446     lanes of a target architecture thread using a SIMT execution model.*
3448     It is the static number of source language threads of execution per target
3449     architecture thread. It is not the dynamic number of source language threads
3450     of execution with which the target architecture thread was initiated, for
3451     example, due to smaller or partial work-groups.
3453     If not present, the default value of 1 is used.
3455     The DWARF is ill-formed if the value is less than or equal to 0.
3457 5.  For source languages that are implemented using a SIMT execution model, a
3458     ``DW_TAG_subprogram``, ``DW_TAG_inlined_subroutine``, or
3459     ``DW_TAG_entry_point`` debugging information entry may have a
3460     ``DW_AT_LLVM_lane_pc`` attribute whose value is a DWARF expression E.
3462     The result of the attribute is obtained by evaluating E with a context that
3463     has a result kind of a location description, an unspecified object, the
3464     compilation unit that contains E, an empty initial stack, and other context
3465     elements corresponding to the source language thread of execution upon which
3466     the user is focused, if any.
3468     The resulting location description L is for a lane count sized vector of
3469     generic type elements. The lane count is the value of the
3470     ``DW_AT_LLVM_lanes`` attribute. Each element holds the conceptual program
3471     location of the corresponding lane. If the lane was not active when the
3472     current subprogram was called, its element is an undefined location
3473     description.
3475     The DWARF is ill-formed if L does not have exactly one single location
3476     description.
3478     ``DW_AT_LLVM_lane_pc`` *allows the compiler to indicate conceptually where
3479     each SIMT lane of a target architecture thread is positioned even when it is
3480     in divergent control flow that is not active.*
3482     *Typically, the result is a location description with one composite location
3483     description with each part being a location description with either one
3484     undefined location description or one memory location description.*
3486     If not present, the target architecture thread is not being used in a SIMT
3487     manner, and the thread's current program location is used.
3489 6.  For languages that are implemented using a SIMT execution model, a
3490     ``DW_TAG_subprogram``, ``DW_TAG_inlined_subroutine``, or
3491     ``DW_TAG_entry_point`` debugger information entry may have a
3492     ``DW_AT_LLVM_active_lane`` attribute whose value is a DWARF expression E.
3494     E is evaluated with a context that has a result kind of a location
3495     description, an unspecified object, the compilation unit that contains E, an
3496     empty initial stack, and other context elements corresponding to the source
3497     language thread of execution upon which the user is focused, if any.
3499     The DWARF is ill-formed if L does not have exactly one single location
3500     description SL.
3502     The active lane bit mask V for the current program location is obtained by
3503     reading from SL using a target architecture specific integral base type T
3504     that has a bit size equal to the value of the ``DW_AT_LLVM_lanes`` attribute
3505     of the subprogram corresponding to context's frame and program location. The
3506     N\ :sup:`th` least significant bit of the mask corresponds to the N\
3507     :sup:`th` lane. If the bit is 1 the lane is active, otherwise it is
3508     inactive. The result of the attribute is the value V.
3510     *Some targets may update the target architecture execution mask for regions
3511     of code that must execute with different sets of lanes than the current
3512     active lanes. For example, some code must execute with all lanes made
3513     temporarily active.* ``DW_AT_LLVM_active_lane`` *allows the compiler to
3514     provide the means to determine the source language active lanes at any
3515     program location. Typically, this attribute will use a loclist to express
3516     different locations of the active lane mask at different program locations.*
3518     If not present and ``DW_AT_LLVM_lanes`` is greater than 1, then the target
3519     architecture execution mask is used.
3521 7.  A ``DW_TAG_subprogram``, ``DW_TAG_inlined_subroutine``, or
3522     ``DW_TAG_entry_point`` debugger information entry may have a
3523     ``DW_AT_LLVM_iterations`` attribute whose value is an integer constant or a
3524     DWARF expression E. Its value is the number of source language loop
3525     iterations executing concurrently by the target architecture for a single
3526     source language thread of execution.
3528     *A compiler may generate code that executes more than one iteration of a
3529     source language loop concurrently using optimization techniques such as
3530     software pipelining or SIMD vectorization. The number of concurrent
3531     iterations may vary for different loop nests in the same subprogram.
3532     Typically, this attribute will use a loclist to express different values at
3533     different program locations.*
3535     If the attribute is an integer constant, then the value is the constant. The
3536     DWARF is ill-formed if the constant is less than or equal to 0.
3538     Otherwise, E is evaluated with a context that has a result kind of a
3539     location description, an unspecified object, the compilation unit that
3540     contains E, an empty initial stack, and other context elements corresponding
3541     to the source language thread of execution upon which the user is focused,
3542     if any. The DWARF is ill-formed if the result is not a location description
3543     comprised of one implicit location description, that when read as the
3544     generic type, results in a value V that is less than or equal to 0. The
3545     result of the attribute is the value V.
3547     If not present, the default value of 1 is used.
3549 A.3.4 Call Site Entries and Parameters
3550 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3552 A.3.4.2 Call Site Parameters
3553 ++++++++++++++++++++++++++++
3555 1.  The call site entry may own ``DW_TAG_call_site_parameter`` debugging
3556     information entries representing the parameters passed to the call. Call
3557     site parameter entries occur in the same order as the corresponding
3558     parameters in the source. Each such entry has a ``DW_AT_location`` attribute
3559     which is a location description. This location description describes where
3560     the parameter is passed (usually either some register, or a memory location
3561     expressible as the contents of the stack register plus some offset).
3563 2.  A ``DW_TAG_call_site_parameter`` debugger information entry may have a
3564     ``DW_AT_call_value`` attribute, whose value is a DWARF operation expression
3565     E\ :sub:`1`\ .
3567     The result of the ``DW_AT_call_value`` attribute is obtained by evaluating
3568     E\ :sub:`1` with a context that has a result kind of a value, an unspecified
3569     object, the compilation unit that contains E, an empty initial stack, and
3570     other context elements corresponding to the source language thread of
3571     execution upon which the user is focused, if any. The resulting value V\
3572     :sub:`1` is the value of the parameter at the time of the call made by the
3573     call site.
3575     For parameters passed by reference, where the code passes a pointer to a
3576     location which contains the parameter, or for reference type parameters, the
3577     ``DW_TAG_call_site_parameter`` debugger information entry may also have a
3578     ``DW_AT_call_data_location`` attribute whose value is a DWARF operation
3579     expression E\ :sub:`2`\ , and a ``DW_AT_call_data_value`` attribute whose
3580     value is a DWARF operation expression E\ :sub:`3`\ .
3582     The value of the ``DW_AT_call_data_location`` attribute is obtained by
3583     evaluating E\ :sub:`2` with a context that has a result kind of a location
3584     description, an unspecified object, the compilation unit that contains E, an
3585     empty initial stack, and other context elements corresponding to the source
3586     language thread of execution upon which the user is focused, if any. The
3587     resulting location description L\ :sub:`2` is the location where the
3588     referenced parameter lives during the call made by the call site. If E\
3589     :sub:`2` would just be a ``DW_OP_push_object_address``, then the
3590     ``DW_AT_call_data_location`` attribute may be omitted.
3592     .. note::
3594       The DWARF Version 5 implies that ``DW_OP_push_object_address`` may be used
3595       but does not state what object must be specified in the context. Either
3596       ``DW_OP_push_object_address`` cannot be used, or the object to be passed
3597       in the context must be defined.
3599     The value of the ``DW_AT_call_data_value`` attribute is obtained by
3600     evaluating E\ :sub:`3` with a context that has a result kind of a value, an
3601     unspecified object, the compilation unit that contains E, an empty initial
3602     stack, and other context elements corresponding to the source language
3603     thread of execution upon which the user is focused, if any. The resulting
3604     value V\ :sub:`3` is the value in L\ :sub:`2` at the time of the call made
3605     by the call site.
3607     The result of these attributes is undefined if the current call frame is not
3608     for the subprogram containing the ``DW_TAG_call_site_parameter`` debugger
3609     information entry or the current program location is not for the call site
3610     containing the ``DW_TAG_call_site_parameter`` debugger information entry in
3611     the current call frame.
3613     *The consumer may have to virtually unwind to the call site (see*
3614     :ref:`amdgpu-dwarf-call-frame-information`\ *) in order to evaluate these
3615     attributes. This will ensure the source language thread of execution upon
3616     which the user is focused corresponds to the call site needed to evaluate
3617     the expression.*
3619     If it is not possible to avoid the expressions of these attributes from
3620     accessing registers or memory locations that might be clobbered by the
3621     subprogram being called by the call site, then the associated attribute
3622     should not be provided.
3624     *The reason for the restriction is that the parameter may need to be
3625     accessed during the execution of the callee. The consumer may virtually
3626     unwind from the called subprogram back to the caller and then evaluate the
3627     attribute expressions. The call frame information (see*
3628     :ref:`amdgpu-dwarf-call-frame-information`\ *) will not be able to restore
3629     registers that have been clobbered, and clobbered memory will no longer have
3630     the value at the time of the call.*
3632 3.  Each call site parameter entry may also have a ``DW_AT_call_parameter``
3633     attribute which contains a reference to a ``DW_TAG_formal_parameter`` entry,
3634     ``DW_AT_type attribute`` referencing the type of the parameter or
3635     ``DW_AT_name`` attribute describing the parameter's name.
3637 *Examples using call site entries and related attributes are found in Appendix
3638 D.15.*
3640 .. _amdgpu-dwarf-lexical-block-entries:
3642 A.3.5 Lexical Block Entries
3643 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
3645 .. note::
3647   This section is the same as DWARF Version 5 section 3.5.
3649 A.4 Data Object and Object List Entries
3650 ---------------------------------------
3652 .. note::
3654   This section provides changes to existing debugger information entry
3655   attributes. These would be incorporated into the corresponding DWARF Version 5
3656   chapter 4 sections.
3658 .. _amdgpu-dwarf-data-object-entries:
3660 A.4.1 Data Object Entries
3661 ~~~~~~~~~~~~~~~~~~~~~~~~~
3663 Program variables, formal parameters and constants are represented by debugging
3664 information entries with the tags ``DW_TAG_variable``,
3665 ``DW_TAG_formal_parameter`` and ``DW_TAG_constant``, respectively.
3667 *The tag DW_TAG_constant is used for languages that have true named constants.*
3669 The debugging information entry for a program variable, formal parameter or
3670 constant may have the following attributes:
3672 1.  A ``DW_AT_location`` attribute, whose value is a DWARF expression E that
3673     describes the location of a variable or parameter at run-time.
3675     The result of the attribute is obtained by evaluating E with a context that
3676     has a result kind of a location description, an unspecified object, the
3677     compilation unit that contains E, an empty initial stack, and other context
3678     elements corresponding to the source language thread of execution upon which
3679     the user is focused, if any. The result of the evaluation is the location
3680     description of the base of the data object.
3682     See :ref:`amdgpu-dwarf-control-flow-operations` for special evaluation rules
3683     used by the ``DW_OP_call*`` operations.
3685     .. note::
3687       Delete the description of how the ``DW_OP_call*`` operations evaluate a
3688       ``DW_AT_location`` attribute as that is now described in the operations.
3690     .. note::
3692       See the discussion about the ``DW_AT_location`` attribute in the
3693       ``DW_OP_call*`` operation. Having each attribute only have a single
3694       purpose and single execution semantics seems desirable. It makes it easier
3695       for the consumer that no longer have to track the context. It makes it
3696       easier for the producer as it can rely on a single semantics for each
3697       attribute.
3699       For that reason, limiting the ``DW_AT_location`` attribute to only
3700       supporting evaluating the location description of an object, and using a
3701       different attribute and encoding class for the evaluation of DWARF
3702       expression *procedures* on the same operation expression stack seems
3703       desirable.
3705 2.  ``DW_AT_const_value``
3707     .. note::
3709       Could deprecate using the ``DW_AT_const_value`` attribute for
3710       ``DW_TAG_variable`` or ``DW_TAG_formal_parameter`` debugger information
3711       entries that have been optimized to a constant. Instead,
3712       ``DW_AT_location`` could be used with a DWARF expression that produces an
3713       implicit location description now that any location description can be
3714       used within a DWARF expression. This allows the ``DW_OP_call*`` operations
3715       to be used to push the location description of any variable regardless of
3716       how it is optimized.
3718 3.  ``DW_AT_LLVM_memory_space``
3720     A ``DW_AT_memory_space`` attribute with a constant value representing a source
3721     language specific DWARF memory space (see 2.14 "Memory Spaces"). If omitted,
3722     defaults to ``DW_MSPACE_none``.
3725 A.4.2 Common Block Entries
3726 ~~~~~~~~~~~~~~~~~~~~~~~~~~
3728 A common block entry also has a ``DW_AT_location`` attribute whose value is a
3729 DWARF expression E that describes the location of the common block at run-time.
3730 The result of the attribute is obtained by evaluating E with a context that has
3731 a result kind of a location description, an unspecified object, the compilation
3732 unit that contains E, an empty initial stack, and other context elements
3733 corresponding to the source language thread of execution upon which the user is
3734 focused, if any. The result of the evaluation is the location description of the
3735 base of the common block. See :ref:`amdgpu-dwarf-control-flow-operations` for
3736 special evaluation rules used by the ``DW_OP_call*`` operations.
3738 A.5 Type Entries
3739 ----------------
3741 .. note::
3743   This section provides changes to existing debugger information entry
3744   attributes. These would be incorporated into the corresponding DWARF Version 5
3745   chapter 5 sections.
3747 .. _amdgpu-dwarf-base-type-entries:
3749 A.5.1 Base Type Entries
3750 ~~~~~~~~~~~~~~~~~~~~~~~
3752 .. note::
3754   The following new attribute is added.
3756 1.  A ``DW_TAG_base_type`` debugger information entry for a base type T may have
3757     a ``DW_AT_LLVM_vector_size`` attribute whose value is an integer constant
3758     that is the vector type size N.
3760     The representation of a vector base type is as N contiguous elements, each
3761     one having the representation of a base type T' that is the same as T
3762     without the ``DW_AT_LLVM_vector_size`` attribute.
3764     If a ``DW_TAG_base_type`` debugger information entry does not have a
3765     ``DW_AT_LLVM_vector_size`` attribute, then the base type is not a vector
3766     type.
3768     The DWARF is ill-formed if N is not greater than 0.
3770     .. note::
3772       LLVM has mention of a non-upstreamed debugger information entry that is
3773       intended to support vector types. However, that was not for a base type so
3774       would not be suitable as the type of a stack value entry. But perhaps that
3775       could be replaced by using this attribute.
3777     .. note::
3779       Compare this with the ``DW_AT_GNU_vector`` extension supported by GNU. Is
3780       it better to add an attribute to the existing ``DW_TAG_base_type`` debug
3781       entry, or allow some forms of ``DW_TAG_array_type`` (those that have the
3782       ``DW_AT_GNU_vector`` attribute) to be used as stack entry value types?
3784 .. _amdgpu-dwarf-type-modifier-entries:
3786 A.5.3 Type Modifier Entries
3787 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
3789 .. note::
3791   This section augments DWARF Version 5 section 5.3.
3793 A modified type entry describing a pointer or reference type (using
3794 ``DW_TAG_pointer_type``, ``DW_TAG_reference_type`` or
3795 ``DW_TAG_rvalue_reference_type``\ ) may have a ``DW_AT_LLVM_memory_space``
3796 attribute with a constant value representing a source language specific DWARF
3797 memory space (see :ref:`amdgpu-dwarf-memory-spaces`). If omitted, defaults to
3798 DW_MSPACE_LLVM_none.
3800 A modified type entry describing a pointer or reference type (using
3801 ``DW_TAG_pointer_type``, ``DW_TAG_reference_type`` or
3802 ``DW_TAG_rvalue_reference_type``\ ) may have a ``DW_AT_LLVM_address_space``
3803 attribute with a constant value AS representing an architecture specific DWARF
3804 address space (see :ref:`amdgpu-dwarf-address-spaces`). If omitted, defaults to
3805 ``DW_ASPACE_LLVM_none``. DR is the offset of a hypothetical debug information
3806 entry D in the current compilation unit for an integral base type matching the
3807 address size of AS. An object P having the given pointer or reference type are
3808 dereferenced as if the ``DW_OP_push_object_address; DW_OP_deref_type DR;
3809 DW_OP_constu AS; DW_OP_form_aspace_address`` operation expression was evaluated
3810 with the current context except: the result kind is location description; the
3811 initial stack is empty; and the object is the location description of P.
3813 .. note::
3815   What if the current context does not have a current target architecture
3816   defined?
3818 .. note::
3820   With the expanded support for DWARF address spaces, it may be worth examining
3821   if they can be used for what was formerly supported by DWARF 5 segments. That
3822   would include specifying the address space of all code addresses (compilation
3823   units, subprograms, subprogram entries, labels, subprogram types, etc.).
3824   Either the code address attributes could be extended to allow a exprloc form
3825   (so that ``DW_OP_form_aspace_address`` can be used) or the
3826   ``DW_AT_LLVM_address_space`` attribute be allowed on all DIEs that allow
3827   ``DW_AT_segment``.
3829 A.5.7 Structure, Union, Class and Interface Type Entries
3830 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3832 A.5.7.3 Derived or Extended Structures, Classes and Interfaces
3833 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3835 1.  For a ``DW_AT_data_member_location`` attribute there are two cases:
3837     1.  If the attribute is an integer constant B, it provides the offset in
3838         bytes from the beginning of the containing entity.
3840         The result of the attribute is obtained by evaluating a
3841         ``DW_OP_LLVM_offset B`` operation with an initial stack comprising the
3842         location description of the beginning of the containing entity. The
3843         result of the evaluation is the location description of the base of the
3844         member entry.
3846         *If the beginning of the containing entity is not byte aligned, then the
3847         beginning of the member entry has the same bit displacement within a
3848         byte.*
3850     2.  Otherwise, the attribute must be a DWARF expression E which is evaluated
3851         with a context that has a result kind of a location description, an
3852         unspecified object, the compilation unit that contains E, an initial
3853         stack comprising the location description of the beginning of the
3854         containing entity, and other context elements corresponding to the
3855         source language thread of execution upon which the user is focused, if
3856         any. The result of the evaluation is the location description of the
3857         base of the member entry.
3859     .. note::
3861       The beginning of the containing entity can now be any location
3862       description, including those with more than one single location
3863       description, and those with single location descriptions that are of any
3864       kind and have any bit offset.
3866 A.5.7.8 Member Function Entries
3867 +++++++++++++++++++++++++++++++
3869 1.  An entry for a virtual function also has a ``DW_AT_vtable_elem_location``
3870     attribute whose value is a DWARF expression E.
3872     The result of the attribute is obtained by evaluating E with a context that
3873     has a result kind of a location description, an unspecified object, the
3874     compilation unit that contains E, an initial stack comprising the location
3875     description of the object of the enclosing type, and other context elements
3876     corresponding to the source language thread of execution upon which the user
3877     is focused, if any. The result of the evaluation is the location description
3878     of the slot for the function within the virtual function table for the
3879     enclosing class.
3881 A.5.14 Pointer to Member Type Entries
3882 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3884 1.  The ``DW_TAG_ptr_to_member_type`` debugging information entry has a
3885     ``DW_AT_use_location`` attribute whose value is a DWARF expression E. It is
3886     used to compute the location description of the member of the class to which
3887     the pointer to member entry points.
3889     *The method used to find the location description of a given member of a
3890     class, structure, or union is common to any instance of that class,
3891     structure, or union and to any instance of the pointer to member type. The
3892     method is thus associated with the pointer to member type, rather than with
3893     each object that has a pointer to member type.*
3895     The ``DW_AT_use_location`` DWARF expression is used in conjunction with the
3896     location description for a particular object of the given pointer to member
3897     type and for a particular structure or class instance.
3899     The result of the attribute is obtained by evaluating E with a context that
3900     has a result kind of a location description, an unspecified object, the
3901     compilation unit that contains E, an initial stack comprising two entries,
3902     and other context elements corresponding to the source language thread of
3903     execution upon which the user is focused, if any. The first stack entry is
3904     the value of the pointer to member object itself. The second stack entry is
3905     the location description of the base of the entire class, structure, or
3906     union instance containing the member whose location is being calculated. The
3907     result of the evaluation is the location description of the member of the
3908     class to which the pointer to member entry points.
3910 A.5.18 Dynamic Properties of Types
3911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3913 A.5.18.1 Data Location
3914 ++++++++++++++++++++++
3916 *Some languages may represent objects using descriptors to hold information,
3917 including a location and/or run-time parameters, about the data that represents
3918 the value for that object.*
3920 1.  The ``DW_AT_data_location`` attribute may be used with any type that
3921     provides one or more levels of hidden indirection and/or run-time parameters
3922     in its representation. Its value is a DWARF operation expression E which
3923     computes the location description of the data for an object. When this
3924     attribute is omitted, the location description of the data is the same as
3925     the location description of the object.
3927     The result of the attribute is obtained by evaluating E with a context that
3928     has a result kind of a location description, an object that is the location
3929     description of the data descriptor, the compilation unit that contains E, an
3930     empty initial stack, and other context elements corresponding to the source
3931     language thread of execution upon which the user is focused, if any. The
3932     result of the evaluation is the location description of the base of the
3933     member entry.
3935     *E will typically involve an operation expression that begins with a*
3936     ``DW_OP_push_object_address`` *operation which loads the location
3937     description of the object which can then serve as a descriptor in subsequent
3938     calculation.*
3940     .. note::
3942       Since ``DW_AT_data_member_location``, ``DW_AT_use_location``, and
3943       ``DW_AT_vtable_elem_location`` allow both operation expressions and
3944       location list expressions, why does ``DW_AT_data_location`` not allow
3945       both? In all cases they apply to data objects so less likely that
3946       optimization would cause different operation expressions for different
3947       program location ranges. But if supporting for some then should be for
3948       all.
3950       It seems odd this attribute is not the same as
3951       ``DW_AT_data_member_location`` in having an initial stack with the
3952       location description of the object since the expression has to need it.
3954 A.6 Other Debugging Information
3955 -------------------------------
3957 .. note::
3959   This section provides changes to existing debugger information entry
3960   attributes. These would be incorporated into the corresponding DWARF Version 5
3961   chapter 6 sections.
3963 A.6.1 Accelerated Access
3964 ~~~~~~~~~~~~~~~~~~~~~~~~
3966 .. _amdgpu-dwarf-lookup-by-name:
3968 A.6.1.1 Lookup By Name
3969 ++++++++++++++++++++++
3971 A.6.1.1.1 Contents of the Name Index
3972 ####################################
3974 .. note::
3976   The following provides changes to DWARF Version 5 section 6.1.1.1.
3978   The rule for debugger information entries included in the name index in the
3979   optional ``.debug_names`` section is extended to also include named
3980   ``DW_TAG_variable`` debugging information entries with a ``DW_AT_location``
3981   attribute that includes a ``DW_OP_LLVM_form_aspace_address`` operation.
3983 The name index must contain an entry for each debugging information entry that
3984 defines a named subprogram, label, variable, type, or namespace, subject to the
3985 following rules:
3987 * ``DW_TAG_variable`` debugging information entries with a ``DW_AT_location``
3988   attribute that includes a ``DW_OP_addr``, ``DW_OP_LLVM_form_aspace_address``,
3989   or ``DW_OP_form_tls_address`` operation are included; otherwise, they are
3990   excluded.
3992 A.6.1.1.4 Data Representation of the Name Index
3993 ###############################################
3995 .. _amdgpu-dwarf-name-index-section-header:
3998 A.6.1.1.4.1 Section Header
3999 ^^^^^^^^^^^^^^^^^^^^^^^^^^
4001 .. note::
4003   The following provides an addition to DWARF Version 5 section 6.1.1.4.1 item
4004   14 ``augmentation_string``.
4006 A null-terminated UTF-8 vendor specific augmentation string, which provides
4007 additional information about the contents of this index. If provided, the
4008 recommended format for augmentation string is:
4010   | ``[``\ *vendor*\ ``:v``\ *X*\ ``.``\ *Y*\ [\ ``:``\ *options*\ ]\ ``]``\ *
4012 Where *vendor* is the producer, ``vX.Y`` specifies the major X and minor Y
4013 version number of the extensions used in the DWARF of the compilation unit, and
4014 *options* is an optional string providing additional information about the
4015 extensions. The version number must conform to semantic versioning [:ref:`SEMVER
4016 <amdgpu-dwarf-SEMVER>`]. The *options* string must not contain the "\ ``]``\ "
4017 character.
4019 For example:
4021   ::
4023     [abc:v0.0][def:v1.2:feature-a=on,feature-b=3]
4025 .. note::
4027   This is different to the definition in DWARF Version 5 but is consistent with
4028   the other augmentation strings and allows multiple vendor extensions to be
4029   supported.
4031 .. _amdgpu-dwarf-line-number-information:
4033 A.6.2 Line Number Information
4034 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4036 A.6.2.4 The Line Number Program Header
4037 ++++++++++++++++++++++++++++++++++++++
4039 A.6.2.4.1 Standard Content Descriptions
4040 #######################################
4042 .. note::
4044   This augments DWARF Version 5 section 6.2.4.1.
4046 .. _amdgpu-dwarf-line-number-information-dw-lnct-llvm-source:
4048 1.  ``DW_LNCT_LLVM_source``
4050     The component is a null-terminated UTF-8 source text string with "\ ``\n``\
4051     " line endings. This content code is paired with the same forms as
4052     ``DW_LNCT_path``. It can be used for file name entries.
4054     The value is an empty null-terminated string if no source is available. If
4055     the source is available but is an empty file then the value is a
4056     null-terminated single "\ ``\n``\ ".
4058     *When the source field is present, consumers can use the embedded source
4059     instead of attempting to discover the source on disk using the file path
4060     provided by the* ``DW_LNCT_path`` *field. When the source field is absent,
4061     consumers can access the file to get the source text.*
4063     *This is particularly useful for programming languages that support runtime
4064     compilation and runtime generation of source text. In these cases, the
4065     source text does not reside in any permanent file. For example, the OpenCL
4066     language [:ref:`OpenCL <amdgpu-dwarf-OpenCL>`] supports online compilation.*
4068 2.  ``DW_LNCT_LLVM_is_MD5``
4070     ``DW_LNCT_LLVM_is_MD5`` indicates if the ``DW_LNCT_MD5`` content kind, if
4071     present, is valid: when 0 it is not valid and when 1 it is valid. If
4072     ``DW_LNCT_LLVM_is_MD5`` content kind is not present, and ``DW_LNCT_MD5``
4073     content kind is present, then the MD5 checksum is valid.
4075     ``DW_LNCT_LLVM_is_MD5`` is always paired with the ``DW_FORM_udata`` form.
4077     *This allows a compilation unit to have a mixture of files with and without
4078     MD5 checksums. This can happen when multiple relocatable files are linked
4079     together.*
4081 .. _amdgpu-dwarf-call-frame-information:
4083 A.6.4 Call Frame Information
4084 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4086 .. note::
4088   This section provides changes to existing call frame information and defines
4089   instructions added by these extensions. Additional support is added for
4090   address spaces. Register unwind DWARF expressions are generalized to allow any
4091   location description, including those with composite and implicit location
4092   descriptions.
4094   These changes would be incorporated into the DWARF Version 5 section 6.4.
4096 .. _amdgpu-dwarf-structure_of-call-frame-information:
4098 A.6.4.1 Structure of Call Frame Information
4099 +++++++++++++++++++++++++++++++++++++++++++
4101 The register rules are:
4103 *undefined*
4104   A register that has this rule has no recoverable value in the previous frame.
4105   The previous value of this register is the undefined location description (see
4106   :ref:`amdgpu-dwarf-undefined-location-description-operations`).
4108   *By convention, the register is not preserved by a callee.*
4110 *same value*
4111   This register has not been modified from the previous caller frame.
4113   If the current frame is the top frame, then the previous value of this
4114   register is the location description L that specifies one register location
4115   description SL. SL specifies the register location storage that corresponds to
4116   the register with a bit offset of 0 for the current thread.
4118   If the current frame is not the top frame, then the previous value of this
4119   register is the location description obtained using the call frame information
4120   for the callee frame and callee program location invoked by the current caller
4121   frame for the same register.
4123   *By convention, the register is preserved by the callee, but the callee has
4124   not modified it.*
4126 *offset(N)*
4127   N is a signed byte offset. The previous value of this register is saved at the
4128   location description computed as if the DWARF operation expression
4129   ``DW_OP_LLVM_offset N`` is evaluated with the current context, except the
4130   result kind is a location description, the compilation unit is unspecified,
4131   the object is unspecified, and an initial stack comprising the location
4132   description of the current CFA (see
4133   :ref:`amdgpu-dwarf-operation-expressions`).
4135 *val_offset(N)*
4136   N is a signed byte offset. The previous value of this register is the memory
4137   byte address of the location description computed as if the DWARF operation
4138   expression ``DW_OP_LLVM_offset N`` is evaluated with the current context,
4139   except the result kind is a location description, the compilation unit is
4140   unspecified, the object is unspecified, and an initial stack comprising the
4141   location description of the current CFA (see
4142   :ref:`amdgpu-dwarf-operation-expressions`).
4144   The DWARF is ill-formed if the CFA location description is not a memory byte
4145   address location description, or if the register size does not match the size
4146   of an address in the address space of the current CFA location description.
4148   *Since the CFA location description is required to be a memory byte address
4149   location description, the value of val_offset(N) will also be a memory byte
4150   address location description since it is offsetting the CFA location
4151   description by N bytes. Furthermore, the value of val_offset(N) will be a
4152   memory byte address in the same address space as the CFA location
4153   description.*
4155   .. note::
4157     Should DWARF allow the address size to be a different size to the size of
4158     the register? Requiring them to be the same bit size avoids any issue of
4159     conversion as the bit contents of the register is simply interpreted as a
4160     value of the address.
4162     GDB has a per register hook that allows a target specific conversion on a
4163     register by register basis. It defaults to truncation of bigger registers,
4164     and to actually reading bytes from the next register (or reads out of bounds
4165     for the last register) for smaller registers. There are no GDB tests that
4166     read a register out of bounds (except an illegal hand written assembly
4167     test).
4169 *register(R)*
4170   This register has been stored in another register numbered R.
4172   The previous value of this register is the location description obtained using
4173   the call frame information for the current frame and current program location
4174   for register R.
4176   The DWARF is ill-formed if the size of this register does not match the size
4177   of register R or if there is a cyclic dependency in the call frame
4178   information.
4180   .. note::
4182     Should this also allow R to be larger than this register? If so is the value
4183     stored in the low order bits and it is undefined what is stored in the
4184     extra upper bits?
4186 *expression(E)*
4187   The previous value of this register is located at the location description
4188   produced by evaluating the DWARF operation expression E (see
4189   :ref:`amdgpu-dwarf-operation-expressions`).
4191   E is evaluated with the current context, except the result kind is a location
4192   description, the compilation unit is unspecified, the object is unspecified,
4193   and an initial stack comprising the location description of the current CFA
4194   (see :ref:`amdgpu-dwarf-operation-expressions`).
4196 *val_expression(E)*
4197   The previous value of this register is located at the implicit location
4198   description created from the value produced by evaluating the DWARF operation
4199   expression E (see :ref:`amdgpu-dwarf-operation-expressions`).
4201   E is evaluated with the current context, except the result kind is a value,
4202   the compilation unit is unspecified, the object is unspecified, and an initial
4203   stack comprising the location description of the current CFA (see
4204   :ref:`amdgpu-dwarf-operation-expressions`).
4206   The DWARF is ill-formed if the resulting value type size does not match the
4207   register size.
4209   .. note::
4211     This has limited usefulness as the DWARF expression E can only produce
4212     values up to the size of the generic type. This is due to not allowing any
4213     operations that specify a type in a CFI operation expression. This makes it
4214     unusable for registers that are larger than the generic type. However,
4215     *expression(E)* can be used to create an implicit location description of
4216     any size.
4218 *architectural*
4219   The rule is defined externally to this specification by the augmenter.
4221 *This table would be extremely large if actually constructed as described. Most
4222 of the entries at any point in the table are identical to the ones above them.
4223 The whole table can be represented quite compactly by recording just the
4224 differences starting at the beginning address of each subroutine in the
4225 program.*
4227 The virtual unwind information is encoded in a self-contained section called
4228 ``.debug_frame``. Entries in a ``.debug_frame`` section are aligned on a
4229 multiple of the address size relative to the start of the section and come in
4230 two forms: a Common Information Entry (CIE) and a Frame Description Entry (FDE).
4232 *If the range of code addresses for a function is not contiguous, there may be
4233 multiple CIEs and FDEs corresponding to the parts of that function.*
4235 A Common Information Entry (CIE) holds information that is shared among many
4236 Frame Description Entries (FDE). There is at least one CIE in every non-empty
4237 ``.debug_frame`` section. A CIE contains the following fields, in order:
4239 1.  ``length`` (initial length)
4241     A constant that gives the number of bytes of the CIE structure, not
4242     including the length field itself (see Section 7.2.2 Initial Length Values).
4243     The size of the length field plus the value of length must be an integral
4244     multiple of the address size specified in the ``address_size`` field.
4246 2.  ``CIE_id`` (4 or 8 bytes, see
4247     :ref:`amdgpu-dwarf-32-bit-and-64-bit-dwarf-formats`)
4249     A constant that is used to distinguish CIEs from FDEs.
4251     In the 32-bit DWARF format, the value of the CIE id in the CIE header is
4252     0xffffffff; in the 64-bit DWARF format, the value is 0xffffffffffffffff.
4254 3.  ``version`` (ubyte)
4256     A version number (see Section 7.24 Call Frame Information). This number is
4257     specific to the call frame information and is independent of the DWARF
4258     version number.
4260     The value of the CIE version number is 4.
4262     .. note::
4264       Would this be increased to 5 to reflect the changes in these extensions?
4266 4.  ``augmentation`` (sequence of UTF-8 characters)
4268     A null-terminated UTF-8 string that identifies the augmentation to this CIE
4269     or to the FDEs that use it. If a reader encounters an augmentation string
4270     that is unexpected, then only the following fields can be read:
4272     * CIE: length, CIE_id, version, augmentation
4273     * FDE: length, CIE_pointer, initial_location, address_range
4275     If there is no augmentation, this value is a zero byte.
4277     *The augmentation string allows users to indicate that there is additional
4278     vendor and target architecture specific information in the CIE or FDE which
4279     is needed to virtually unwind a stack frame. For example, this might be
4280     information about dynamically allocated data which needs to be freed on exit
4281     from the routine.*
4283     *Because the* ``.debug_frame`` *section is useful independently of any*
4284     ``.debug_info`` *section, the augmentation string always uses UTF-8
4285     encoding.*
4287     The recommended format for the augmentation string is:
4289       | ``[``\ *vendor*\ ``:v``\ *X*\ ``.``\ *Y*\ [\ ``:``\ *options*\ ]\ ``]``\ *
4291     Where *vendor* is the producer, ``vX.Y`` specifies the major X and minor Y
4292     version number of the extensions used, and *options* is an optional string
4293     providing additional information about the extensions. The version number
4294     must conform to semantic versioning [:ref:`SEMVER <amdgpu-dwarf-SEMVER>`].
4295     The *options* string must not contain the "\ ``]``\ " character.
4297     For example:
4299       ::
4301         [abc:v0.0][def:v1.2:feature-a=on,feature-b=3]
4303 5.  ``address_size`` (ubyte)
4305     The size of a target address in this CIE and any FDEs that use it, in bytes.
4306     If a compilation unit exists for this frame, its address size must match the
4307     address size here.
4309 6.  ``segment_selector_size`` (ubyte)
4311     The size of a segment selector in this CIE and any FDEs that use it, in
4312     bytes.
4314 7.  ``code_alignment_factor`` (unsigned LEB128)
4316     A constant that is factored out of all advance location instructions (see
4317     :ref:`amdgpu-dwarf-row-creation-instructions`). The resulting value is
4318     ``(operand * code_alignment_factor)``.
4320 8.  ``data_alignment_factor`` (signed LEB128)
4322     A constant that is factored out of certain offset instructions (see
4323     :ref:`amdgpu-dwarf-cfa-definition-instructions` and
4324     :ref:`amdgpu-dwarf-register-rule-instructions`). The resulting value is
4325     ``(operand * data_alignment_factor)``.
4327 9.  ``return_address_register`` (unsigned LEB128)
4329     An unsigned LEB128 constant that indicates which column in the rule table
4330     represents the return address of the subprogram. Note that this column might
4331     not correspond to an actual machine register.
4333     The value of the return address register is used to determine the program
4334     location of the caller frame. The program location of the top frame is the
4335     target architecture program counter value of the current thread.
4337 10. ``initial_instructions`` (array of ubyte)
4339     A sequence of rules that are interpreted to create the initial setting of
4340     each column in the table.
4342     The default rule for all columns before interpretation of the initial
4343     instructions is the undefined rule. However, an ABI authoring body or a
4344     compilation system authoring body may specify an alternate default value for
4345     any or all columns.
4347 11. ``padding`` (array of ubyte)
4349     Enough ``DW_CFA_nop`` instructions to make the size of this entry match the
4350     length value above.
4352 An FDE contains the following fields, in order:
4354 1.  ``length`` (initial length)
4356     A constant that gives the number of bytes of the header and instruction
4357     stream for this subprogram, not including the length field itself (see
4358     Section 7.2.2 Initial Length Values). The size of the length field plus the
4359     value of length must be an integral multiple of the address size.
4361 2.  ``CIE_pointer`` (4 or 8 bytes, see
4362     :ref:`amdgpu-dwarf-32-bit-and-64-bit-dwarf-formats`)
4364     A constant offset into the ``.debug_frame`` section that denotes the CIE
4365     that is associated with this FDE.
4367 3.  ``initial_location`` (segment selector and target address)
4369     The address of the first location associated with this table entry. If the
4370     segment_selector_size field of this FDE’s CIE is non-zero, the initial
4371     location is preceded by a segment selector of the given length.
4373 4.  ``address_range`` (target address)
4375     The number of bytes of program instructions described by this entry.
4377 5.  ``instructions`` (array of ubyte)
4379     A sequence of table defining instructions that are described in
4380     :ref:`amdgpu-dwarf-call-frame-instructions`.
4382 6.  ``padding`` (array of ubyte)
4384     Enough ``DW_CFA_nop`` instructions to make the size of this entry match the
4385     length value above.
4387 .. _amdgpu-dwarf-call-frame-instructions:
4389 A.6.4.2 Call Frame Instructions
4390 +++++++++++++++++++++++++++++++
4392 Each call frame instruction is defined to take 0 or more operands. Some of the
4393 operands may be encoded as part of the opcode (see
4394 :ref:`amdgpu-dwarf-call-frame-information-encoding`). The instructions are
4395 defined in the following sections.
4397 Some call frame instructions have operands that are encoded as DWARF operation
4398 expressions E (see :ref:`amdgpu-dwarf-operation-expressions`). The DWARF
4399 operations that can be used in E have the following restrictions:
4401 * ``DW_OP_addrx``, ``DW_OP_call2``, ``DW_OP_call4``, ``DW_OP_call_ref``,
4402   ``DW_OP_const_type``, ``DW_OP_constx``, ``DW_OP_convert``,
4403   ``DW_OP_deref_type``, ``DW_OP_fbreg``, ``DW_OP_implicit_pointer``,
4404   ``DW_OP_regval_type``, ``DW_OP_reinterpret``, and ``DW_OP_xderef_type``
4405   operations are not allowed because the call frame information must not depend
4406   on other debug sections.
4408 * ``DW_OP_push_object_address`` is not allowed because there is no object
4409   context to provide a value to push.
4411 * ``DW_OP_LLVM_push_lane`` and ``DW_OP_LLVM_push_iteration`` are not allowed
4412   because the call frame instructions describe the actions for the whole target
4413   architecture thread, not the lanes or iterations independently.
4415 * ``DW_OP_call_frame_cfa`` and ``DW_OP_entry_value`` are not allowed because
4416   their use would be circular.
4418 * ``DW_OP_LLVM_call_frame_entry_reg`` is not allowed if evaluating E causes a
4419   circular dependency between ``DW_OP_LLVM_call_frame_entry_reg`` operations.
4421   *For example, if a register R1 has a* ``DW_CFA_def_cfa_expression``
4422   *instruction that evaluates a* ``DW_OP_LLVM_call_frame_entry_reg`` *operation
4423   that specifies register R2, and register R2 has a*
4424   ``DW_CFA_def_cfa_expression`` *instruction that that evaluates a*
4425   ``DW_OP_LLVM_call_frame_entry_reg`` *operation that specifies register R1.*
4427 *Call frame instructions to which these restrictions apply include*
4428 ``DW_CFA_def_cfa_expression``\ *,* ``DW_CFA_expression``\ *, and*
4429 ``DW_CFA_val_expression``\ *.*
4431 .. _amdgpu-dwarf-row-creation-instructions:
4433 A.6.4.2.1 Row Creation Instructions
4434 ###################################
4436 .. note::
4438   These instructions are the same as in DWARF Version 5 section 6.4.2.1.
4440 .. _amdgpu-dwarf-cfa-definition-instructions:
4442 A.6.4.2.2 CFA Definition Instructions
4443 #####################################
4445 1.  ``DW_CFA_def_cfa``
4447     The ``DW_CFA_def_cfa`` instruction takes two unsigned LEB128 operands
4448     representing a register number R and a (non-factored) byte displacement B.
4449     AS is set to the target architecture default address space identifier. The
4450     required action is to define the current CFA rule to be equivalent to the
4451     result of evaluating the DWARF operation expression ``DW_OP_constu AS;
4452     DW_OP_LLVM_aspace_bregx R, B`` as a location description.
4454 2.  ``DW_CFA_def_cfa_sf``
4456     The ``DW_CFA_def_cfa_sf`` instruction takes two operands: an unsigned LEB128
4457     value representing a register number R and a signed LEB128 factored byte
4458     displacement B. AS is set to the target architecture default address space
4459     identifier. The required action is to define the current CFA rule to be
4460     equivalent to the result of evaluating the DWARF operation expression
4461     ``DW_OP_constu AS; DW_OP_LLVM_aspace_bregx R, B * data_alignment_factor`` as
4462     a location description.
4464     *The action is the same as* ``DW_CFA_def_cfa``\ *, except that the second
4465     operand is signed and factored.*
4467 3.  ``DW_CFA_LLVM_def_aspace_cfa`` *New*
4469     The ``DW_CFA_LLVM_def_aspace_cfa`` instruction takes three unsigned LEB128
4470     operands representing a register number R, a (non-factored) byte
4471     displacement B, and a target architecture specific address space identifier
4472     AS. The required action is to define the current CFA rule to be equivalent
4473     to the result of evaluating the DWARF operation expression ``DW_OP_constu
4474     AS; DW_OP_LLVM_aspace_bregx R, B`` as a location description.
4476     If AS is not one of the values defined by the target architecture specific
4477     ``DW_ASPACE_LLVM_*`` values then the DWARF expression is ill-formed.
4479 4.  ``DW_CFA_LLVM_def_aspace_cfa_sf`` *New*
4481     The ``DW_CFA_LLVM_def_aspace_cfa_sf`` instruction takes three operands: an
4482     unsigned LEB128 value representing a register number R, a signed LEB128
4483     factored byte displacement B, and an unsigned LEB128 value representing a
4484     target architecture specific address space identifier AS. The required
4485     action is to define the current CFA rule to be equivalent to the result of
4486     evaluating the DWARF operation expression ``DW_OP_constu AS;
4487     DW_OP_LLVM_aspace_bregx R, B * data_alignment_factor`` as a location
4488     description.
4490     If AS is not one of the values defined by the target architecture specific
4491     ``DW_ASPACE_LLVM_*`` values, then the DWARF expression is ill-formed.
4493     *The action is the same as* ``DW_CFA_aspace_def_cfa``\ *, except that the
4494     second operand is signed and factored.*
4496 5.  ``DW_CFA_def_cfa_register``
4498     The ``DW_CFA_def_cfa_register`` instruction takes a single unsigned LEB128
4499     operand representing a register number R. The required action is to define
4500     the current CFA rule to be equivalent to the result of evaluating the DWARF
4501     operation expression ``DW_OP_constu AS; DW_OP_LLVM_aspace_bregx R, B`` as a
4502     location description. B and AS are the old CFA byte displacement and address
4503     space respectively.
4505     If the subprogram has no current CFA rule, or the rule was defined by a
4506     ``DW_CFA_def_cfa_expression`` instruction, then the DWARF is ill-formed.
4508 6.  ``DW_CFA_def_cfa_offset``
4510     The ``DW_CFA_def_cfa_offset`` instruction takes a single unsigned LEB128
4511     operand representing a (non-factored) byte displacement B. The required
4512     action is to define the current CFA rule to be equivalent to the result of
4513     evaluating the DWARF operation expression ``DW_OP_constu AS;
4514     DW_OP_LLVM_aspace_bregx R, B`` as a location description. R and AS are the
4515     old CFA register number and address space respectively.
4517     If the subprogram has no current CFA rule, or the rule was defined by a
4518     ``DW_CFA_def_cfa_expression`` instruction, then the DWARF is ill-formed.
4520 7.  ``DW_CFA_def_cfa_offset_sf``
4522     The ``DW_CFA_def_cfa_offset_sf`` instruction takes a signed LEB128 operand
4523     representing a factored byte displacement B. The required action is to
4524     define the current CFA rule to be equivalent to the result of evaluating the
4525     DWARF operation expression ``DW_OP_constu AS; DW_OP_LLVM_aspace_bregx R, B *
4526     data_alignment_factor`` as a location description. R and AS are the old CFA
4527     register number and address space respectively.
4529     If the subprogram has no current CFA rule, or the rule was defined by a
4530     ``DW_CFA_def_cfa_expression`` instruction, then the DWARF is ill-formed.
4532     *The action is the same as* ``DW_CFA_def_cfa_offset``\ *, except that the
4533     operand is signed and factored.*
4535 8.  ``DW_CFA_def_cfa_expression``
4537     The ``DW_CFA_def_cfa_expression`` instruction takes a single operand encoded
4538     as a ``DW_FORM_exprloc`` value representing a DWARF operation expression E.
4539     The required action is to define the current CFA rule to be equivalent to
4540     the result of evaluating E with the current context, except the result kind
4541     is a location description, the compilation unit is unspecified, the object
4542     is unspecified, and an empty initial stack.
4544     *See* :ref:`amdgpu-dwarf-call-frame-instructions` *regarding restrictions on
4545     the DWARF expression operations that can be used in E.*
4547     The DWARF is ill-formed if the result of evaluating E is not a memory byte
4548     address location description.
4550 .. _amdgpu-dwarf-register-rule-instructions:
4552 A.6.4.2.3 Register Rule Instructions
4553 ####################################
4555 1.  ``DW_CFA_undefined``
4557     The ``DW_CFA_undefined`` instruction takes a single unsigned LEB128 operand
4558     that represents a register number R. The required action is to set the rule
4559     for the register specified by R to ``undefined``.
4561 2.  ``DW_CFA_same_value``
4563     The ``DW_CFA_same_value`` instruction takes a single unsigned LEB128 operand
4564     that represents a register number R. The required action is to set the rule
4565     for the register specified by R to ``same value``.
4567 3.  ``DW_CFA_offset``
4569     The ``DW_CFA_offset`` instruction takes two operands: a register number R
4570     (encoded with the opcode) and an unsigned LEB128 constant representing a
4571     factored displacement B. The required action is to change the rule for the
4572     register specified by R to be an *offset(B \* data_alignment_factor)* rule.
4574     .. note::
4576       Seems this should be named ``DW_CFA_offset_uf`` since the offset is
4577       unsigned factored.
4579 4.  ``DW_CFA_offset_extended``
4581     The ``DW_CFA_offset_extended`` instruction takes two unsigned LEB128
4582     operands representing a register number R and a factored displacement B.
4583     This instruction is identical to ``DW_CFA_offset``, except for the encoding
4584     and size of the register operand.
4586     .. note::
4588       Seems this should be named ``DW_CFA_offset_extended_uf`` since the
4589       displacement is unsigned factored.
4591 5.  ``DW_CFA_offset_extended_sf``
4593     The ``DW_CFA_offset_extended_sf`` instruction takes two operands: an
4594     unsigned LEB128 value representing a register number R and a signed LEB128
4595     factored displacement B. This instruction is identical to
4596     ``DW_CFA_offset_extended``, except that B is signed.
4598 6.  ``DW_CFA_val_offset``
4600     The ``DW_CFA_val_offset`` instruction takes two unsigned LEB128 operands
4601     representing a register number R and a factored displacement B. The required
4602     action is to change the rule for the register indicated by R to be a
4603     *val_offset(B \* data_alignment_factor)* rule.
4605     .. note::
4607       Seems this should be named ``DW_CFA_val_offset_uf`` since the displacement
4608       is unsigned factored.
4610     .. note::
4612       An alternative is to define ``DW_CFA_val_offset`` to implicitly use the
4613       target architecture default address space, and add another operation that
4614       specifies the address space.
4616 7.  ``DW_CFA_val_offset_sf``
4618     The ``DW_CFA_val_offset_sf`` instruction takes two operands: an unsigned
4619     LEB128 value representing a register number R and a signed LEB128 factored
4620     displacement B. This instruction is identical to ``DW_CFA_val_offset``,
4621     except that B is signed.
4623 8.  ``DW_CFA_register``
4625     The ``DW_CFA_register`` instruction takes two unsigned LEB128 operands
4626     representing register numbers R1 and R2 respectively. The required action is
4627     to set the rule for the register specified by R1 to be a *register(R2)* rule.
4629 9.  ``DW_CFA_expression``
4631     The ``DW_CFA_expression`` instruction takes two operands: an unsigned LEB128
4632     value representing a register number R, and a ``DW_FORM_block`` value
4633     representing a DWARF operation expression E. The required action is to
4634     change the rule for the register specified by R to be an *expression(E)*
4635     rule.
4637     *That is, E computes the location description where the register value can
4638     be retrieved.*
4640     *See* :ref:`amdgpu-dwarf-call-frame-instructions` *regarding restrictions on
4641     the DWARF expression operations that can be used in E.*
4643 10. ``DW_CFA_val_expression``
4645     The ``DW_CFA_val_expression`` instruction takes two operands: an unsigned
4646     LEB128 value representing a register number R, and a ``DW_FORM_block`` value
4647     representing a DWARF operation expression E. The required action is to
4648     change the rule for the register specified by R to be a *val_expression(E)*
4649     rule.
4651     *That is, E computes the value of register R.*
4653     *See* :ref:`amdgpu-dwarf-call-frame-instructions` *regarding restrictions on
4654     the DWARF expression operations that can be used in E.*
4656     If the result of evaluating E is not a value with a base type size that
4657     matches the register size, then the DWARF is ill-formed.
4659 11. ``DW_CFA_restore``
4661     The ``DW_CFA_restore`` instruction takes a single operand (encoded with the
4662     opcode) that represents a register number R. The required action is to
4663     change the rule for the register specified by R to the rule assigned it by
4664     the ``initial_instructions`` in the CIE.
4666 12. ``DW_CFA_restore_extended``
4668     The ``DW_CFA_restore_extended`` instruction takes a single unsigned LEB128
4669     operand that represents a register number R. This instruction is identical
4670     to ``DW_CFA_restore``, except for the encoding and size of the register
4671     operand.
4673 A.6.4.2.4 Row State Instructions
4674 ################################
4676 .. note::
4678   These instructions are the same as in DWARF Version 5 section 6.4.2.4.
4680 A.6.4.2.5 Padding Instruction
4681 #############################
4683 .. note::
4685   These instructions are the same as in DWARF Version 5 section 6.4.2.5.
4687 A.6.4.3 Call Frame Instruction Usage
4688 ++++++++++++++++++++++++++++++++++++
4690 .. note::
4692   The same as in DWARF Version 5 section 6.4.3.
4694 .. _amdgpu-dwarf-call-frame-calling-address:
4696 A.6.4.4 Call Frame Calling Address
4697 ++++++++++++++++++++++++++++++++++
4699 .. note::
4701   The same as in DWARF Version 5 section 6.4.4.
4703 A.7 Data Representation
4704 -----------------------
4706 .. note::
4708   This section provides changes to existing debugger information entry
4709   attributes. These would be incorporated into the corresponding DWARF Version 5
4710   chapter 7 sections.
4712 .. _amdgpu-dwarf-32-bit-and-64-bit-dwarf-formats:
4714 A.7.4 32-Bit and 64-Bit DWARF Formats
4715 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4717 .. note::
4719   This augments DWARF Version 5 section 7.4 list item 3's table.
4721 .. table:: ``.debug_info`` section attribute form roles
4722   :name: amdgpu-dwarf-debug-info-section-attribute-form-roles-table
4724   ================================== ===================================
4725   Form                               Role
4726   ================================== ===================================
4727   DW_OP_LLVM_aspace_implicit_pointer offset in ``.debug_info``
4728   ================================== ===================================
4730 A.7.5 Format of Debugging Information
4731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4733 A.7.5.4 Attribute Encodings
4734 +++++++++++++++++++++++++++
4736 .. note::
4738   This augments DWARF Version 5 section 7.5.4 and Table 7.5.
4740 The following table gives the encoding of the additional debugging information
4741 entry attributes.
4743 .. table:: Attribute encodings
4744    :name: amdgpu-dwarf-attribute-encodings-table
4746    ================================== ====== ===================================
4747    Attribute Name                     Value  Classes
4748    ================================== ====== ===================================
4749    ``DW_AT_LLVM_active_lane``         0x3e08 exprloc, loclist
4750    ``DW_AT_LLVM_augmentation``        0x3e09 string
4751    ``DW_AT_LLVM_lanes``               0x3e0a constant
4752    ``DW_AT_LLVM_lane_pc``             0x3e0b exprloc, loclist
4753    ``DW_AT_LLVM_vector_size``         0x3e0c constant
4754    ``DW_AT_LLVM_iterations``          0x3e0a constant, exprloc, loclist
4755    ``DW_AT_LLVM_address_space``       TBA    constant
4756    ``DW_AT_LLVM_memory_space``        TBA    constant
4757    ================================== ====== ===================================
4759 .. _amdgpu-dwarf-classes-and-forms:
4761 A.7.5.5 Classes and Forms
4762 +++++++++++++++++++++++++
4764 .. note::
4766   The following modifies the matching text in DWARF Version 5 section 7.5.5.
4768 * reference
4769     There are four types of reference.
4771       - The first type of reference...
4773       - The second type of reference can identify any debugging information
4774         entry within a .debug_info section; in particular, it may refer to an
4775         entry in a different compilation unit from the unit containing the
4776         reference, and may refer to an entry in a different shared object file.
4777         This type of reference (DW_FORM_ref_addr) is an offset from the
4778         beginning of the .debug_info section of the target executable or shared
4779         object file, or, for references within a supplementary object file, an
4780         offset from the beginning of the local .debug_info section; it is
4781         relocatable in a relocatable object file and frequently relocated in an
4782         executable or shared object file. In the 32-bit DWARF format, this
4783         offset is a 4-byte unsigned value; in the 64-bit DWARF format, it is an
4784         8-byte unsigned value (see
4785         :ref:`amdgpu-dwarf-32-bit-and-64-bit-dwarf-formats`).
4787         *A debugging information entry that may be referenced by another
4788         compilation unit using DW_FORM_ref_addr must have a global symbolic
4789         name.*
4791         *For a reference from one executable or shared object file to another,
4792         the reference is resolved by the debugger to identify the executable or
4793         shared object file and the offset into that file's* ``.debug_info``
4794         *section in the same fashion as the run time loader, either when the
4795         debug information is first read, or when the reference is used.*
4797 A.7.7 DWARF Expressions
4798 ~~~~~~~~~~~~~~~~~~~~~~~
4800 .. note::
4802   Rename DWARF Version 5 section 7.7 to reflect the unification of location
4803   descriptions into DWARF expressions.
4805 A.7.7.1 Operation Expressions
4806 +++++++++++++++++++++++++++++
4808 .. note::
4810   Rename DWARF Version 5 section 7.7.1 and delete section 7.7.2 to reflect the
4811   unification of location descriptions into DWARF expressions.
4813   This augments DWARF Version 5 section 7.7.1 and Table 7.9, and adds a new
4814   table describing vendor extension operations for ``DW_OP_LLVM_user``.
4816 A DWARF operation expression is stored in a block of contiguous bytes. The bytes
4817 form a sequence of operations. Each operation is a 1-byte code that identifies
4818 that operation, followed by zero or more bytes of additional data. The encoding
4819 for the operation ``DW_OP_LLVM_user`` is described in
4820 :ref:`amdgpu-dwarf-operation-encodings-table`, and the encoding of all
4821 ``DW_OP_LLVM_user`` vendor extensions operations are described in
4822 :ref:`amdgpu-dwarf-dw-op-llvm-user-vendor-extension-operation-encodings-table`.
4824 .. table:: DWARF Operation Encodings
4825    :name: amdgpu-dwarf-operation-encodings-table
4827    ====================================== ===== ======== =========================================================================================
4828    Operation                              Code  Number   Notes
4829                                                 of
4830                                                 Operands
4831    ====================================== ===== ======== =========================================================================================
4832    ``DW_OP_LLVM_user``                    0xe9     1+    ULEB128 vendor extension opcode, followed by vendor extension operands
4833                                                          defined in :ref:`amdgpu-dwarf-dw-op-llvm-user-vendor-extension-operation-encodings-table`
4834    ====================================== ===== ======== =========================================================================================
4836 .. table:: DWARF DW_OP_LLVM_user Vendor Extension Operation Encodings
4837    :name: amdgpu-dwarf-dw-op-llvm-user-vendor-extension-operation-encodings-table
4839    ====================================== ========= ========== ===============================
4840    Operation                              Vendor    Number     Notes
4841                                           Extension of
4842                                           Opcode    Additional
4843                                                     Operands
4844    ====================================== ========= ========== ===============================
4845    ``DW_OP_LLVM_form_aspace_address``     0x02          0
4846    ``DW_OP_LLVM_push_lane``               0x03          0
4847    ``DW_OP_LLVM_offset``                  0x04          0
4848    ``DW_OP_LLVM_offset_uconst``           0x05          1      ULEB128 byte displacement
4849    ``DW_OP_LLVM_bit_offset``              0x06          0
4850    ``DW_OP_LLVM_call_frame_entry_reg``    0x07          1      ULEB128 register number
4851    ``DW_OP_LLVM_undefined``               0x08          0
4852    ``DW_OP_LLVM_aspace_bregx``            0x09          2      ULEB128 register number,
4853                                                                SLEB128 byte displacement
4854    ``DW_OP_LLVM_piece_end``               0x0a          0
4855    ``DW_OP_LLVM_extend``                  0x0b          2      ULEB128 bit size,
4856                                                                ULEB128 count
4857    ``DW_OP_LLVM_select_bit_piece``        0x0c          2      ULEB128 bit size,
4858                                                                ULEB128 count
4859    ``DW_OP_LLVM_aspace_implicit_pointer`` TBA           2      4-byte or 8-byte offset of DIE,
4860                                                                SLEB128 byte displacement
4861    ``DW_OP_LLVM_push_iteration``          TBA           0
4862    ``DW_OP_LLVM_overlay``                 TBA           0
4863    ``DW_OP_LLVM_bit_overlay``             TBA           0
4864    ====================================== ========= ========== ===============================
4866 A.7.7.3 Location List Expressions
4867 +++++++++++++++++++++++++++++++++
4869 .. note::
4871   Rename DWARF Version 5 section 7.7.3 to reflect that location lists are a kind
4872   of DWARF expression.
4874 A.7.12 Source Languages
4875 ~~~~~~~~~~~~~~~~~~~~~~~
4877 .. note::
4879   This augments DWARF Version 5 section 7.12 and Table 7.17.
4881 The following table gives the encoding of the additional DWARF languages.
4883 .. table:: Language encodings
4884    :name: amdgpu-dwarf-language-encodings-table
4886    ==================== ====== ===================
4887    Language Name        Value  Default Lower Bound
4888    ==================== ====== ===================
4889    ``DW_LANG_LLVM_HIP`` 0x8100 0
4890    ==================== ====== ===================
4892 A.7.14 Address Space Encodings
4893 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4895 .. note::
4897   This is a new section after DWARF Version 5 section 7.13 "Address Class and
4898   Address Space Encodings".
4900 The value of the common address space encoding ``DW_ASPACE_LLVM_none`` is 0.
4902 A.7.15 Memory Space Encodings
4903 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4905 .. note::
4907   This is a new section after DWARF Version 5 section 7.13 "Address Class and
4908   Address Space Encodings".
4910 The encodings of the constants used for the currently defined memory spaces
4911 are given in :ref:`amdgpu-dwarf-memory-space-encodings-table`.
4913 .. table:: Memory space encodings
4914    :name: amdgpu-dwarf-memory-space-encodings-table
4916    =========================== ======
4917    Memory Space Name           Value
4918    =========================== ======
4919    ``DW_MSPACE_LLVM_none``     0x0000
4920    ``DW_MSPACE_LLVM_global``   0x0001
4921    ``DW_MSPACE_LLVM_constant`` 0x0002
4922    ``DW_MSPACE_LLVM_group``    0x0003
4923    ``DW_MSPACE_LLVM_private``  0x0004
4924    ``DW_MSPACE_LLVM_lo_user``  0x8000
4925    ``DW_MSPACE_LLVM_hi_user``  0xffff
4926    =========================== ======
4928 A.7.22 Line Number Information
4929 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4931 .. note::
4933   This augments DWARF Version 5 section 7.22 and Table 7.27.
4935 The following table gives the encoding of the additional line number header
4936 entry formats.
4938 .. table:: Line number header entry format encodings
4939   :name: amdgpu-dwarf-line-number-header-entry-format-encodings-table
4941   ====================================  ====================
4942   Line number header entry format name  Value
4943   ====================================  ====================
4944   ``DW_LNCT_LLVM_source``               0x2001
4945   ``DW_LNCT_LLVM_is_MD5``               0x2002
4946   ====================================  ====================
4948 .. _amdgpu-dwarf-call-frame-information-encoding:
4950 A.7.24 Call Frame Information
4951 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4953 .. note::
4955   This augments DWARF Version 5 section 7.24 and Table 7.29.
4957 The following table gives the encoding of the additional call frame information
4958 instructions.
4960 .. table:: Call frame instruction encodings
4961    :name: amdgpu-dwarf-call-frame-instruction-encodings-table
4963    ================================= ====== ====== ================ ================ =====================
4964    Instruction                       High 2 Low 6  Operand 1        Operand 2        Operand 3
4965                                      Bits   Bits
4966    ================================= ====== ====== ================ ================ =====================
4967    ``DW_CFA_LLVM_def_aspace_cfa``    0      0x30   ULEB128 register ULEB128 offset   ULEB128 address space
4968    ``DW_CFA_LLVM_def_aspace_cfa_sf`` 0      0x31   ULEB128 register SLEB128 offset   ULEB128 address space
4969    ================================= ====== ====== ================ ================ =====================
4971 A.7.32 Type Signature Computation
4972 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4974 .. note::
4976   This augments (in alphabetical order) DWARF Version 5 section 7.32, Table
4977   7.32.
4979 .. table:: Attributes used in type signature computation
4980    :name: amdgpu-dwarf-attributes-used-in-type-signature-computation-table
4982    ================================== =======
4983    ``DW_AT_LLVM_address_space``
4984    ``DW_AT_LLVM_memory_space``
4985    ``DW_AT_LLVM_vector_size``
4986    ================================== =======
4988 A. Attributes by Tag Value (Informative)
4989 ----------------------------------------
4991 .. note::
4993   This augments DWARF Version 5 Appendix A and Table A.1.
4995 The following table provides the additional attributes that are applicable to
4996 debugger information entries.
4998 .. table:: Attributes by tag value
4999    :name: amdgpu-dwarf-attributes-by-tag-value-table
5001    ================================== =============================
5002    Tag Name                           Applicable Attributes
5003    ================================== =============================
5004    ``DW_TAG_base_type``               * ``DW_AT_LLVM_vector_size``
5005    ``DW_TAG_pointer_type``            * ``DW_AT_LLVM_address_space``
5006                                       * ``DW_AT_LLVM_memory_space``
5007    ``DW_TAG_reference_type``          * ``DW_AT_LLVM_address_space``
5008                                       * ``DW_AT_LLVM_memory_space``
5009    ``DW_TAG_rvalue_reference_type``   * ``DW_AT_LLVM_address_space``
5010                                       * ``DW_AT_LLVM_memory_space``
5011    ``DW_TAG_variable``                * ``DW_AT_LLVM_memory_space``
5012    ``DW_TAG_formal_parameter``        * ``DW_AT_LLVM_memory_space``
5013    ``DW_TAG_constant``                * ``DW_AT_LLVM_memory_space``
5014    ``DW_TAG_compile_unit``            * ``DW_AT_LLVM_augmentation``
5015    ``DW_TAG_entry_point``             * ``DW_AT_LLVM_active_lane``
5016                                       * ``DW_AT_LLVM_lane_pc``
5017                                       * ``DW_AT_LLVM_lanes``
5018                                       * ``DW_AT_LLVM_iterations``
5019    ``DW_TAG_inlined_subroutine``      * ``DW_AT_LLVM_active_lane``
5020                                       * ``DW_AT_LLVM_lane_pc``
5021                                       * ``DW_AT_LLVM_lanes``
5022                                       * ``DW_AT_LLVM_iterations``
5023    ``DW_TAG_subprogram``              * ``DW_AT_LLVM_active_lane``
5024                                       * ``DW_AT_LLVM_lane_pc``
5025                                       * ``DW_AT_LLVM_lanes``
5026                                       * ``DW_AT_LLVM_iterations``
5027    ================================== =============================
5029 D. Examples (Informative)
5030 -------------------------
5032 .. note::
5034   This modifies the corresponding DWARF Version 5 Appendix D examples.
5036 D.1 General Description Examples
5037 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5039 D.1.3 DWARF Location Description Examples
5040 +++++++++++++++++++++++++++++++++++++++++
5042 ``DW_OP_offset_uconst 4``
5043   A structure member is four bytes from the start of the structure instance. The
5044   location description of the base of the structure instance is assumed to be
5045   already on the stack.
5047 ``DW_OP_entry_value 1 DW_OP_reg5 DW_OP_offset_uconst 16``
5048   The address of the memory location is calculated by adding 16 to the value
5049   contained in register 5 upon entering the current subprogram.
5051 D.2 Aggregate Examples
5052 ~~~~~~~~~~~~~~~~~~~~~~
5054 D.2.1 Fortran Simple Array Example
5055 ++++++++++++++++++++++++++++++++++
5057 Figure D.4: Fortran array example: DWARF description
5059 .. code::
5060   :number-lines:
5062   -------------------------------------------------------------------------------
5063   ! Description for type of 'ap'
5064   !
5065   1$: DW_TAG_array_type
5066           ! No name, default (Fortran) ordering, default stride
5067           DW_AT_type(reference to REAL)
5068           DW_AT_associated(expression=    ! Test 'ptr_assoc' flag
5069               DW_OP_push_object_address
5070               DW_OP_lit<n>                ! where n == offset(ptr_assoc)
5071               DW_OP_offset
5072               DW_OP_deref
5073               DW_OP_lit1                  ! mask for 'ptr_assoc' flag
5074               DW_OP_and)
5075           DW_AT_data_location(expression= ! Get raw data address
5076               DW_OP_push_object_address
5077               DW_OP_lit<n>                ! where n == offset(base)
5078               DW_OP_offset
5079               DW_OP_deref)                ! Type of index of array 'ap'
5080   2$:     DW_TAG_subrange_type
5081               ! No name, default stride
5082               DW_AT_type(reference to INTEGER)
5083               DW_AT_lower_bound(expression=
5084                   DW_OP_push_object_address
5085                   DW_OP_lit<n>            ! where n ==
5086                                           !   offset(desc, dims) +
5087                                           !   offset(dims_str, lower_bound)
5088                   DW_OP_offset
5089                   DW_OP_deref)
5090               DW_AT_upper_bound(expression=
5091                   DW_OP_push_object_address
5092                   DW_OP_lit<n>            ! where n ==
5093                                           !   offset(desc, dims) +
5094                                           !   offset(dims_str, upper_bound)
5095                   DW_OP_offset
5096                   DW_OP_deref)
5097   !  Note: for the m'th dimension, the second operator becomes
5098   !  DW_OP_lit<n> where
5099   !       n == offset(desc, dims)          +
5100   !                (m-1)*sizeof(dims_str)  +
5101   !                 offset(dims_str, [lower|upper]_bound)
5102   !  That is, the expression does not get longer for each successive
5103   !  dimension (other than to express the larger offsets involved).
5104   3$: DW_TAG_structure_type
5105           DW_AT_name("array_ptr")
5106           DW_AT_byte_size(constant sizeof(REAL) + sizeof(desc<1>))
5107   4$:     DW_TAG_member
5108               DW_AT_name("myvar")
5109               DW_AT_type(reference to REAL)
5110               DW_AT_data_member_location(constant 0)
5111   5$:     DW_TAG_member
5112               DW_AT_name("ap");
5113               DW_AT_type(reference to 1$)
5114               DW_AT_data_member_location(constant sizeof(REAL))
5115   6$: DW_TAG_array_type
5116           ! No name, default (Fortran) ordering, default stride
5117           DW_AT_type(reference to 3$)
5118           DW_AT_allocated(expression=       ! Test 'ptr_alloc' flag
5119               DW_OP_push_object_address
5120               DW_OP_lit<n>                  ! where n == offset(ptr_alloc)
5121               DW_OP_offset
5122               DW_OP_deref
5123               DW_OP_lit2                    ! Mask for 'ptr_alloc' flag
5124               DW_OP_and)
5125           DW_AT_data_location(expression=   ! Get raw data address
5126               DW_OP_push_object_address
5127               DW_OP_lit<n>                  ! where n == offset(base)
5128               DW_OP_offset
5129               DW_OP_deref)
5130   7$:     DW_TAG_subrange_type
5131               ! No name, default stride
5132               DW_AT_type(reference to INTEGER)
5133               DW_AT_lower_bound(expression=
5134                   DW_OP_push_object_address
5135                   DW_OP_lit<n>              ! where n == ...
5136                   DW_OP_offset
5137                   DW_OP_deref)
5138               DW_AT_upper_bound(expression=
5139                   DW_OP_push_object_address
5140                   DW_OP_lit<n>              ! where n == ...
5141                   DW_OP_offset
5142                   DW_OP_deref)
5143   8$: DW_TAG_variable
5144           DW_AT_name("arrayvar")
5145           DW_AT_type(reference to 6$)
5146           DW_AT_location(expression=
5147               ...as appropriate...)         ! Assume static allocation
5148   -------------------------------------------------------------------------------
5150 D.2.3 Fortran 2008 Assumed-rank Array Example
5151 +++++++++++++++++++++++++++++++++++++++++++++
5153 Figure D.13: Sample DWARF for the array descriptor in Figure D.12
5155 .. code::
5156   :number-lines:
5158   ----------------------------------------------------------------------------
5159   10$:  DW_TAG_array_type
5160           DW_AT_type(reference to real)
5161           DW_AT_rank(expression=
5162               DW_OP_push_object_address
5163               DW_OP_lit<n>
5164               DW_OP_offset
5165               DW_OP_deref)
5166           DW_AT_data_location(expression=
5167               DW_OP_push_object_address
5168               DW_OP_lit<n>
5169               DW_OP_offset
5170               DW_OP_deref)
5171   11$:     DW_TAG_generic_subrange
5172               DW_AT_type(reference to integer)
5173               !   offset of rank in descriptor
5174               !   offset of data in descriptor
5175               DW_AT_lower_bound(expression=
5176               !   Looks up the lower bound of dimension i.
5177               !   Operation                       ! Stack effect
5178               !   (implicit)                      ! i
5179                   DW_OP_lit<n>                    ! i sizeof(dim)
5180                   DW_OP_mul                       ! dim[i]
5181                   DW_OP_lit<n>                    ! dim[i] offsetof(dim)
5182                   DW_OP_plus                      ! dim[i]+offset
5183                   DW_OP_push_object_address       ! dim[i]+offsetof(dim) objptr
5184                   DW_OP_swap                      ! objptr dim[i]+offsetof(dim)
5185                   DW_OP_offset                    ! objptr.dim[i]
5186                   DW_OP_lit<n>                    ! objptr.dim[i] offsetof(lb)
5187                   DW_OP_offset                    ! objptr.dim[i].lowerbound
5188                   DW_OP_deref)                    ! *objptr.dim[i].lowerbound
5189               DW_AT_upper_bound(expression=
5190               !   Looks up the upper bound of dimension i.
5191                   DW_OP_lit<n>                    ! sizeof(dim)
5192                   DW_OP_mul
5193                   DW_OP_lit<n>                    ! offsetof(dim)
5194                   DW_OP_plus
5195                   DW_OP_push_object_address
5196                   DW_OP_swap
5197                   DW_OP_offset
5198                   DW_OP_lit<n>                    ! offset of upperbound in dim
5199                   DW_OP_offset
5200                   DW_OP_deref)
5201               DW_AT_byte_stride(expression=
5202               !   Looks up the byte stride of dimension i.
5203                   ...
5204               !   (analogous to DW_AT_upper_bound)
5205                   )
5206   ----------------------------------------------------------------------------
5208 .. note::
5210   This example suggests that ``DW_AT_lower_bound`` and ``DW_AT_upper_bound``
5211   evaluate an exprloc with an initial stack containing the rank value. The
5212   attribute definition should be updated to state this.
5214 D.2.6 Ada Example
5215 +++++++++++++++++
5217 Figure D.20: Ada example: DWARF description
5219 .. code::
5220   :number-lines:
5222   ----------------------------------------------------------------------------
5223   11$:  DW_TAG_variable
5224             DW_AT_name("M")
5225             DW_AT_type(reference to INTEGER)
5226   12$:  DW_TAG_array_type
5227             ! No name, default (Ada) order, default stride
5228             DW_AT_type(reference to INTEGER)
5229   13$:      DW_TAG_subrange_type
5230                 DW_AT_type(reference to INTEGER)
5231                 DW_AT_lower_bound(constant 1)
5232                 DW_AT_upper_bound(reference to variable M at 11$)
5233   14$:  DW_TAG_variable
5234             DW_AT_name("VEC1")
5235             DW_AT_type(reference to array type at 12$)
5236         ...
5237   21$:  DW_TAG_subrange_type
5238             DW_AT_name("TEENY")
5239             DW_AT_type(reference to INTEGER)
5240             DW_AT_lower_bound(constant 1)
5241             DW_AT_upper_bound(constant 100)
5242         ...
5243   26$:  DW_TAG_structure_type
5244             DW_AT_name("REC2")
5245   27$:      DW_TAG_member
5246                 DW_AT_name("N")
5247                 DW_AT_type(reference to subtype TEENY at 21$)
5248                 DW_AT_data_member_location(constant 0)
5249   28$:      DW_TAG_array_type
5250                 ! No name, default (Ada) order, default stride
5251                 ! Default data location
5252                 DW_AT_type(reference to INTEGER)
5253   29$:          DW_TAG_subrange_type
5254                     DW_AT_type(reference to subrange TEENY at 21$)
5255                     DW_AT_lower_bound(constant 1)
5256                     DW_AT_upper_bound(reference to member N at 27$)
5257   30$:      DW_TAG_member
5258                 DW_AT_name("VEC2")
5259                 DW_AT_type(reference to array "subtype" at 28$)
5260                 DW_AT_data_member_location(machine=
5261                     DW_OP_lit<n>                ! where n == offset(REC2, VEC2)
5262                     DW_OP_offset)
5263         ...
5264   41$:  DW_TAG_variable
5265             DW_AT_name("OBJ2B")
5266             DW_AT_type(reference to REC2 at 26$)
5267             DW_AT_location(...as appropriate...)
5268   ----------------------------------------------------------------------------
5270 .. _amdgpu-dwarf-further-examples:
5272 C. Further Examples
5273 ===================
5275 The AMD GPU specific usage of the features in these extensions, including
5276 examples, is available at *User Guide for AMDGPU Backend* section
5277 :ref:`amdgpu-dwarf-debug-information`.
5279 .. note::
5281   Change examples to use ``DW_OP_LLVM_offset`` instead of ``DW_OP_add`` when
5282   acting on a location description.
5284   Need to provide examples of new features.
5286 .. _amdgpu-dwarf-references:
5288 D. References
5289 =============
5291     .. _amdgpu-dwarf-AMD:
5293 1.  [AMD] `Advanced Micro Devices <https://www.amd.com/>`__
5295     .. _amdgpu-dwarf-AMD-ROCgdb:
5297 2.  [AMD-ROCgdb] `AMD ROCm Debugger (ROCgdb) <https://github.com/ROCm-Developer-Tools/ROCgdb>`__
5299     .. _amdgpu-dwarf-AMD-ROCm:
5301 3.  [AMD-ROCm] `AMD ROCm Platform <https://rocm-documentation.readthedocs.io>`__
5303     .. _amdgpu-dwarf-AMDGPU-DWARF-LOC:
5305 4.  [AMDGPU-DWARF-LOC] `Allow Location Descriptions on the DWARF Expression Stack <https://llvm.org/docs/AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack/AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack.html>`__
5307     .. _amdgpu-dwarf-AMDGPU-LLVM:
5309 5.  [AMDGPU-LLVM] `User Guide for AMDGPU LLVM Backend <https://llvm.org/docs/AMDGPUUsage.html>`__
5311     .. _amdgpu-dwarf-CUDA:
5313 6.  [CUDA] `Nvidia CUDA Language <https://docs.nvidia.com/cuda/cuda-c-programming-guide/>`__
5315     .. _amdgpu-dwarf-DWARF:
5317 7.  [DWARF] `DWARF Debugging Information Format <http://dwarfstd.org/>`__
5319     .. _amdgpu-dwarf-ELF:
5321 8.  [ELF] `Executable and Linkable Format (ELF) <http://www.sco.com/developers/gabi/>`__
5323     .. _amdgpu-dwarf-GCC:
5325 9.  [GCC] `GCC: The GNU Compiler Collection <https://www.gnu.org/software/gcc/>`__
5327     .. _amdgpu-dwarf-GDB:
5329 10. [GDB] `GDB: The GNU Project Debugger <https://www.gnu.org/software/gdb/>`__
5331     .. _amdgpu-dwarf-HIP:
5333 11. [HIP] `HIP Programming Guide <https://rocm-documentation.readthedocs.io/en/latest/Programming_Guides/Programming-Guides.html#hip-programing-guide>`__
5335     .. _amdgpu-dwarf-HSA:
5337 12. [HSA] `Heterogeneous System Architecture (HSA) Foundation <http://www.hsafoundation.com/>`__
5339     .. _amdgpu-dwarf-LLVM:
5341 13. [LLVM] `The LLVM Compiler Infrastructure <https://llvm.org/>`__
5343     .. _amdgpu-dwarf-OpenCL:
5345 14. [OpenCL] `The OpenCL Specification Version 2.0 <http://www.khronos.org/registry/cl/specs/opencl-2.0.pdf>`__
5347     .. _amdgpu-dwarf-Perforce-TotalView:
5349 15. [Perforce-TotalView] `Perforce TotalView HPC Debugging Software <https://totalview.io/products/totalview>`__
5351     .. _amdgpu-dwarf-SEMVER:
5353 16. [SEMVER] `Semantic Versioning <https://semver.org/>`__