1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
//===-- llvm/unittest/Support/SignalsTest.cpp - Signals unit tests --------===//
//
// 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
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file contains unit tests for Signals.cpp and Signals.inc.
///
//===----------------------------------------------------------------------===//
#include "llvm/Support/Signals.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/Config/config.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
using namespace llvm;
using namespace llvm::sys;
using testing::MatchesRegex;
using testing::Not;
#define TAG_BEGIN "\\{\\{\\{"
#define TAG_END "\\}\\}\\}"
// %p in the Symbolizer Markup Format spec
#define P_REGEX "(0+|0x[0-9a-fA-F]+)"
// %i in the Symbolizer Markup Format spec
#define I_REGEX "(0x[0-9a-fA-F]+|0[0-7]+|[0-9]+)"
#if defined(HAVE_BACKTRACE) && ENABLE_BACKTRACES && \
(defined(__linux__) || defined(__FreeBSD__) || \
defined(__FreeBSD_kernel__) || defined(__NetBSD__))
TEST(SignalsTest, PrintsSymbolizerMarkup) {
auto Exit =
make_scope_exit([]() { unsetenv("LLVM_ENABLE_SYMBOLIZER_MARKUP"); });
setenv("LLVM_ENABLE_SYMBOLIZER_MARKUP", "1", 1);
std::string Res;
raw_string_ostream RawStream(Res);
PrintStackTrace(RawStream);
EXPECT_THAT(Res, MatchesRegex(TAG_BEGIN "reset" TAG_END ".*"));
// Module line for main binary
EXPECT_THAT(Res,
MatchesRegex(".*" TAG_BEGIN
"module:0:[^:]*SupportTests:elf:[0-9a-f]+" TAG_END
".*"));
// Text segment for main binary
EXPECT_THAT(Res, MatchesRegex(".*" TAG_BEGIN "mmap:" P_REGEX ":" I_REGEX
":load:0:rx:" P_REGEX TAG_END ".*"));
// Backtrace line
EXPECT_THAT(Res, MatchesRegex(".*" TAG_BEGIN "bt:0:" P_REGEX ".*"));
}
TEST(SignalsTest, SymbolizerMarkupDisabled) {
auto Exit = make_scope_exit([]() { unsetenv("LLVM_DISABLE_SYMBOLIZATION"); });
setenv("LLVM_DISABLE_SYMBOLIZATION", "1", 1);
std::string Res;
raw_string_ostream RawStream(Res);
PrintStackTrace(RawStream);
EXPECT_THAT(Res, Not(MatchesRegex(TAG_BEGIN "reset" TAG_END ".*")));
}
#endif // defined(HAVE_BACKTRACE) && ...
|