1//===--- XRayLists.h - XRay automatic attribution ---------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// User-provided filters for always/never XRay instrumenting certain functions.
10//
11//===----------------------------------------------------------------------===//
12#ifndef LLVM_CLANG_BASIC_XRAYLISTS_H
13#define LLVM_CLANG_BASIC_XRAYLISTS_H
14
15#include "clang/Basic/LLVM.h"
16#include "clang/Basic/SourceLocation.h"
17#include "llvm/ADT/ArrayRef.h"
18#include "llvm/ADT/StringRef.h"
19#include <memory>
20
21namespace llvm {
22class SpecialCaseList;
23}
24
25namespace clang {
26
27class SourceManager;
28
29class XRayFunctionFilter {
30 std::unique_ptr<llvm::SpecialCaseList> AlwaysInstrument;
31 std::unique_ptr<llvm::SpecialCaseList> NeverInstrument;
32 std::unique_ptr<llvm::SpecialCaseList> AttrList;
33 SourceManager &SM;
34
35public:
36 XRayFunctionFilter(ArrayRef<std::string> AlwaysInstrumentPaths,
37 ArrayRef<std::string> NeverInstrumentPaths,
38 ArrayRef<std::string> AttrListPaths, SourceManager &SM);
39 ~XRayFunctionFilter();
40
41 enum class ImbueAttribute {
42 NONE,
43 ALWAYS,
44 NEVER,
45 ALWAYS_ARG1,
46 };
47
48 ImbueAttribute shouldImbueFunction(StringRef FunctionName) const;
49
50 ImbueAttribute
51 shouldImbueFunctionsInFile(StringRef Filename,
52 StringRef Category = StringRef()) const;
53
54 ImbueAttribute shouldImbueLocation(SourceLocation Loc,
55 StringRef Category = StringRef()) const;
56};
57
58} // namespace clang
59
60#endif
61