xref: /freebsd/contrib/llvm-project/lldb/source/API/SBHostOS.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1 //===-- SBHostOS.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 
9 #include "lldb/API/SBHostOS.h"
10 #include "lldb/API/SBError.h"
11 #include "lldb/Host/Config.h"
12 #include "lldb/Host/FileSystem.h"
13 #include "lldb/Host/Host.h"
14 #include "lldb/Host/HostInfo.h"
15 #include "lldb/Host/HostNativeThread.h"
16 #include "lldb/Host/HostThread.h"
17 #include "lldb/Host/ThreadLauncher.h"
18 #include "lldb/Utility/FileSpec.h"
19 #include "lldb/Utility/Instrumentation.h"
20 
21 #include "Plugins/ExpressionParser/Clang/ClangHost.h"
22 #if LLDB_ENABLE_PYTHON
23 #include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h"
24 #endif
25 
26 #include "llvm/ADT/SmallString.h"
27 #include "llvm/Support/Path.h"
28 
29 using namespace lldb;
30 using namespace lldb_private;
31 
32 SBFileSpec SBHostOS::GetProgramFileSpec() {
33   LLDB_INSTRUMENT();
34 
35   SBFileSpec sb_filespec;
36   sb_filespec.SetFileSpec(HostInfo::GetProgramFileSpec());
37   return sb_filespec;
38 }
39 
40 SBFileSpec SBHostOS::GetLLDBPythonPath() {
41   LLDB_INSTRUMENT();
42 
43   return GetLLDBPath(ePathTypePythonDir);
44 }
45 
46 SBFileSpec SBHostOS::GetLLDBPath(lldb::PathType path_type) {
47   LLDB_INSTRUMENT_VA(path_type);
48 
49   FileSpec fspec;
50   switch (path_type) {
51   case ePathTypeLLDBShlibDir:
52     fspec = HostInfo::GetShlibDir();
53     break;
54   case ePathTypeSupportExecutableDir:
55     fspec = HostInfo::GetSupportExeDir();
56     break;
57   case ePathTypeHeaderDir:
58     fspec = HostInfo::GetHeaderDir();
59     break;
60   case ePathTypePythonDir:
61 #if LLDB_ENABLE_PYTHON
62     fspec = ScriptInterpreterPython::GetPythonDir();
63 #endif
64     break;
65   case ePathTypeLLDBSystemPlugins:
66     fspec = HostInfo::GetSystemPluginDir();
67     break;
68   case ePathTypeLLDBUserPlugins:
69     fspec = HostInfo::GetUserPluginDir();
70     break;
71   case ePathTypeLLDBTempSystemDir:
72     fspec = HostInfo::GetProcessTempDir();
73     break;
74   case ePathTypeGlobalLLDBTempSystemDir:
75     fspec = HostInfo::GetGlobalTempDir();
76     break;
77   case ePathTypeClangDir:
78     fspec = GetClangResourceDir();
79     break;
80   }
81 
82   SBFileSpec sb_fspec;
83   sb_fspec.SetFileSpec(fspec);
84   return sb_fspec;
85 }
86 
87 SBFileSpec SBHostOS::GetUserHomeDirectory() {
88   LLDB_INSTRUMENT();
89 
90   FileSpec homedir;
91   FileSystem::Instance().GetHomeDirectory(homedir);
92   FileSystem::Instance().Resolve(homedir);
93 
94   SBFileSpec sb_fspec;
95   sb_fspec.SetFileSpec(homedir);
96 
97   return sb_fspec;
98 }
99 
100 lldb::thread_t SBHostOS::ThreadCreate(const char *name,
101                                       lldb::thread_func_t thread_function,
102                                       void *thread_arg, SBError *error_ptr) {
103   LLDB_INSTRUMENT_VA(name, thread_function, thread_arg, error_ptr);
104   return LLDB_INVALID_HOST_THREAD;
105 }
106 
107 void SBHostOS::ThreadCreated(const char *name) { LLDB_INSTRUMENT_VA(name); }
108 
109 bool SBHostOS::ThreadCancel(lldb::thread_t thread, SBError *error_ptr) {
110   LLDB_INSTRUMENT_VA(thread, error_ptr);
111   return false;
112 }
113 
114 bool SBHostOS::ThreadDetach(lldb::thread_t thread, SBError *error_ptr) {
115   LLDB_INSTRUMENT_VA(thread, error_ptr);
116   return false;
117 }
118 
119 bool SBHostOS::ThreadJoin(lldb::thread_t thread, lldb::thread_result_t *result,
120                           SBError *error_ptr) {
121   LLDB_INSTRUMENT_VA(thread, result, error_ptr);
122   return false;
123 }
124