1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4//*****************************************************************************
5// stdafx.h
6//
7
8//
9// Common include file for utility code.
10//*****************************************************************************
11#include <stdio.h>
12#include <windows.h>
13#include <winnt.h>
14
15#include <dbgtargetcontext.h>
16
17#define RIGHT_SIDE_COMPILE
18
19//-----------------------------------------------------------------------------
20// Contracts for RS threading.
21// We only do this for debug builds and not for inproc
22//-----------------------------------------------------------------------------
23#if defined(_DEBUG)
24 #define RSCONTRACTS
25#endif
26
27
28// In case of FEATURE_DBGIPC_TRANSPORT_DI we use pipe for debugger debugee communication
29// and event redirection is not needed. (won't work anyway)
30#ifndef FEATURE_DBGIPC_TRANSPORT_DI
31// Currently, we only can redirect exception events. Since real interop-debugging
32// neeeds all events, redirection can't work in real-interop.
33// However, whether we're interop-debugging is determined at runtime, so we always
34// enable at compile time and then we need a runtime check later.
35#define ENABLE_EVENT_REDIRECTION_PIPELINE
36#endif
37
38#include "ex.h"
39
40#include "sigparser.h"
41#include "corpub.h"
42#include "rspriv.h"
43
44// This is included to deal with GCC limitations around templates.
45// For GCC, if a compilation unit refers to a templated class (like Ptr<T>), GCC requires the compilation
46// unit to have T's definitions for anything that Ptr may call.
47// RsPriv.h has a RSExtSmartPtr<ShimProcess>, which will call ShimProcess::AddRef, which means the same compilation unit
48// must have the definition of ShimProcess::AddRef, and therefore the whole ShimProcess class.
49// CL.exe does not have this problem.
50// Practically, this means that anybody that includes rspriv.h must include shimpriv.h.
51#include "shimpriv.h"
52
53#ifdef _DEBUG
54#include "utilcode.h"
55#endif
56
57#ifndef _TARGET_ARM_
58#define DbiGetThreadContext(hThread, lpContext) ::GetThreadContext(hThread, (CONTEXT*)(lpContext))
59#define DbiSetThreadContext(hThread, lpContext) ::SetThreadContext(hThread, (CONTEXT*)(lpContext))
60#else
61BOOL DbiGetThreadContext(HANDLE hThread, DT_CONTEXT *lpContext);
62BOOL DbiSetThreadContext(HANDLE hThread, const DT_CONTEXT *lpContext);
63#endif
64