LLVM  14.0.0git
InitLLVM.cpp
Go to the documentation of this file.
1 //===-- InitLLVM.cpp -----------------------------------------------------===//
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 
10 #include "llvm/Support/Error.h"
13 #include "llvm/Support/Process.h"
14 #include "llvm/Support/Signals.h"
15 #include <string>
16 
17 #ifdef _WIN32
19 #endif
20 
21 using namespace llvm;
22 using namespace llvm::sys;
23 
24 InitLLVM::InitLLVM(int &Argc, const char **&Argv,
25  bool InstallPipeSignalExitHandler) {
26  if (InstallPipeSignalExitHandler)
27  // The pipe signal handler must be installed before any other handlers are
28  // registered. This is because the Unix \ref RegisterHandlers function does
29  // not perform a sigaction() for SIGPIPE unless a one-shot handler is
30  // present, to allow long-lived processes (like lldb) to fully opt-out of
31  // llvm's SIGPIPE handling and ignore the signal safely.
33  // Initialize the stack printer after installing the one-shot pipe signal
34  // handler, so we can perform a sigaction() for SIGPIPE on Unix if requested.
35  StackPrinter.emplace(Argc, Argv);
38 
39 #ifdef _WIN32
40  // We use UTF-8 as the internal character encoding. On Windows,
41  // arguments passed to main() may not be encoded in UTF-8. In order
42  // to reliably detect encoding of command line arguments, we use an
43  // Windows API to obtain arguments, convert them to UTF-8, and then
44  // write them back to the Argv vector.
45  //
46  // There's probably other way to do the same thing (e.g. using
47  // wmain() instead of main()), but this way seems less intrusive
48  // than that.
49  std::string Banner = std::string(Argv[0]) + ": ";
50  ExitOnError ExitOnErr(Banner);
51 
53 
54  // GetCommandLineArguments doesn't terminate the vector with a
55  // nullptr. Do it to make it compatible with the real argv.
56  Args.push_back(nullptr);
57 
58  Argc = Args.size() - 1;
59  Argv = Args.data();
60 #endif
61 }
62 
Signals.h
llvm
---------------------— PointerInfo ------------------------------------—
Definition: AllocatorList.h:23
llvm::install_out_of_memory_new_handler
void install_out_of_memory_new_handler()
Definition: ErrorHandling.cpp:194
llvm::InitLLVM::~InitLLVM
~InitLLVM()
Definition: InitLLVM.cpp:63
ManagedStatic.h
Error.h
WindowsSupport.h
llvm::ExitOnError
Helper for check-and-exit error handling.
Definition: Error.h:1340
llvm::llvm_shutdown
void llvm_shutdown()
llvm_shutdown - Deallocate and destroy all ManagedStatic variables.
Definition: ManagedStatic.cpp:75
llvm::sys
Definition: Atomic.h:28
InitLLVM.h
Process.h
llvm::errorCodeToError
Error errorCodeToError(std::error_code EC)
Helper for converting an std::error_code to a Error.
Definition: Error.cpp:87
llvm::sys::DefaultOneShotPipeSignalHandler
void DefaultOneShotPipeSignalHandler()
On Unix systems, this function exits with an "IO error" exit code.
llvm::InitLLVM::InitLLVM
InitLLVM(int &Argc, const char **&Argv, bool InstallPipeSignalExitHandler=true)
Definition: InitLLVM.cpp:24
llvm::sys::windows::GetCommandLineArguments
std::error_code GetCommandLineArguments(SmallVectorImpl< const char * > &Args, BumpPtrAllocator &Alloc)
PrettyStackTrace.h
llvm::sys::SetOneShotPipeSignalFunction
void SetOneShotPipeSignalFunction(void(*Handler)())
Registers a function to be called in a "one-shot" manner when a pipe signal is delivered to the proce...
llvm::AMDGPU::HSAMD::Kernel::Key::Args
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
Definition: AMDGPUMetadata.h:389
llvm::sys::PrintStackTraceOnErrorSignal
void PrintStackTraceOnErrorSignal(StringRef Argv0, bool DisableCrashReporting=false)
When an error signal (such as SIGABRT or SIGSEGV) is delivered to the process, print a stack trace an...