annotate clang/lib/Basic/XRayLists.cpp @ 176:de4ac79aef9d

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 17:13:11 +0900
parents 0572611fdcc8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===-- XRayLists.cpp - XRay automatic-attribution ------------------------===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8 //
anatofuz
parents:
diff changeset
9 // User-provided filters for always/never XRay instrumenting certain functions.
anatofuz
parents:
diff changeset
10 //
anatofuz
parents:
diff changeset
11 //===----------------------------------------------------------------------===//
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
12
150
anatofuz
parents:
diff changeset
13 #include "clang/Basic/XRayLists.h"
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
14 #include "clang/Basic/FileManager.h"
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
15 #include "clang/Basic/SourceManager.h"
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
16 #include "llvm/Support/SpecialCaseList.h"
150
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 using namespace clang;
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 XRayFunctionFilter::XRayFunctionFilter(
anatofuz
parents:
diff changeset
21 ArrayRef<std::string> AlwaysInstrumentPaths,
anatofuz
parents:
diff changeset
22 ArrayRef<std::string> NeverInstrumentPaths,
anatofuz
parents:
diff changeset
23 ArrayRef<std::string> AttrListPaths, SourceManager &SM)
anatofuz
parents:
diff changeset
24 : AlwaysInstrument(llvm::SpecialCaseList::createOrDie(
anatofuz
parents:
diff changeset
25 AlwaysInstrumentPaths, SM.getFileManager().getVirtualFileSystem())),
anatofuz
parents:
diff changeset
26 NeverInstrument(llvm::SpecialCaseList::createOrDie(
anatofuz
parents:
diff changeset
27 NeverInstrumentPaths, SM.getFileManager().getVirtualFileSystem())),
anatofuz
parents:
diff changeset
28 AttrList(llvm::SpecialCaseList::createOrDie(
anatofuz
parents:
diff changeset
29 AttrListPaths, SM.getFileManager().getVirtualFileSystem())),
anatofuz
parents:
diff changeset
30 SM(SM) {}
anatofuz
parents:
diff changeset
31
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
32 XRayFunctionFilter::~XRayFunctionFilter() = default;
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
33
150
anatofuz
parents:
diff changeset
34 XRayFunctionFilter::ImbueAttribute
anatofuz
parents:
diff changeset
35 XRayFunctionFilter::shouldImbueFunction(StringRef FunctionName) const {
anatofuz
parents:
diff changeset
36 // First apply the always instrument list, than if it isn't an "always" see
anatofuz
parents:
diff changeset
37 // whether it's treated as a "never" instrument function.
anatofuz
parents:
diff changeset
38 // TODO: Remove these as they're deprecated; use the AttrList exclusively.
anatofuz
parents:
diff changeset
39 if (AlwaysInstrument->inSection("xray_always_instrument", "fun", FunctionName,
anatofuz
parents:
diff changeset
40 "arg1") ||
anatofuz
parents:
diff changeset
41 AttrList->inSection("always", "fun", FunctionName, "arg1"))
anatofuz
parents:
diff changeset
42 return ImbueAttribute::ALWAYS_ARG1;
anatofuz
parents:
diff changeset
43 if (AlwaysInstrument->inSection("xray_always_instrument", "fun",
anatofuz
parents:
diff changeset
44 FunctionName) ||
anatofuz
parents:
diff changeset
45 AttrList->inSection("always", "fun", FunctionName))
anatofuz
parents:
diff changeset
46 return ImbueAttribute::ALWAYS;
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 if (NeverInstrument->inSection("xray_never_instrument", "fun",
anatofuz
parents:
diff changeset
49 FunctionName) ||
anatofuz
parents:
diff changeset
50 AttrList->inSection("never", "fun", FunctionName))
anatofuz
parents:
diff changeset
51 return ImbueAttribute::NEVER;
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 return ImbueAttribute::NONE;
anatofuz
parents:
diff changeset
54 }
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 XRayFunctionFilter::ImbueAttribute
anatofuz
parents:
diff changeset
57 XRayFunctionFilter::shouldImbueFunctionsInFile(StringRef Filename,
anatofuz
parents:
diff changeset
58 StringRef Category) const {
anatofuz
parents:
diff changeset
59 if (AlwaysInstrument->inSection("xray_always_instrument", "src", Filename,
anatofuz
parents:
diff changeset
60 Category) ||
anatofuz
parents:
diff changeset
61 AttrList->inSection("always", "src", Filename, Category))
anatofuz
parents:
diff changeset
62 return ImbueAttribute::ALWAYS;
anatofuz
parents:
diff changeset
63 if (NeverInstrument->inSection("xray_never_instrument", "src", Filename,
anatofuz
parents:
diff changeset
64 Category) ||
anatofuz
parents:
diff changeset
65 AttrList->inSection("never", "src", Filename, Category))
anatofuz
parents:
diff changeset
66 return ImbueAttribute::NEVER;
anatofuz
parents:
diff changeset
67 return ImbueAttribute::NONE;
anatofuz
parents:
diff changeset
68 }
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 XRayFunctionFilter::ImbueAttribute
anatofuz
parents:
diff changeset
71 XRayFunctionFilter::shouldImbueLocation(SourceLocation Loc,
anatofuz
parents:
diff changeset
72 StringRef Category) const {
anatofuz
parents:
diff changeset
73 if (!Loc.isValid())
anatofuz
parents:
diff changeset
74 return ImbueAttribute::NONE;
anatofuz
parents:
diff changeset
75 return this->shouldImbueFunctionsInFile(SM.getFilename(SM.getFileLoc(Loc)),
anatofuz
parents:
diff changeset
76 Category);
anatofuz
parents:
diff changeset
77 }