<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/lldb/source/Expression/DWARFExpression.cpp, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/'/>
<entry>
<title>Reland "Revert "[lldb] Fix OP_deref evaluation for large integer resu… (#159482)</title>
<updated>2025-09-18T00:02:24+00:00</updated>
<author>
<name>Felipe de Azevedo Piovezan</name>
<email>fpiovezan@apple.com</email>
</author>
<published>2025-09-18T00:02:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=bb013a4a220d423e64ecadd3f337b7f95368786d'/>
<id>bb013a4a220d423e64ecadd3f337b7f95368786d</id>
<content type='text'>
…lts (#159460)""

The original had an issue on "AArch-less" bots.
Fixed it with some ifdefs around the presence of the AArch ABI plugin.

This reverts commit 1a4685df13282ae5c1d7dce055a71a7130bfab3c.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
…lts (#159460)""

The original had an issue on "AArch-less" bots.
Fixed it with some ifdefs around the presence of the AArch ABI plugin.

This reverts commit 1a4685df13282ae5c1d7dce055a71a7130bfab3c.</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "[lldb] Fix OP_deref evaluation for large integer results (#159460)"</title>
<updated>2025-09-17T22:49:09+00:00</updated>
<author>
<name>Felipe de Azevedo Piovezan</name>
<email>fpiovezan@apple.com</email>
</author>
<published>2025-09-17T22:49:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1a4685df13282ae5c1d7dce055a71a7130bfab3c'/>
<id>1a4685df13282ae5c1d7dce055a71a7130bfab3c</id>
<content type='text'>
This reverts commit 1d2007ba6f7bacda8848e35298a1833e79f4abd5.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 1d2007ba6f7bacda8848e35298a1833e79f4abd5.
</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Fix OP_deref evaluation for large integer results (#159460)</title>
<updated>2025-09-17T22:46:24+00:00</updated>
<author>
<name>Felipe de Azevedo Piovezan</name>
<email>fpiovezan@apple.com</email>
</author>
<published>2025-09-17T22:46:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1d2007ba6f7bacda8848e35298a1833e79f4abd5'/>
<id>1d2007ba6f7bacda8848e35298a1833e79f4abd5</id>
<content type='text'>
When evaluating any DWARF expression that ended in OP_deref and whose
previous value on the dwarf stack -- the pointer address for the deref
-- was a load address, we were treating the result itself as a pointer,
calling Process:FixCodeAddress(result). This is wrong: there's no
guarantee that the result is a pointer itself.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When evaluating any DWARF expression that ended in OP_deref and whose
previous value on the dwarf stack -- the pointer address for the deref
-- was a load address, we were treating the result itself as a pointer,
calling Process:FixCodeAddress(result). This is wrong: there's no
guarantee that the result is a pointer itself.</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Track CFA pointer metadata in StackID (#157498)</title>
<updated>2025-09-12T16:17:48+00:00</updated>
<author>
<name>Felipe de Azevedo Piovezan</name>
<email>fpiovezan@apple.com</email>
</author>
<published>2025-09-12T16:17:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=5d088ba30440d37f180f6b2e2f2fcc25d5c77018'/>
<id>5d088ba30440d37f180f6b2e2f2fcc25d5c77018</id>
<content type='text'>
[lldb] Track CFA pointer metadata in StackID

    In this commit:

9c8e71644227 [lldb] Make StackID call Fix{Code,Data} pointers (#152796)

We made StackID keep track of the CFA without any pointer metadata in
it. This is necessary when comparing two StackIDs to determine which one
    is "younger".

However, the CFA inside StackIDs is also used in other contexts through
    the method StackID::GetCallFrameAddress. One notable case is
DWARFExpression: the computation of `DW_OP_call_frame_address` is done
    using StackID. This feeds into many other places, e.g. expression
evaluation may require the address of a variable that is computed from
    the CFA; to access the variable without faulting, we may need to
preserve the pointer metadata. As such, StackID must be able to provide
    both versions of the CFA.

    In the spirit of allowing consumers of pointers to decide what to do
with pointer metadata, this patch changes StackID to store both versions
of the cfa pointer. Two getter methods are provided, and all call sites
    except DWARFExpression preserve their existing behavior (stripped
    pointer). Other alternatives were considered:

    * Just store the raw pointer. This would require changing the
comparisong operator `&lt;` to also receive a Process, as the comparison
requires stripped pointers. It wasn't clear if all call-sites had a
non-null process, whereas we know we have a process when creating a
      StackID.

* Store a weak pointer to the process inside the class, and then strip
      metadata as needed. This would require a `weak_ptr::lock` in many
operations of LLDB, and it felt wasteful. It also prevents stripping
      of the pointer if the process has gone away.

This patch also changes RegisterContextUnwind::ReadFrameAddress, which
is the method computing the CFA fed into StackID, to also preserve the
    signature pointers.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[lldb] Track CFA pointer metadata in StackID

    In this commit:

9c8e71644227 [lldb] Make StackID call Fix{Code,Data} pointers (#152796)

We made StackID keep track of the CFA without any pointer metadata in
it. This is necessary when comparing two StackIDs to determine which one
    is "younger".

However, the CFA inside StackIDs is also used in other contexts through
    the method StackID::GetCallFrameAddress. One notable case is
DWARFExpression: the computation of `DW_OP_call_frame_address` is done
    using StackID. This feeds into many other places, e.g. expression
evaluation may require the address of a variable that is computed from
    the CFA; to access the variable without faulting, we may need to
preserve the pointer metadata. As such, StackID must be able to provide
    both versions of the CFA.

    In the spirit of allowing consumers of pointers to decide what to do
with pointer metadata, this patch changes StackID to store both versions
of the cfa pointer. Two getter methods are provided, and all call sites
    except DWARFExpression preserve their existing behavior (stripped
    pointer). Other alternatives were considered:

    * Just store the raw pointer. This would require changing the
comparisong operator `&lt;` to also receive a Process, as the comparison
requires stripped pointers. It wasn't clear if all call-sites had a
non-null process, whereas we know we have a process when creating a
      StackID.

* Store a weak pointer to the process inside the class, and then strip
      metadata as needed. This would require a `weak_ptr::lock` in many
operations of LLDB, and it felt wasteful. It also prevents stripping
      of the pointer if the process has gone away.

This patch also changes RegisterContextUnwind::ReadFrameAddress, which
is the method computing the CFA fed into StackID, to also preserve the
    signature pointers.</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Correct style of error messages (#156774)</title>
<updated>2025-09-04T23:37:41+00:00</updated>
<author>
<name>Jonas Devlieghere</name>
<email>jonas@devlieghere.com</email>
</author>
<published>2025-09-04T23:37:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=820f4402745dda82fca482f2b83925e2953e6ad9'/>
<id>820f4402745dda82fca482f2b83925e2953e6ad9</id>
<content type='text'>
The LLVM Style Guide says the following about error and warning messages
[1]:

&gt; [T]o match error message styles commonly produced by other tools,
&gt; start the first sentence with a lowercase letter, and finish the last
&gt; sentence without a period, if it would end in one otherwise.

I often provide this feedback during code review, but we still have a
bunch of places where we have inconsistent error message, which bothers
me as a user. This PR identifies a handful of those places and updates
the messages to be consistent.

[1] https://llvm.org/docs/CodingStandards.html#error-and-warning-messages</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The LLVM Style Guide says the following about error and warning messages
[1]:

&gt; [T]o match error message styles commonly produced by other tools,
&gt; start the first sentence with a lowercase letter, and finish the last
&gt; sentence without a period, if it would end in one otherwise.

I often provide this feedback during code review, but we still have a
bunch of places where we have inconsistent error message, which bothers
me as a user. This PR identifies a handful of those places and updates
the messages to be consistent.

[1] https://llvm.org/docs/CodingStandards.html#error-and-warning-messages</pre>
</div>
</content>
</entry>
<entry>
<title>Stateful variable-location annotations in Disassembler::PrintInstructions() (follow-up to #147460) (#152887)</title>
<updated>2025-08-28T17:41:38+00:00</updated>
<author>
<name>Abdullah Mohammad Amin</name>
<email>67847674+UltimateForce21@users.noreply.github.com</email>
</author>
<published>2025-08-28T17:41:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=8ec4db5e17f654670cd0d5e43e3a57a9b39b4f9d'/>
<id>8ec4db5e17f654670cd0d5e43e3a57a9b39b4f9d</id>
<content type='text'>
**Context**  
Follow-up to
[#147460](https://github.com/llvm/llvm-project/pull/147460), which added
the ability to surface register-resident variable locations.
This PR moves the annotation logic out of `Instruction::Dump()` and into
`Disassembler::PrintInstructions()`, and adds lightweight state tracking
so we only print changes at range starts and when variables go out of
scope.

---

## What this does

While iterating the instructions for a function, we maintain a “live
variable map” keyed by `lldb::user_id_t` (the `Variable`’s ID) to
remember each variable’s last emitted location string. For each
instruction:

- **New (or newly visible) variable** → print `name = &lt;location&gt;` once
at the start of its DWARF location range, cache it.
- **Location changed** (e.g., DWARF range switched to a different
register/const) → print the updated mapping.
- **Out of scope** (was tracked previously but not found for the current
PC) → print `name = &lt;undef&gt;` and drop it.

This produces **concise, stateful annotations** that highlight variable
lifetime transitions without spamming every line.

---

## Why in `PrintInstructions()`?

- Keeps `Instruction` stateless and avoids changing the
`Instruction::Dump()` virtual API.
- Makes it straightforward to diff state across instructions (`prev →
current`) inside the single driver loop.

---

## How it works (high-level)

1. For the current PC, get in-scope variables via
`StackFrame::GetInScopeVariableList(/*get_parent=*/true)`.
2. For each `Variable`, query
`DWARFExpressionList::GetExpressionEntryAtAddress(func_load_addr,
current_pc)` (added in #144238).
3. If the entry exists, call `DumpLocation(..., eDescriptionLevelBrief,
abi)` to get a short, ABI-aware location string (e.g., `DW_OP_reg3 RBX →
RBX`).
4. Compare against the last emitted location in the live map:
   - If not present → emit `name = &lt;location&gt;` and record it.
   - If different → emit updated mapping and record it.
5. After processing current in-scope variables, compute the set
difference vs. the previous map and emit `name = &lt;undef&gt;` for any that
disappeared.

Internally:
- We respect file↔load address translation already provided by
`DWARFExpressionList`.
- We reuse the ABI to map LLVM register numbers to arch register names.

---

## Example output (x86_64, simplified)

```
-&gt;  0x55c6f5f6a140 &lt;+0&gt;:  cmpl   $0x2, %edi                                                         ; argc = RDI, argv = RSI
    0x55c6f5f6a143 &lt;+3&gt;:  jl     0x55c6f5f6a176            ; &lt;+54&gt; at d_original_example.c:6:3
    0x55c6f5f6a145 &lt;+5&gt;:  pushq  %r15
    0x55c6f5f6a147 &lt;+7&gt;:  pushq  %r14
    0x55c6f5f6a149 &lt;+9&gt;:  pushq  %rbx
    0x55c6f5f6a14a &lt;+10&gt;: movq   %rsi, %rbx
    0x55c6f5f6a14d &lt;+13&gt;: movl   %edi, %r14d
    0x55c6f5f6a150 &lt;+16&gt;: movl   $0x1, %r15d                                                        ; argc = R14
    0x55c6f5f6a156 &lt;+22&gt;: nopw   %cs:(%rax,%rax)                                                    ; i = R15, argv = RBX
    0x55c6f5f6a160 &lt;+32&gt;: movq   (%rbx,%r15,8), %rdi
    0x55c6f5f6a164 &lt;+36&gt;: callq  0x55c6f5f6a030            ; symbol stub for: puts
    0x55c6f5f6a169 &lt;+41&gt;: incq   %r15
    0x55c6f5f6a16c &lt;+44&gt;: cmpq   %r15, %r14
    0x55c6f5f6a16f &lt;+47&gt;: jne    0x55c6f5f6a160            ; &lt;+32&gt; at d_original_example.c:5:10
    0x55c6f5f6a171 &lt;+49&gt;: popq   %rbx                                                               ; i = &lt;undef&gt;
    0x55c6f5f6a172 &lt;+50&gt;: popq   %r14                                                               ; argv = RSI
    0x55c6f5f6a174 &lt;+52&gt;: popq   %r15                                                               ; argc = RDI
    0x55c6f5f6a176 &lt;+54&gt;: xorl   %eax, %eax
    0x55c6f5f6a178 &lt;+56&gt;: retq  
```

Only transitions are shown: the start of a location, changes, and
end-of-lifetime.

---

## Scope &amp; limitations (by design)

- Handles **simple locations** first (registers, const-in-register cases
surfaced by `DumpLocation`).
- **Memory/composite locations** are out of scope for this PR.
- Annotations appear **only at range boundaries** (start/change/end) to
minimize noise.
- Output is **target-independent**; register names come from the target
ABI.

## Implementation notes

- All annotation printing now happens in
`Disassembler::PrintInstructions()`.
- Uses `std::unordered_map&lt;lldb::user_id_t, std::string&gt;` as the live
map.
- No persistent state across calls; the map is rebuilt while walking
instruction by instruction.
- **No changes** to the `Instruction` interface.

---

## Requested feedback

- Placement and wording of the `&lt;undef&gt;` marker.
- Whether we should optionally gate this behind a setting (currently
always on when disassembling with an `ExecutionContext`).
- Preference for immediate inclusion of tests vs. follow-up patch.

---

Thanks for reviewing! Happy to adjust behavior/format based on feedback.

---------

Co-authored-by: Jonas Devlieghere &lt;jonas@devlieghere.com&gt;
Co-authored-by: Adrian Prantl &lt;adrian.prantl@gmail.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
**Context**  
Follow-up to
[#147460](https://github.com/llvm/llvm-project/pull/147460), which added
the ability to surface register-resident variable locations.
This PR moves the annotation logic out of `Instruction::Dump()` and into
`Disassembler::PrintInstructions()`, and adds lightweight state tracking
so we only print changes at range starts and when variables go out of
scope.

---

## What this does

While iterating the instructions for a function, we maintain a “live
variable map” keyed by `lldb::user_id_t` (the `Variable`’s ID) to
remember each variable’s last emitted location string. For each
instruction:

- **New (or newly visible) variable** → print `name = &lt;location&gt;` once
at the start of its DWARF location range, cache it.
- **Location changed** (e.g., DWARF range switched to a different
register/const) → print the updated mapping.
- **Out of scope** (was tracked previously but not found for the current
PC) → print `name = &lt;undef&gt;` and drop it.

This produces **concise, stateful annotations** that highlight variable
lifetime transitions without spamming every line.

---

## Why in `PrintInstructions()`?

- Keeps `Instruction` stateless and avoids changing the
`Instruction::Dump()` virtual API.
- Makes it straightforward to diff state across instructions (`prev →
current`) inside the single driver loop.

---

## How it works (high-level)

1. For the current PC, get in-scope variables via
`StackFrame::GetInScopeVariableList(/*get_parent=*/true)`.
2. For each `Variable`, query
`DWARFExpressionList::GetExpressionEntryAtAddress(func_load_addr,
current_pc)` (added in #144238).
3. If the entry exists, call `DumpLocation(..., eDescriptionLevelBrief,
abi)` to get a short, ABI-aware location string (e.g., `DW_OP_reg3 RBX →
RBX`).
4. Compare against the last emitted location in the live map:
   - If not present → emit `name = &lt;location&gt;` and record it.
   - If different → emit updated mapping and record it.
5. After processing current in-scope variables, compute the set
difference vs. the previous map and emit `name = &lt;undef&gt;` for any that
disappeared.

Internally:
- We respect file↔load address translation already provided by
`DWARFExpressionList`.
- We reuse the ABI to map LLVM register numbers to arch register names.

---

## Example output (x86_64, simplified)

```
-&gt;  0x55c6f5f6a140 &lt;+0&gt;:  cmpl   $0x2, %edi                                                         ; argc = RDI, argv = RSI
    0x55c6f5f6a143 &lt;+3&gt;:  jl     0x55c6f5f6a176            ; &lt;+54&gt; at d_original_example.c:6:3
    0x55c6f5f6a145 &lt;+5&gt;:  pushq  %r15
    0x55c6f5f6a147 &lt;+7&gt;:  pushq  %r14
    0x55c6f5f6a149 &lt;+9&gt;:  pushq  %rbx
    0x55c6f5f6a14a &lt;+10&gt;: movq   %rsi, %rbx
    0x55c6f5f6a14d &lt;+13&gt;: movl   %edi, %r14d
    0x55c6f5f6a150 &lt;+16&gt;: movl   $0x1, %r15d                                                        ; argc = R14
    0x55c6f5f6a156 &lt;+22&gt;: nopw   %cs:(%rax,%rax)                                                    ; i = R15, argv = RBX
    0x55c6f5f6a160 &lt;+32&gt;: movq   (%rbx,%r15,8), %rdi
    0x55c6f5f6a164 &lt;+36&gt;: callq  0x55c6f5f6a030            ; symbol stub for: puts
    0x55c6f5f6a169 &lt;+41&gt;: incq   %r15
    0x55c6f5f6a16c &lt;+44&gt;: cmpq   %r15, %r14
    0x55c6f5f6a16f &lt;+47&gt;: jne    0x55c6f5f6a160            ; &lt;+32&gt; at d_original_example.c:5:10
    0x55c6f5f6a171 &lt;+49&gt;: popq   %rbx                                                               ; i = &lt;undef&gt;
    0x55c6f5f6a172 &lt;+50&gt;: popq   %r14                                                               ; argv = RSI
    0x55c6f5f6a174 &lt;+52&gt;: popq   %r15                                                               ; argc = RDI
    0x55c6f5f6a176 &lt;+54&gt;: xorl   %eax, %eax
    0x55c6f5f6a178 &lt;+56&gt;: retq  
```

Only transitions are shown: the start of a location, changes, and
end-of-lifetime.

---

## Scope &amp; limitations (by design)

- Handles **simple locations** first (registers, const-in-register cases
surfaced by `DumpLocation`).
- **Memory/composite locations** are out of scope for this PR.
- Annotations appear **only at range boundaries** (start/change/end) to
minimize noise.
- Output is **target-independent**; register names come from the target
ABI.

## Implementation notes

- All annotation printing now happens in
`Disassembler::PrintInstructions()`.
- Uses `std::unordered_map&lt;lldb::user_id_t, std::string&gt;` as the live
map.
- No persistent state across calls; the map is rebuilt while walking
instruction by instruction.
- **No changes** to the `Instruction` interface.

---

## Requested feedback

- Placement and wording of the `&lt;undef&gt;` marker.
- Whether we should optionally gate this behind a setting (currently
always on when disassembling with an `ExecutionContext`).
- Preference for immediate inclusion of tests vs. follow-up patch.

---

Thanks for reviewing! Happy to adjust behavior/format based on feedback.

---------

Co-authored-by: Jonas Devlieghere &lt;jonas@devlieghere.com&gt;
Co-authored-by: Adrian Prantl &lt;adrian.prantl@gmail.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Zero extend APInt when piece size is bigger than the bitwidth (#150149)</title>
<updated>2025-08-04T16:42:42+00:00</updated>
<author>
<name>satyanarayana reddy janga</name>
<email>satyajanga@fb.com</email>
</author>
<published>2025-08-04T16:42:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=a0db29d64788c44230b0808317d5841c5558bec6'/>
<id>a0db29d64788c44230b0808317d5841c5558bec6</id>
<content type='text'>
### Summary
We have internally seen cases like this 
`DW_OP_lit0, DW_OP_stack_value, DW_OP_piece 0x28`
where we have longer op pieces than what Scalar supports (32, 64 or 128
bits). In these cases LLDB is currently hitting the assertion
`assert(ap_int.getBitWidth() &gt;= bit_size);`

We are extending the generated APInt to the piece size by filling zeros.


### Test plan

Added a unit to cover this case. 

### Reviewers
@clayborg , @jeffreytan81 , @Jlalond</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
### Summary
We have internally seen cases like this 
`DW_OP_lit0, DW_OP_stack_value, DW_OP_piece 0x28`
where we have longer op pieces than what Scalar supports (32, 64 or 128
bits). In these cases LLDB is currently hitting the assertion
`assert(ap_int.getBitWidth() &gt;= bit_size);`

We are extending the generated APInt to the piece size by filling zeros.


### Test plan

Added a unit to cover this case. 

### Reviewers
@clayborg , @jeffreytan81 , @Jlalond</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Support DW_OP_WASM_location in DWARFExpression (#151010)</title>
<updated>2025-07-30T16:20:37+00:00</updated>
<author>
<name>Jonas Devlieghere</name>
<email>jonas@devlieghere.com</email>
</author>
<published>2025-07-30T16:20:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=c2548a8c4c581bfd7c2b7738508fff4d85413cd6'/>
<id>c2548a8c4c581bfd7c2b7738508fff4d85413cd6</id>
<content type='text'>
Add support for DW_OP_WASM_location in DWARFExpression. This PR rebases
#78977 and cleans up the unit test. The DWARF extensions are documented
at https://yurydelendik.github.io/webassembly-dwarf/ and supported by
LLVM-based toolchains such as Clang, Swift, Emscripten, and Rust.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add support for DW_OP_WASM_location in DWARFExpression. This PR rebases
#78977 and cleans up the unit test. The DWARF extensions are documented
at https://yurydelendik.github.io/webassembly-dwarf/ and supported by
LLVM-based toolchains such as Clang, Swift, Emscripten, and Rust.</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Eliminate namespace lldb_private::dwarf (NFC) (#150073)</title>
<updated>2025-07-22T22:51:00+00:00</updated>
<author>
<name>Jonas Devlieghere</name>
<email>jonas@devlieghere.com</email>
</author>
<published>2025-07-22T22:51:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=2cb1ecb94bb4e7f89494e59d25707fd9787ff98a'/>
<id>2cb1ecb94bb4e7f89494e59d25707fd9787ff98a</id>
<content type='text'>
Eliminate the `lldb_private::dwarf` namespace, in favor of using
`llvm::dwarf` directly. The latter is shorter, and this avoids ambiguity
in the ABI plugins that define a `dwarf` namespace inside an anonymous
namespace.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Eliminate the `lldb_private::dwarf` namespace, in favor of using
`llvm::dwarf` directly. The latter is shorter, and this avoids ambiguity
in the ABI plugins that define a `dwarf` namespace inside an anonymous
namespace.</pre>
</div>
</content>
</entry>
<entry>
<title>[lldb] Extract DW_OP_deref evaluation code (NFC) (#146801)</title>
<updated>2025-07-03T20:46:47+00:00</updated>
<author>
<name>Jonas Devlieghere</name>
<email>jonas@devlieghere.com</email>
</author>
<published>2025-07-03T20:46:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=1995fd9ac6be4ff0822589f00d5fcaa12688eb87'/>
<id>1995fd9ac6be4ff0822589f00d5fcaa12688eb87</id>
<content type='text'>
The DWARF expression evaluator is essentially a large state machine
implemented as a switch statement. For anything but trivial operations,
having the evaluation logic implemented inline is difficult to follow,
especially when there are nested switches. This commit moves evaluation
of `DW_OP_deref` out-of-line, similar to `Evaluate_DW_OP_entry_value`.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The DWARF expression evaluator is essentially a large state machine
implemented as a switch statement. For anything but trivial operations,
having the evaluation logic implemented inline is difficult to follow,
especially when there are nested switches. This commit moves evaluation
of `DW_OP_deref` out-of-line, similar to `Evaluate_DW_OP_entry_value`.</pre>
</div>
</content>
</entry>
</feed>
