felipepiovezan wrote:

Are you saying that this line:

```
     ValueObjectSP value_sp = frame->FindVariable(g_this);
```

Doesn't work if we are stopped at the prologue? Function arguments (also 
`this`) should be available at any address, including the first instruction. 
(assuming O0)

```
   1 │ struct Blah {
   2 │   int x;
   3 │   double d;
   4 │
   5 │   double do_something(int x) {
   6 │     return x + this->x;
   7 │   }
   8 │ };
   9 │
  10 │
  11 │ void foo() {
  12 │   Blah x{1, 2.0};
  13 │   x.do_something(10);
  14 │ }
```

We get:

```
clang++ test.cpp -g -O0 -c -o - | dwarfdump - --name do_something -c

0x00000077: DW_TAG_subprogram
              DW_AT_low_pc      (0x0000000000000034)
              DW_AT_high_pc     (0x000000000000005c)
              DW_AT_APPLE_omit_frame_ptr        (true)
              DW_AT_frame_base  (DW_OP_reg31 WSP)
              DW_AT_object_pointer      (0x00000087)
              DW_AT_specification       (0x00000055 "_ZN4Blah12do_somethingEi")

0x00000087:   DW_TAG_formal_parameter
                DW_AT_location  (DW_OP_fbreg +8)
                DW_AT_name      ("this")
                DW_AT_type      (0x0000009c "Blah *")
                DW_AT_artificial        (true)
```


https://github.com/llvm/llvm-project/pull/209629
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to