public DataTargetWrapper(ITarget target, IRuntime runtime) { Debug.Assert(target != null); Debug.Assert(runtime != null); _target = target; _runtimeBaseAddress = runtime.RuntimeModule.ImageBase; _memoryService = runtime.Services.GetService <IMemoryService>() ?? target.Services.GetService <IMemoryService>(); _threadService = target.Services.GetService <IThreadService>(); _threadUnwindService = target.Services.GetService <IThreadUnwindService>(); _moduleService = target.Services.GetService <IModuleService>(); _remoteMemoryService = target.Services.GetService <IRemoteMemoryService>(); _symbolServiceWrapper = new SymbolServiceWrapper(target.Host); _ignoreAddressBitsMask = _memoryService.SignExtensionMask(); VTableBuilder builder = AddInterface(IID_ICLRDataTarget, false); AddDataTarget(builder); IDataTarget = builder.Complete(); builder = AddInterface(IID_ICLRDataTarget2, false); AddDataTarget2(builder); builder.Complete(); builder = AddInterface(IID_ICLRDataTarget4, validate: false); builder.AddMethod(new VirtualUnwindDelegate(VirtualUnwind)); builder.Complete(); builder = AddInterface(IID_ICLRMetadataLocator, false); builder.AddMethod(new GetMetadataDelegate(GetMetadata)); builder.Complete(); builder = AddInterface(IID_ICLRRuntimeLocator, false); builder.AddMethod(new GetRuntimeBaseDelegate(GetRuntimeBase)); builder.Complete(); }
internal CorDebugDataTargetWrapper(ITarget target, IRuntime runtime) { Debug.Assert(target != null); Debug.Assert(runtime != null); _target = target; _memoryService = runtime.Services.GetService <IMemoryService>() ?? target.Services.GetService <IMemoryService>(); _threadService = target.Services.GetService <IThreadService>(); _threadUnwindService = target.Services.GetService <IThreadUnwindService>(); _symbolServiceWrapper = new SymbolServiceWrapper(target.Host); _ignoreAddressBitsMask = _memoryService.SignExtensionMask(); VTableBuilder builder = AddInterface(IID_ICorDebugDataTarget, validate: false); builder.AddMethod(new GetPlatformDelegate(GetPlatform)); builder.AddMethod(new ReadVirtualDelegate(ReadVirtual)); builder.AddMethod(new GetThreadContextDelegate(GetThreadContext)); ICorDebugDataTarget = builder.Complete(); builder = AddInterface(IID_ICorDebugDataTarget4, validate: false); builder.AddMethod(new VirtualUnwindDelegate(VirtualUnwind)); builder.Complete(); builder = AddInterface(IID_ICorDebugMutableDataTarget, validate: false); builder.AddMethod(new WriteVirtualDelegate(WriteVirtual)); builder.AddMethod(new SetThreadContextDelegate((self, threadId, contextSize, context) => HResult.E_NOTIMPL)); builder.AddMethod(new ContinueStatusChangeDelegate((self, continueStatus) => HResult.E_NOTIMPL)); builder.Complete(); builder = AddInterface(IID_ICorDebugMetaDataLocator, validate: false); builder.AddMethod(new GetMetaDataDelegate(GetMetaData)); builder.Complete(); }
/// <summary> /// Create an instance of the service wrapper SOS uses. /// </summary> /// <param name="soshost">SOS host instance</param> internal LLDBServices(SOSHost soshost) { _soshost = soshost; VTableBuilder builder = AddInterface(IID_ILLDBServices, validate: false); builder.AddMethod(new GetCoreClrDirectoryDelegate(GetCoreClrDirectory)); builder.AddMethod(new GetExpressionDelegate((self, expression) => SymbolServiceWrapper.GetExpressionValue(IntPtr.Zero, expression))); builder.AddMethod(new VirtualUnwindDelegate(VirtualUnwind)); builder.AddMethod(new SetExceptionCallbackDelegate(SetExceptionCallback)); builder.AddMethod(new ClearExceptionCallbackDelegate(ClearExceptionCallback)); builder.AddMethod(new GetInterruptDelegate(soshost.GetInterrupt)); builder.AddMethod(new OutputVaListDelegate(soshost.OutputVaList)); builder.AddMethod(new GetDebuggeeTypeDelegate(soshost.GetDebuggeeType)); builder.AddMethod(new GetPageSizeDelegate(soshost.GetPageSize)); builder.AddMethod(new GetExecutingProcessorTypeDelegate(soshost.GetExecutingProcessorType)); builder.AddMethod(new ExecuteDelegate(soshost.Execute)); builder.AddMethod(new GetLastEventInformationDelegate(soshost.GetLastEventInformation)); builder.AddMethod(new DisassembleDelegate(soshost.Disassemble)); builder.AddMethod(new GetContextStackTraceDelegate(GetContextStackTrace)); builder.AddMethod(new ReadVirtualDelegate(soshost.ReadVirtual)); builder.AddMethod(new WriteVirtualDelegate(soshost.WriteVirtual)); builder.AddMethod(new GetSymbolOptionsDelegate(soshost.GetSymbolOptions)); builder.AddMethod(new GetNameByOffsetDelegate(soshost.GetNameByOffset)); builder.AddMethod(new GetNumberModulesDelegate(soshost.GetNumberModules)); builder.AddMethod(new GetModuleByIndexDelegate(soshost.GetModuleByIndex)); builder.AddMethod(new GetModuleByModuleNameDelegate(soshost.GetModuleByModuleName)); builder.AddMethod(new GetModuleByOffsetDelegate(soshost.GetModuleByOffset)); builder.AddMethod(new GetModuleNamesDelegate(soshost.GetModuleNames)); builder.AddMethod(new GetLineByOffsetDelegate(soshost.GetLineByOffset)); builder.AddMethod(new GetSourceFileLineOffsetsDelegate(soshost.GetSourceFileLineOffsets)); builder.AddMethod(new FindSourceFileDelegate(soshost.FindSourceFile)); builder.AddMethod(new GetCurrentProcessSystemIdDelegate(soshost.GetCurrentProcessSystemId)); builder.AddMethod(new GetCurrentThreadIdDelegate(soshost.GetCurrentThreadId)); builder.AddMethod(new SetCurrentThreadIdDelegate(soshost.SetCurrentThreadId)); builder.AddMethod(new GetCurrentThreadSystemIdDelegate(soshost.GetCurrentThreadSystemId)); builder.AddMethod(new GetThreadIdBySystemIdDelegate(soshost.GetThreadIdBySystemId)); builder.AddMethod(new GetThreadContextBySystemIdDelegate(soshost.GetThreadContextBySystemId)); builder.AddMethod(new GetValueByNameDelegate(GetValueByName)); builder.AddMethod(new GetInstructionOffsetDelegate(soshost.GetInstructionOffset)); builder.AddMethod(new GetStackOffsetDelegate(soshost.GetStackOffset)); builder.AddMethod(new GetFrameOffsetDelegate(soshost.GetFrameOffset)); ILLDBServices = builder.Complete(); builder = AddInterface(IID_ILLDBServices2, validate: false); builder.AddMethod(new LoadNativeSymbolsDelegate2(LoadNativeSymbols2)); builder.AddMethod(new AddModuleSymbolDelegate(AddModuleSymbol)); builder.AddMethod(new GetModuleInfoDelegate(GetModuleInfo)); builder.AddMethod(new GetModuleVersionInformationDelegate(soshost.GetModuleVersionInformation)); builder.Complete(); AddRef(); }