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