[lldb-dev] [Bug 25159] New: LLDB gets confused if evaluate expression executes function that generates signal

via lldb-dev lldb-dev at lists.llvm.org
Tue Oct 13 09:57:36 PDT 2015


            Bug ID: 25159
           Summary: LLDB gets confused if evaluate expression executes
                    function that generates signal
           Product: lldb
           Version: 3.7
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: lldb-dev at lists.llvm.org
          Reporter: eugenebi at hotmail.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Here is a simple program that spins in an infinite loop. It contains a function
which generates SIGSEGV if it ever gets called.

I launch this program under LLDB, then hit ctrl-C to break in. On the prompt I
evaluate expression which should return function value. The expression
execution generates exception, as expected. When I hit 'continue' after that,
the program starts executing, but lldb prompt is still there and accepts
commands like 'version' or 'quit'.

In my real program LLDB would execute expression on a thread which is inside
sleep() syscall and after I continue the signal is delivered to that thread.
Unfortunately I failed to create repro for that behavior.

include <stdio.h>
#include <unistd.h>

// This function intentionally causes
// access violation (SIGSEGV). Calling
// it from LLDB command prompt confuses
// LLDB state.
int cause_sig()
    int* addr = (int*)666;
    return *addr;

// main function
int main()
    // infinite loop
    for (int i = 0; true; ++i)
        printf("iteration %d\n", i);

    return 0;

(lldb) version
lldb version 3.7.0 (... omitted ...)
(lldb) target cr a.out
Current executable set to 'a.out' (x86_64).
(lldb) r
Process 6726 launched: '/home/eugene/tmp/a.out' (x86_64)
iteration 0
iteration 1
Process 6726 stopped
* thread #1: tid = 6726, 0x00007ffff7ad5f20 libc.so.6`__GI_nanosleep + 16, name
= 'a.out', stop reason = signal SIGSTOP
    frame #0: 0x00007ffff7ad5f20 libc.so.6`__GI_nanosleep + 16
->  0x7ffff7ad5f20 <+16>: cmpq   $-0xfff, %rax
    0x7ffff7ad5f26 <+22>: jae    0x7ffff7ad5f59            ; <+73>
    0x7ffff7ad5f28 <+24>: retq

    0x7ffff7ad5f29 <+25>: subq   $0x8, %rsp
(lldb) p cause_sig()
error: Execution was interrupted, reason: signal SIGSEGV: invalid address
(fault address: 0x29a).
The process has been returned to the state before expression evaluation.
(lldb) c
Process 6726 resuming
iteration 2
iteration 3
iteration 4
iteration 5
iteration 6
(lldb)     ion
lldb version 3.7.0 (... omitted ...)
iteration 7
iteration 8
(lldb) c
error: Process is running.  Use 'process interrupt' to pause execution.
iteration 9
(lldb) q
iteration 10
Quitting LLDB will kill one or more processes. Do you really want to proceed:
[Y/n] y

You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20151013/7323e16d/attachment.html>

More information about the lldb-dev mailing list