[PATCH] D44998: ObjectFileELF: Add support for arbitrarily named code sections

Konstantin Baladurin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 3 01:28:38 PDT 2018


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





More information about the llvm-commits mailing list