[Lldb-commits] [PATCH] D63667: Support __kernel_rt_sigreturn in frame initialization

Joseph Tremoulet via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Jul 15 14:03:11 PDT 2019


JosephTremoulet added a comment.
Herald added subscribers: wuzish, MaskRay.

> That LLDB frame #5 is a bit bogus

Thanks for taking a look at this.  I'm trying to reproduce what you're seeing and failing.  This is what I see, in a fedora:latest docker container on an Ubuntu host on an x86_64 machine, with my patch applied to lldb:

  $ gcc -g -O0 -o sigtest main.c
  $ lldb ./sigtest
  (lldb) target create "./sigtest"
  Current executable set to './sigtest' (x86_64).
  (lldb) breakpoint set -f main.c -l 6
  Breakpoint 1: where = sigtest`handler + 11 at main.c:7:5, address = 0x0000000000401171
  (lldb) run
  Process 149148 launched: '/home/josepht/scratch/sigtest' (x86_64)
  Process 149148 stopped
  * thread #1, name = 'sigtest', stop reason = signal SIGABRT
      frame #0: 0x00007ffff7e38e75 libc.so.6`__GI_raise + 325
  libc.so.6`__GI_raise:
  ->  0x7ffff7e38e75 <+325>: movq   0x108(%rsp), %rax
      0x7ffff7e38e7d <+333>: xorq   %fs:0x28, %rax
      0x7ffff7e38e86 <+342>: jne    0x7ffff7e38eac            ; <+380>
      0x7ffff7e38e88 <+344>: movl   %r8d, %eax
  (lldb) continue
  Process 149148 resuming
  Process 149148 stopped
  * thread #1, name = 'sigtest', stop reason = breakpoint 1.1
      frame #0: 0x0000000000401171 sigtest`handler(sig=6) at main.c:7:5
     4   
     5    void handler(int sig)
     6    {
  -> 7        printf("Set a breakpoint here.\n");
     8        exit(0);
     9    }
     10  
  (lldb) bt
  * thread #1, name = 'sigtest', stop reason = breakpoint 1.1
    * frame #0: 0x0000000000401171 sigtest`handler(sig=6) at main.c:7:5
      frame #1: 0x00007ffff7e38f00 libc.so.6`.annobin_sigaction.c + 16
      frame #2: 0x00007ffff7e38e75 libc.so.6`__GI_raise + 325
      frame #3: 0x00007ffff7e23895 libc.so.6`__GI_abort + 295
      frame #4: 0x000000000040118e sigtest`abort_caller at main.c:12:5
      frame #5: 0x00000000004011c2 sigtest`main at main.c:23:5
      frame #6: 0x00007ffff7e24f33 libc.so.6`__libc_start_main + 243
      frame #7: 0x00000000004010ae sigtest`_start + 46
  (lldb) frame select 2
  frame #2: 0x00007ffff7e38e75 libc.so.6`__GI_raise + 325
  libc.so.6`__GI_raise:
  ->  0x7ffff7e38e75 <+325>: movq   0x108(%rsp), %rax
      0x7ffff7e38e7d <+333>: xorq   %fs:0x28, %rax
      0x7ffff7e38e86 <+342>: jne    0x7ffff7e38eac            ; <+380>
      0x7ffff7e38e88 <+344>: movl   %r8d, %eax
  (lldb) frame select 3
  frame #3: 0x00007ffff7e23895 libc.so.6`__GI_abort + 295
  libc.so.6`__GI_abort:
  ->  0x7ffff7e23895 <+295>: movq   %fs:0x10, %rdx
      0x7ffff7e2389e <+304>: cmpq   %rdx, 0x19f493(%rip)      ; lock + 8
      0x7ffff7e238a5 <+311>: je     0x7ffff7e238ed            ; <+383>
      0x7ffff7e238a7 <+313>: movl   $0x1, %esi

My frame 2 seems to correspond to your frame 4, and then my frame 3 seems to correspond to your frame 6, without the bogus frame in between.  Do I have the wrong repro steps or something?

Thanks,
-Joseph


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63667/new/

https://reviews.llvm.org/D63667





More information about the lldb-commits mailing list