DavidSpickett wrote:

dwarfdump: 
[arm_dwarfdump.txt](https://github.com/user-attachments/files/17598949/arm_dwarfdump.txt)
 (this doesn't seem different to what AArch64 produces)
objdump: 
[arm_objdump.txt](https://github.com/user-attachments/files/17598953/arm_objdump.txt)
stepping log: 
[arm_step_log.txt](https://github.com/user-attachments/files/17598983/arm_step_log.txt)

In the log file I break on main then step (`n`) once. It might be relevant that 
we don't use hardware single step on Arm 32 bit (it exists we just don't use 
it). So perhaps the combination of software single step and this inlined 
function is a problem.

I noticed that although you can step into (`s`) and out of (`fin`) the inlined 
function, if I did instruction steps (`ni`), lldb would not recognise that it 
was inside the inlined function:
```
(lldb) ni
Process 1792462 stopped
* thread #1, name = 'a.out', stop reason = instruction step over
    frame #0: 0x00400558 a.out`main(argc=1, argv=0xfffef3d4) at calling.cpp:11:5
   8    
   9    int main (int argc, char **argv) {
   10       inline_value = 0;    // Stop here and step over to set up stepping 
over.
-> 11       inline_trivial_1 (); // At inline_trivial_1 called from main.
   12       return 0;
   13   }
(lldb) dis
a.out`main:
    0x40052c <+0>:  push   {r11, lr}
    0x400530 <+4>:  mov    r11, sp
    0x400534 <+8>:  sub    sp, sp, #12
    0x400538 <+12>: movw   r2, #0x0
    0x40053c <+16>: str    r2, [r11, #-0x4]
    0x400540 <+20>: str    r0, [sp, #0x4]
    0x400544 <+24>: str    r1, [sp]
    0x400548 <+28>: movw   r0, #0x0
    0x40054c <+32>: ldr    r1, [pc, #0x14] ; <+60> at calling.cpp
    0x400550 <+36>: add    r1, pc, r1
    0x400554 <+40>: str    r0, [r1]
->  0x400558 <+44>: nop    
    0x40055c <+48>: movw   r0, #0x0
    0x400560 <+52>: mov    sp, r11
    0x400564 <+56>: pop    {r11, pc}
    0x400568 <+60>: andeq  r0, r1, r4, ror #21
(lldb) bt
* thread #1, name = 'a.out', stop reason = instruction step over
  * frame #0: 0x00400558 a.out`main(argc=1, argv=0xfffef3d4) at calling.cpp:11:5
    frame #1: 0xf7c8d7d6 libc.so.6`__libc_start_call_main(main=(a.out`main at 
calling.cpp:9), argc=1, argv=0xfffef3d4) at libc_start_call_main.h:58:16
    frame #2: 0xf7c8d886 libc.so.6`__libc_start_main_impl(main=(a.out`main at 
calling.cpp:9), argc=0, argv=0xf7d8e000, init=<unavailable>, fini=0x00000000, 
rtld_fini=(ld-linux-armhf.so.3`_dl_fini + 1 at dl-fini.c:51:20), 
stack_end=0xfffef3d4) at libc-start.c:392:3
    frame #3: 0x00400458 a.out`_start + 40
```

If I add a second nop, it will realise it's in the inlined function when it 
gets to the second nop.



https://github.com/llvm/llvm-project/pull/114295
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to