1317019Sdim//===--- XRayLists.h - XRay automatic attribution ---------------*- C++ -*-===// 2317019Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317019Sdim// 7317019Sdim//===----------------------------------------------------------------------===// 8317019Sdim// 9317019Sdim// User-provided filters for always/never XRay instrumenting certain functions. 10317019Sdim// 11317019Sdim//===----------------------------------------------------------------------===// 12317019Sdim#ifndef LLVM_CLANG_BASIC_XRAYLISTS_H 13317019Sdim#define LLVM_CLANG_BASIC_XRAYLISTS_H 14317019Sdim 15317019Sdim#include "clang/Basic/LLVM.h" 16317019Sdim#include "clang/Basic/SourceLocation.h" 17317019Sdim#include "clang/Basic/SourceManager.h" 18317019Sdim#include "llvm/ADT/ArrayRef.h" 19317019Sdim#include "llvm/ADT/StringRef.h" 20317019Sdim#include "llvm/Support/SpecialCaseList.h" 21317019Sdim#include <memory> 22317019Sdim 23317019Sdimnamespace clang { 24317019Sdim 25317019Sdimclass XRayFunctionFilter { 26317019Sdim std::unique_ptr<llvm::SpecialCaseList> AlwaysInstrument; 27317019Sdim std::unique_ptr<llvm::SpecialCaseList> NeverInstrument; 28341825Sdim std::unique_ptr<llvm::SpecialCaseList> AttrList; 29317019Sdim SourceManager &SM; 30317019Sdim 31317019Sdimpublic: 32317019Sdim XRayFunctionFilter(ArrayRef<std::string> AlwaysInstrumentPaths, 33317019Sdim ArrayRef<std::string> NeverInstrumentPaths, 34341825Sdim ArrayRef<std::string> AttrListPaths, SourceManager &SM); 35317019Sdim 36317019Sdim enum class ImbueAttribute { 37317019Sdim NONE, 38317019Sdim ALWAYS, 39317019Sdim NEVER, 40319164Sdim ALWAYS_ARG1, 41317019Sdim }; 42317019Sdim 43317019Sdim ImbueAttribute shouldImbueFunction(StringRef FunctionName) const; 44317019Sdim 45317019Sdim ImbueAttribute 46317019Sdim shouldImbueFunctionsInFile(StringRef Filename, 47317019Sdim StringRef Category = StringRef()) const; 48317019Sdim 49317019Sdim ImbueAttribute shouldImbueLocation(SourceLocation Loc, 50317019Sdim StringRef Category = StringRef()) const; 51317019Sdim}; 52317019Sdim 53317019Sdim} // namespace clang 54317019Sdim 55317019Sdim#endif 56