/home/arjun/llvm-project/llvm/lib/Support/Process.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- Process.cpp - Implement OS Process Concept --------------*- 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 | | // This file implements the operating system Process concept. |
10 | | // |
11 | | //===----------------------------------------------------------------------===// |
12 | | |
13 | | #include "llvm/Support/Process.h" |
14 | | #include "llvm/ADT/STLExtras.h" |
15 | | #include "llvm/ADT/StringExtras.h" |
16 | | #include "llvm/Config/config.h" |
17 | | #include "llvm/Config/llvm-config.h" |
18 | | #include "llvm/Support/CrashRecoveryContext.h" |
19 | | #include "llvm/Support/FileSystem.h" |
20 | | #include "llvm/Support/Path.h" |
21 | | #include "llvm/Support/Program.h" |
22 | | |
23 | | using namespace llvm; |
24 | | using namespace sys; |
25 | | |
26 | | //===----------------------------------------------------------------------===// |
27 | | //=== WARNING: Implementation here must contain only TRULY operating system |
28 | | //=== independent code. |
29 | | //===----------------------------------------------------------------------===// |
30 | | |
31 | | Optional<std::string> Process::FindInEnvPath(StringRef EnvName, |
32 | 0 | StringRef FileName) { |
33 | 0 | return FindInEnvPath(EnvName, FileName, {}); |
34 | 0 | } |
35 | | |
36 | | Optional<std::string> Process::FindInEnvPath(StringRef EnvName, |
37 | | StringRef FileName, |
38 | 0 | ArrayRef<std::string> IgnoreList) { |
39 | 0 | assert(!path::is_absolute(FileName)); |
40 | 0 | Optional<std::string> FoundPath; |
41 | 0 | Optional<std::string> OptPath = Process::GetEnv(EnvName); |
42 | 0 | if (!OptPath.hasValue()) |
43 | 0 | return FoundPath; |
44 | 0 | |
45 | 0 | const char EnvPathSeparatorStr[] = {EnvPathSeparator, '\0'}; |
46 | 0 | SmallVector<StringRef, 8> Dirs; |
47 | 0 | SplitString(OptPath.getValue(), Dirs, EnvPathSeparatorStr); |
48 | 0 |
|
49 | 0 | for (StringRef Dir : Dirs) { |
50 | 0 | if (Dir.empty()) |
51 | 0 | continue; |
52 | 0 | |
53 | 0 | if (any_of(IgnoreList, [&](StringRef S) { return fs::equivalent(S, Dir); })) |
54 | 0 | continue; |
55 | 0 | |
56 | 0 | SmallString<128> FilePath(Dir); |
57 | 0 | path::append(FilePath, FileName); |
58 | 0 | if (fs::exists(Twine(FilePath))) { |
59 | 0 | FoundPath = std::string(FilePath.str()); |
60 | 0 | break; |
61 | 0 | } |
62 | 0 | } |
63 | 0 |
|
64 | 0 | return FoundPath; |
65 | 0 | } |
66 | | |
67 | | |
68 | | #define COLOR(FGBG, CODE, BOLD) "\033[0;" BOLD FGBG CODE "m" |
69 | | |
70 | | #define ALLCOLORS(FGBG,BOLD) {\ |
71 | | COLOR(FGBG, "0", BOLD),\ |
72 | | COLOR(FGBG, "1", BOLD),\ |
73 | | COLOR(FGBG, "2", BOLD),\ |
74 | | COLOR(FGBG, "3", BOLD),\ |
75 | | COLOR(FGBG, "4", BOLD),\ |
76 | | COLOR(FGBG, "5", BOLD),\ |
77 | | COLOR(FGBG, "6", BOLD),\ |
78 | | COLOR(FGBG, "7", BOLD)\ |
79 | | } |
80 | | |
81 | | static const char colorcodes[2][2][8][10] = { |
82 | | { ALLCOLORS("3",""), ALLCOLORS("3","1;") }, |
83 | | { ALLCOLORS("4",""), ALLCOLORS("4","1;") } |
84 | | }; |
85 | | |
86 | | // A CMake option controls wheter we emit core dumps by default. An application |
87 | | // may disable core dumps by calling Process::PreventCoreFiles(). |
88 | | static bool coreFilesPrevented = !LLVM_ENABLE_CRASH_DUMPS; |
89 | | |
90 | 0 | bool Process::AreCoreFilesPrevented() { return coreFilesPrevented; } |
91 | | |
92 | | LLVM_ATTRIBUTE_NORETURN |
93 | 0 | void Process::Exit(int RetCode) { |
94 | 0 | if (CrashRecoveryContext *CRC = CrashRecoveryContext::GetCurrent()) |
95 | 0 | CRC->HandleExit(RetCode); |
96 | 0 | ::exit(RetCode); |
97 | 0 | } |
98 | | |
99 | | // Include the platform-specific parts of this class. |
100 | | #ifdef LLVM_ON_UNIX |
101 | | #include "Unix/Process.inc" |
102 | | #endif |
103 | | #ifdef _WIN32 |
104 | | #include "Windows/Process.inc" |
105 | | #endif |