Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Display stack trace at stack overflow #32167

Merged

Commits on Feb 12, 2020

  1. Display stack trace at stack overflow

    This is a fixed version of the reverted commit.
    
    This change enables printing stack trace at stack overflow to the
    console. In case multiple threads fail with stack overflow in parallel,
    only the trace of the first thread is printed.
    
    There are couple of interesting details:
    
    The stack trace is printed in a compressed form. The algorithm finds the
    largest sequence of frames starting from the top of the stack that is
    repeated and prints it just once with the repeat count.
    Only the first thread that hits stack overflow gets its stack printed.
    On Linux, others threads that hit stack overflow are held spinning until
    the process exits. This enables having a single preallocated stack for
    handling stack overflow. On Windows, we just don't print the stack
    trace, as it would be messy anyways due to the interleaving of output
    from multiple threads and the value of getting stack overflow traces of
    multiple threads is questionable.
    On debug / checked builds for Windows, I had to bump the stack guarantee
    by two pages and also enable setting the stack guarantee for all threads
    in these build flavors.
    At couple of places in the runtime, there were debug checks comparing
    explicit frame and some other struct addresses to the current SP. These
    were firing on Linux when we are running on an extra stack overflow
    handling stack. I've fixed it by adding a flag to the Thread that
    indicates that we are running on an alternate stack and these checks
    should be skipped.
    I've fixed the x86 Windows JIT_StackProbe to first probe at SP-4 and
    then move the SP to leave more stack space for the handler.
    I've fixed stack overflow check on Linux for some glibc / distros. The
    stack limit returned by the pthread_attr_getstack returns the address of
    the guard page in some of the glibc / distros and address of the last
    accessible page before the guard page on others. So I've relaxed the
    check to consider +/- 1 page around the stack limit to recognize sigsegv
    as stack overflow.
    janvorli committed Feb 12, 2020
    Configuration menu
    Copy the full SHA
    02f3ecd View commit details
    Browse the repository at this point in the history