1 //===-- PluginManager.h -----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 11 #ifndef liblldb_PluginManager_h_ 12 #define liblldb_PluginManager_h_ 13 14 #include "lldb/lldb-private.h" 15 #include "lldb/Host/FileSpec.h" 16 17 namespace lldb_private { 18 19 class PluginManager 20 { 21 public: 22 static void 23 Initialize (); 24 25 static void 26 Terminate (); 27 28 //------------------------------------------------------------------ 29 // ABI 30 //------------------------------------------------------------------ 31 static bool 32 RegisterPlugin (const ConstString &name, 33 const char *description, 34 ABICreateInstance create_callback); 35 36 static bool 37 UnregisterPlugin (ABICreateInstance create_callback); 38 39 static ABICreateInstance 40 GetABICreateCallbackAtIndex (uint32_t idx); 41 42 static ABICreateInstance 43 GetABICreateCallbackForPluginName (const ConstString &name); 44 45 46 //------------------------------------------------------------------ 47 // Disassembler 48 //------------------------------------------------------------------ 49 static bool 50 RegisterPlugin (const ConstString &name, 51 const char *description, 52 DisassemblerCreateInstance create_callback); 53 54 static bool 55 UnregisterPlugin (DisassemblerCreateInstance create_callback); 56 57 static DisassemblerCreateInstance 58 GetDisassemblerCreateCallbackAtIndex (uint32_t idx); 59 60 static DisassemblerCreateInstance 61 GetDisassemblerCreateCallbackForPluginName (const ConstString &name); 62 63 64 //------------------------------------------------------------------ 65 // DynamicLoader 66 //------------------------------------------------------------------ 67 static bool 68 RegisterPlugin (const ConstString &name, 69 const char *description, 70 DynamicLoaderCreateInstance create_callback, 71 DebuggerInitializeCallback debugger_init_callback = NULL); 72 73 static bool 74 UnregisterPlugin (DynamicLoaderCreateInstance create_callback); 75 76 static DynamicLoaderCreateInstance 77 GetDynamicLoaderCreateCallbackAtIndex (uint32_t idx); 78 79 static DynamicLoaderCreateInstance 80 GetDynamicLoaderCreateCallbackForPluginName (const ConstString &name); 81 82 //------------------------------------------------------------------ 83 // EmulateInstruction 84 //------------------------------------------------------------------ 85 static bool 86 RegisterPlugin (const ConstString &name, 87 const char *description, 88 EmulateInstructionCreateInstance create_callback); 89 90 static bool 91 UnregisterPlugin (EmulateInstructionCreateInstance create_callback); 92 93 static EmulateInstructionCreateInstance 94 GetEmulateInstructionCreateCallbackAtIndex (uint32_t idx); 95 96 static EmulateInstructionCreateInstance 97 GetEmulateInstructionCreateCallbackForPluginName (const ConstString &name); 98 99 //------------------------------------------------------------------ 100 // OperatingSystem 101 //------------------------------------------------------------------ 102 static bool 103 RegisterPlugin (const ConstString &name, 104 const char *description, 105 OperatingSystemCreateInstance create_callback); 106 107 static bool 108 UnregisterPlugin (OperatingSystemCreateInstance create_callback); 109 110 static OperatingSystemCreateInstance 111 GetOperatingSystemCreateCallbackAtIndex (uint32_t idx); 112 113 static OperatingSystemCreateInstance 114 GetOperatingSystemCreateCallbackForPluginName (const ConstString &name); 115 116 //------------------------------------------------------------------ 117 // LanguageRuntime 118 //------------------------------------------------------------------ 119 static bool 120 RegisterPlugin (const ConstString &name, 121 const char *description, 122 LanguageRuntimeCreateInstance create_callback); 123 124 static bool 125 UnregisterPlugin (LanguageRuntimeCreateInstance create_callback); 126 127 static LanguageRuntimeCreateInstance 128 GetLanguageRuntimeCreateCallbackAtIndex (uint32_t idx); 129 130 static LanguageRuntimeCreateInstance 131 GetLanguageRuntimeCreateCallbackForPluginName (const ConstString &name); 132 133 134 //------------------------------------------------------------------ 135 // ObjectFile 136 //------------------------------------------------------------------ 137 static bool 138 RegisterPlugin (const ConstString &name, 139 const char *description, 140 ObjectFileCreateInstance create_callback, 141 ObjectFileCreateMemoryInstance create_memory_callback, 142 ObjectFileGetModuleSpecifications get_module_specifications); 143 144 static bool 145 UnregisterPlugin (ObjectFileCreateInstance create_callback); 146 147 static ObjectFileCreateInstance 148 GetObjectFileCreateCallbackAtIndex (uint32_t idx); 149 150 static ObjectFileCreateMemoryInstance 151 GetObjectFileCreateMemoryCallbackAtIndex (uint32_t idx); 152 153 static ObjectFileGetModuleSpecifications 154 GetObjectFileGetModuleSpecificationsCallbackAtIndex (uint32_t idx); 155 156 static ObjectFileCreateInstance 157 GetObjectFileCreateCallbackForPluginName (const ConstString &name); 158 159 static ObjectFileCreateMemoryInstance 160 GetObjectFileCreateMemoryCallbackForPluginName (const ConstString &name); 161 162 163 //------------------------------------------------------------------ 164 // ObjectContainer 165 //------------------------------------------------------------------ 166 static bool 167 RegisterPlugin (const ConstString &name, 168 const char *description, 169 ObjectContainerCreateInstance create_callback, 170 ObjectFileGetModuleSpecifications get_module_specifications); 171 172 static bool 173 UnregisterPlugin (ObjectContainerCreateInstance create_callback); 174 175 static ObjectContainerCreateInstance 176 GetObjectContainerCreateCallbackAtIndex (uint32_t idx); 177 178 static ObjectContainerCreateInstance 179 GetObjectContainerCreateCallbackForPluginName (const ConstString &name); 180 181 static ObjectFileGetModuleSpecifications 182 GetObjectContainerGetModuleSpecificationsCallbackAtIndex (uint32_t idx); 183 184 //------------------------------------------------------------------ 185 // LogChannel 186 //------------------------------------------------------------------ 187 static bool 188 RegisterPlugin (const ConstString &name, 189 const char *description, 190 LogChannelCreateInstance create_callback); 191 192 static bool 193 UnregisterPlugin (LogChannelCreateInstance create_callback); 194 195 static LogChannelCreateInstance 196 GetLogChannelCreateCallbackAtIndex (uint32_t idx); 197 198 static LogChannelCreateInstance 199 GetLogChannelCreateCallbackForPluginName (const ConstString &name); 200 201 static const char * 202 GetLogChannelCreateNameAtIndex (uint32_t idx); 203 204 //------------------------------------------------------------------ 205 // Platform 206 //------------------------------------------------------------------ 207 static bool 208 RegisterPlugin (const ConstString &name, 209 const char *description, 210 PlatformCreateInstance create_callback, 211 DebuggerInitializeCallback debugger_init_callback = NULL); 212 213 static bool 214 UnregisterPlugin (PlatformCreateInstance create_callback); 215 216 static PlatformCreateInstance 217 GetPlatformCreateCallbackAtIndex (uint32_t idx); 218 219 static PlatformCreateInstance 220 GetPlatformCreateCallbackForPluginName (const ConstString &name); 221 222 static const char * 223 GetPlatformPluginNameAtIndex (uint32_t idx); 224 225 static const char * 226 GetPlatformPluginDescriptionAtIndex (uint32_t idx); 227 228 static size_t 229 AutoCompletePlatformName (const char *partial_name, 230 StringList &matches); 231 //------------------------------------------------------------------ 232 // Process 233 //------------------------------------------------------------------ 234 static bool 235 RegisterPlugin (const ConstString &name, 236 const char *description, 237 ProcessCreateInstance create_callback, 238 DebuggerInitializeCallback debugger_init_callback = NULL); 239 240 static bool 241 UnregisterPlugin (ProcessCreateInstance create_callback); 242 243 static ProcessCreateInstance 244 GetProcessCreateCallbackAtIndex (uint32_t idx); 245 246 static ProcessCreateInstance 247 GetProcessCreateCallbackForPluginName (const ConstString &name); 248 249 static const char * 250 GetProcessPluginNameAtIndex (uint32_t idx); 251 252 static const char * 253 GetProcessPluginDescriptionAtIndex (uint32_t idx); 254 255 //------------------------------------------------------------------ 256 // SymbolFile 257 //------------------------------------------------------------------ 258 static bool 259 RegisterPlugin (const ConstString &name, 260 const char *description, 261 SymbolFileCreateInstance create_callback); 262 263 static bool 264 UnregisterPlugin (SymbolFileCreateInstance create_callback); 265 266 static SymbolFileCreateInstance 267 GetSymbolFileCreateCallbackAtIndex (uint32_t idx); 268 269 static SymbolFileCreateInstance 270 GetSymbolFileCreateCallbackForPluginName (const ConstString &name); 271 272 273 //------------------------------------------------------------------ 274 // SymbolVendor 275 //------------------------------------------------------------------ 276 static bool 277 RegisterPlugin (const ConstString &name, 278 const char *description, 279 SymbolVendorCreateInstance create_callback); 280 281 static bool 282 UnregisterPlugin (SymbolVendorCreateInstance create_callback); 283 284 static SymbolVendorCreateInstance 285 GetSymbolVendorCreateCallbackAtIndex (uint32_t idx); 286 287 static SymbolVendorCreateInstance 288 GetSymbolVendorCreateCallbackForPluginName (const ConstString &name); 289 290 //------------------------------------------------------------------ 291 // UnwindAssembly 292 //------------------------------------------------------------------ 293 static bool 294 RegisterPlugin (const ConstString &name, 295 const char *description, 296 UnwindAssemblyCreateInstance create_callback); 297 298 static bool 299 UnregisterPlugin (UnwindAssemblyCreateInstance create_callback); 300 301 static UnwindAssemblyCreateInstance 302 GetUnwindAssemblyCreateCallbackAtIndex (uint32_t idx); 303 304 static UnwindAssemblyCreateInstance 305 GetUnwindAssemblyCreateCallbackForPluginName (const ConstString &name); 306 307 //------------------------------------------------------------------ 308 // Some plug-ins might register a DebuggerInitializeCallback 309 // callback when registering the plug-in. After a new Debugger 310 // instance is created, this DebuggerInitialize function will get 311 // called. This allows plug-ins to install Properties and do any 312 // other initialization that requires a debugger instance. 313 //------------------------------------------------------------------ 314 static void 315 DebuggerInitialize (Debugger &debugger); 316 317 static lldb::OptionValuePropertiesSP 318 GetSettingForDynamicLoaderPlugin (Debugger &debugger, 319 const ConstString &setting_name); 320 321 static bool 322 CreateSettingForDynamicLoaderPlugin (Debugger &debugger, 323 const lldb::OptionValuePropertiesSP &properties_sp, 324 const ConstString &description, 325 bool is_global_property); 326 327 static lldb::OptionValuePropertiesSP 328 GetSettingForPlatformPlugin (Debugger &debugger, 329 const ConstString &setting_name); 330 331 static bool 332 CreateSettingForPlatformPlugin (Debugger &debugger, 333 const lldb::OptionValuePropertiesSP &properties_sp, 334 const ConstString &description, 335 bool is_global_property); 336 337 static lldb::OptionValuePropertiesSP 338 GetSettingForProcessPlugin (Debugger &debugger, 339 const ConstString &setting_name); 340 341 static bool 342 CreateSettingForProcessPlugin (Debugger &debugger, 343 const lldb::OptionValuePropertiesSP &properties_sp, 344 const ConstString &description, 345 bool is_global_property); 346 347 }; 348 349 350 } // namespace lldb_private 351 352 #endif // liblldb_PluginManager_h_ 353