1642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===-- LanguageRuntime.h ---------------------------------------------------*- C++ -*-===// 2642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 3642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// The LLVM Compiler Infrastructure 4642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 5642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// This file is distributed under the University of Illinois Open Source 6642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// License. See LICENSE.TXT for details. 7642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 8642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===----------------------------------------------------------------------===// 9642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 10642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#ifndef liblldb_LanguageRuntime_h_ 11642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#define liblldb_LanguageRuntime_h_ 12642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 13642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C Includes 14642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C++ Includes 15642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Other libraries and framework includes 16642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Project includes 17b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h" 18c105362e1fd33664939811569dc4a540959e7db7Jim Ingham#include "lldb/Breakpoint/BreakpointResolver.h" 193df164e694d4e03905f8725c46b68b8dcc104debJim Ingham#include "lldb/Breakpoint/BreakpointResolverName.h" 20642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Core/PluginInterface.h" 21642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/lldb-private.h" 22324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Core/ValueObject.h" 23324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Core/Value.h" 24b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#include "lldb/Target/ExecutionContextScope.h" 25642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 26642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamnamespace lldb_private { 27642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 28642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamclass LanguageRuntime : 29642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham public PluginInterface 30642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham{ 31642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghampublic: 32642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual 33642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham ~LanguageRuntime(); 34642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 35642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham static LanguageRuntime* 36642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham FindPlugin (Process *process, lldb::LanguageType language); 37642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 38642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual lldb::LanguageType 39642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetLanguageType () const = 0; 40642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 41b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham virtual bool 420de37195f17fefb536157b3296a18999116b8125Jim Ingham GetObjectDescription (Stream &str, ValueObject &object) = 0; 43b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham 44324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham virtual bool 45324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope) = 0; 46324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham 471a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata // this call should return true if it could set the name and/or the type 48e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham virtual bool 4910de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham GetDynamicTypeAndAddress (ValueObject &in_value, 5010de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham lldb::DynamicValueType use_dynamic, 5110de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham TypeAndOrName &class_type_or_name, 5210de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham Address &address) = 0; 53b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham 54e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // This should be a fast test to determine whether it is likely that this value would 55e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // have a dynamic type. 56e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham virtual bool 57e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham CouldHaveDynamicValue (ValueObject &in_value) = 0; 58e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 5929756d452be39535ded2cff50d9db4df46fe6400Sean Callanan virtual void 6029756d452be39535ded2cff50d9db4df46fe6400Sean Callanan SetExceptionBreakpoints () 6129756d452be39535ded2cff50d9db4df46fe6400Sean Callanan { 6229756d452be39535ded2cff50d9db4df46fe6400Sean Callanan } 6329756d452be39535ded2cff50d9db4df46fe6400Sean Callanan 6429756d452be39535ded2cff50d9db4df46fe6400Sean Callanan virtual void 6529756d452be39535ded2cff50d9db4df46fe6400Sean Callanan ClearExceptionBreakpoints () 6629756d452be39535ded2cff50d9db4df46fe6400Sean Callanan { 6729756d452be39535ded2cff50d9db4df46fe6400Sean Callanan } 6829756d452be39535ded2cff50d9db4df46fe6400Sean Callanan 6929756d452be39535ded2cff50d9db4df46fe6400Sean Callanan virtual bool 7029756d452be39535ded2cff50d9db4df46fe6400Sean Callanan ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason) 7129756d452be39535ded2cff50d9db4df46fe6400Sean Callanan { 7229756d452be39535ded2cff50d9db4df46fe6400Sean Callanan return false; 7329756d452be39535ded2cff50d9db4df46fe6400Sean Callanan } 74c105362e1fd33664939811569dc4a540959e7db7Jim Ingham 753df164e694d4e03905f8725c46b68b8dcc104debJim Ingham static lldb::BreakpointSP 763df164e694d4e03905f8725c46b68b8dcc104debJim Ingham CreateExceptionBreakpoint (Target &target, 773df164e694d4e03905f8725c46b68b8dcc104debJim Ingham lldb::LanguageType language, 783df164e694d4e03905f8725c46b68b8dcc104debJim Ingham bool catch_bp, 793df164e694d4e03905f8725c46b68b8dcc104debJim Ingham bool throw_bp, 803df164e694d4e03905f8725c46b68b8dcc104debJim Ingham bool is_internal = false); 814722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham 824722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham static lldb::LanguageType 834722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham GetLanguageTypeFromString (const char *string); 844722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham 854722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham static const char * 864722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham GetNameForLanguageType (lldb::LanguageType language); 87c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan 88c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan Process * 89c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan GetProcess() 90c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan { 91c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan return m_process; 92c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan } 9319784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton 943df164e694d4e03905f8725c46b68b8dcc104debJim Ingham virtual lldb::BreakpointResolverSP 953df164e694d4e03905f8725c46b68b8dcc104debJim Ingham CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp) = 0; 963df164e694d4e03905f8725c46b68b8dcc104debJim Ingham 97d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton virtual lldb::SearchFilterSP 98d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton CreateExceptionSearchFilter (); 99d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton 10019784bd12a0beae5b7930d51dcd9ded53cb08470Greg Claytonprotected: 10119784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton //------------------------------------------------------------------ 10219784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton // Classes that inherit from LanguageRuntime can see and modify these 10319784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton //------------------------------------------------------------------ 10419784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton 105642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham LanguageRuntime(Process *process); 106b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham Process *m_process; 107642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamprivate: 108642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham DISALLOW_COPY_AND_ASSIGN (LanguageRuntime); 109642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham}; 110642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 111642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham} // namespace lldb_private 112642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 113642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#endif // liblldb_LanguageRuntime_h_ 114