47 lines · cpp
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10// Ensure that functions marked as signal frames are reported as such.11 12// TODO: Investigate this failure on Apple13// XFAIL: target={{.+}}-apple-{{.+}}14 15// TODO: Figure out why this fails with Memory Sanitizer.16// XFAIL: msan17 18// UNSUPPORTED: libunwind-arm-ehabi19 20// The AIX assembler does not support CFI directives, which21// are necessary to run this test.22// UNSUPPORTED: target={{.*}}-aix{{.*}}23 24// Windows doesn't generally use CFI directives. However, i68625// mingw targets do use DWARF (where CFI directives are supported).26// UNSUPPORTED: target={{x86_64|arm.*|aarch64}}-{{.*}}-windows-{{.*}}27 28#undef NDEBUG29#include <assert.h>30#include <stdlib.h>31#include <libunwind.h>32 33void test() {34 asm(".cfi_signal_frame");35 unw_cursor_t cursor;36 unw_context_t uc;37 unw_getcontext(&uc);38 unw_init_local(&cursor, &uc);39 assert(unw_step(&cursor) > 0);40 assert(unw_is_signal_frame(&cursor));41}42 43int main(int, char**) {44 test();45 return 0;46}47