kbaladurin added inline comments.
Herald added a reviewer: espindola.

================
Comment at: 
packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py:29
+
+        self.runCmd("run")
+
----------------
labath wrote:
> Do you think there's any added value in making sure that the breakpoint is 
> *hit* (instead of just making sure that it's resolved to the right file 
> address). If it's the latter we could make this a non-execution test and have 
> it run everywhere (e.g., via lldb-test breakpoint) instead of just on arm 
> hardware.
I think we need to make sure that breakpoint is *hit* and program can 
successfully continue execution after it, because it is resolved to right 
address in both cases:

lldb without this patch:
```
$ llvm-arm/bin/lldb thumb-bp 
(lldb) target create "thumb-bp"
Current executable set to 'thumb-bp' (arm).
(lldb) b bp.c:3
Breakpoint 1: where = thumb-bp`f + 6 at bp.c:3, address = 0x000103f6
(lldb) r
Process 22192 launched: '/home/kbaladurin/thumb-bp' (arm)
Process 22192 stopped
* thread #1: tid = 22192, 0x000103d0 thumb-bp`__libc_csu_init + 32, name = 
'thumb-bp', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
    frame #0: 0x000103d0 thumb-bp`__libc_csu_init + 32
thumb-bp`__libc_csu_init:
->  0x103d0 <+32>: ldr    r3, [r5], #4
    0x103d4 <+36>: mov    r2, r9
    0x103d6 <+38>: mov    r1, r8
    0x103d8 <+40>: mov    r0, r7
(lldb) disas -n f
thumb-bp`f:
    0x103f0 <+0>:  strmi  r11, [r1], -r2, lsl #1
    0x103f4 <+4>:  stmdals r1, {r0, r12, pc}
    0x103f8 <+8>:  .long  0x91003001                ; unknown opcode
    0x103fc <+12>: ldrbmi r11, [r0, -r2]!

```

lldb with this patch:
```
$ llvm-arm-patch/bin/lldb thumb-bp 
(lldb) target create "thumb-bp"
Current executable set to 'thumb-bp' (arm).
(lldb) b bp.c:3
Breakpoint 1: where = thumb-bp`f + 6 at bp.c:3, address = 0x000103f6
(lldb) r
Process 22282 launched: '/home/kbaladurin/thumb-bp' (arm)
Process 22282 stopped
* thread #1: tid = 22282, 0x000103f6 thumb-bp`f(a=10) + 6 at bp.c:3, name = 
'thumb-bp', stop reason = breakpoint 1.1
    frame #0: 0x000103f6 thumb-bp`f(a=10) + 6 at bp.c:3
   1    __attribute__((section("__codesection")))
   2    int f(int a) {
-> 3      return a + 1; // Set break point at this line.
   4    }
   5    
   6    int main() {
   7      return f(10);
(lldb) disas
thumb-bp`f:
    0x103f0 <+0>:  sub    sp, #0x8
    0x103f2 <+2>:  mov    r1, r0
    0x103f4 <+4>:  str    r0, [sp, #0x4]
->  0x103f6 <+6>:  ldr    r0, [sp, #0x4]
    0x103f8 <+8>:  adds   r0, #0x1
    0x103fa <+10>: str    r1, [sp]
    0x103fc <+12>: add    sp, #0x8
    0x103fe <+14>: bx     lr

```

In both cases resolved address is 0x103f6 that is right according to the debug 
information:
```
 Line Number Statements:
  [0x00000025]  Extended opcode 2: set Address to 0x103f0
  [0x0000002c]  Special opcode 6: advance Address by 0 to 0x103f0 and Line by 1 
to 2
  [0x0000002d]  Set column to 10
  [0x0000002f]  Set prologue_end to true
  [0x00000030]  Special opcode 90: advance Address by 6 to 0x103f6 and Line by 
1 to 3
```

But lldb uses arm breakpoint in the first case and thumb one in the second. 


https://reviews.llvm.org/D44998



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to