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