llvm-capstone/clang/lib/Basic/XRayInstr.cpp
Ian Levesque 97ba483026 [xray] Allow instrumenting only function entry and/or only function exit
Extend -fxray-instrumentation-bundle to split function-entry and
function-exit into two separate options, so that it is possible to
instrument only function entry or only function exit.  For use cases
that only care about one or the other this will save significant overhead
and code size.

Differential Revision: https://reviews.llvm.org/D72890
2020-01-17 13:32:34 -08:00

34 lines
1.2 KiB
C++

//===--- XRayInstr.cpp ------------------------------------------*- 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
//
//===----------------------------------------------------------------------===//
//
// This is part of XRay, a function call instrumentation system.
//
//===----------------------------------------------------------------------===//
#include "clang/Basic/XRayInstr.h"
#include "llvm/ADT/StringSwitch.h"
namespace clang {
XRayInstrMask parseXRayInstrValue(StringRef Value) {
XRayInstrMask ParsedKind =
llvm::StringSwitch<XRayInstrMask>(Value)
.Case("all", XRayInstrKind::All)
.Case("custom", XRayInstrKind::Custom)
.Case("function",
XRayInstrKind::FunctionEntry | XRayInstrKind::FunctionExit)
.Case("function-entry", XRayInstrKind::FunctionEntry)
.Case("function-exit", XRayInstrKind::FunctionExit)
.Case("typed", XRayInstrKind::Typed)
.Case("none", XRayInstrKind::None)
.Default(XRayInstrKind::None);
return ParsedKind;
}
} // namespace clang