Download dependencies/libcudacxx/libunwind/test/unwind_leaffunction.pass.cpp from camenduru/thrust: direct link, hf CLI and curl.
- Browser
- Download file 1.31 kB
-
https://huggingface.co/camenduru/thrust/resolve/main/dependencies/libcudacxx/libunwind/test/unwind_leaffunction.pass.cpp
- Command line
-
hf download hf://camenduru/thrust/dependencies/libcudacxx/libunwind/test/unwind_leaffunction.pass.cpp
-
curl -L -o unwind_leaffunction.pass.cpp https://huggingface.co/camenduru/thrust/resolve/main/dependencies/libcudacxx/libunwind/test/unwind_leaffunction.pass.cpp
1.31 kB
| // -*- C++ -*- | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // Ensure that leaf function can be unwund. | |
| // REQUIRES: x86_64-linux | |
| _Unwind_Reason_Code frame_handler(struct _Unwind_Context* ctx, void* arg) { | |
| (void)arg; | |
| Dl_info info = { 0, 0, 0, 0 }; | |
| assert(dladdr((void*)_Unwind_GetIP(ctx), &info)); | |
| // Unwind util the main is reached, above frames deeped on the platfrom and architecture. | |
| if(info.dli_sname && !strcmp("main", info.dli_sname)) { | |
| _Exit(0); | |
| } | |
| return _URC_NO_REASON; | |
| } | |
| void signal_handler(int signum) { | |
| (void)signum; | |
| _Unwind_Backtrace(frame_handler, NULL); | |
| _Exit(-1); | |
| } | |
| int* faultyPointer = NULL; | |
| __attribute__((noinline)) void crashing_leaf_func(void) { | |
| *faultyPointer = 0; | |
| } | |
| int main() { | |
| signal(SIGSEGV, signal_handler); | |
| crashing_leaf_func(); | |
| return -2; | |
| } |