25#if defined(__CYGWIN__)
28#include <sys/cygwin.h>
30# define NO_COPY __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy")))
32#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269)
33#define SHORT_MSG_BUF_SZ 128
39#define ATTRIBUTE_NORETURN __attribute__ ((noreturn))
41#define ATTRIBUTE_NORETURN
44#ifndef __MINGW_LSYMBOL
45#define __MINGW_LSYMBOL(sym) sym
94 char buf[SHORT_MSG_BUF_SZ];
96 char * posix_module =
NULL;
97 static const char UNKNOWN_MODULE[] =
"<unknown module>: ";
98 static const size_t UNKNOWN_MODULE_LEN =
sizeof (UNKNOWN_MODULE) - 1;
99 static const char CYGWIN_FAILURE_MSG[] =
"Cygwin runtime failure: ";
100 static const size_t CYGWIN_FAILURE_MSG_LEN =
sizeof (CYGWIN_FAILURE_MSG) - 1;
108 cygwin_internal (CW_EXIT_PROCESS,
109 STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION,
113 posix_module = cygwin_create_path (CCP_WIN_W_TO_POSIX,
module);
118 buf[SHORT_MSG_BUF_SZ-1] =
'\0';
123 CYGWIN_FAILURE_MSG_LEN, &done,
NULL);
133 CYGWIN_FAILURE_MSG_LEN, &done,
NULL);
135 UNKNOWN_MODULE_LEN, &done,
NULL);
140 cygwin_internal (CW_EXIT_PROCESS,
141 STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION,
148# ifdef __MINGW64_VERSION_MAJOR
149 __mingw_fprintf (
stderr,
"Mingw-w64 runtime failure:\n");
164#ifdef __MINGW64_VERSION_MAJOR
169typedef struct sSecInfo {
176static sSecInfo *the_secs =
NULL;
177static int maxSections = 0;
186 for (
i = 0;
i < maxSections;
i++)
189 && ((
LPBYTE)
addr) < (the_secs[
i].sec_start + the_secs[
i].
hash->Misc.VirtualSize))
198 the_secs[
i].hash =
h;
199 the_secs[
i].old_protect = 0;
204 __report_error (
" VirtualQuery failed for %d bytes at address %p",
205 (
int)
h->Misc.VirtualSize, the_secs[
i].sec_start);
213 &the_secs[
i].old_protect))
222restore_modified_sections (
void)
228 for (
i = 0;
i < maxSections;
i++)
230 if (the_secs[
i].old_protect == 0)
234 __report_error (
" VirtualQuery failed for %d bytes at address %p",
235 (
int) the_secs[
i].
hash->Misc.VirtualSize,
236 the_secs[
i].sec_start);
264 int call_unprotect = 0;
269#ifdef __MINGW64_VERSION_MAJOR
275 __report_error (
" VirtualQuery failed for %d bytes at address %p",
276 (
int)
sizeof(
b),
addr);
294#define RP_VERSION_V1 0
295#define RP_VERSION_V2 1
309 if (reloc_target < 8)
331 if (reloc_target >= 12
369 __report_error (
" Unknown pseudo relocation protocol version %d.\n",
398 switch ((
r->flags & 0xff))
401 reldata = (
ptrdiff_t) (*((
unsigned char *)reloc_target));
402 if ((reldata & 0x80) != 0)
406 reldata = (
ptrdiff_t) (*((
unsigned short *)reloc_target));
407 if ((reldata & 0x8000) != 0)
411 reldata = (
ptrdiff_t) (*((
unsigned int *)reloc_target));
413 if ((reldata & 0x80000000) != 0)
419 reldata = (
ptrdiff_t) (*((
unsigned long long *)reloc_target));
425 (
int) (
r->flags & 0xff));
434 switch ((
r->flags & 0xff))
457 static NO_COPY int was_init = 0;
458#ifdef __MINGW64_VERSION_MAJOR
465#ifdef __MINGW64_VERSION_MAJOR
467 the_secs = (sSecInfo *) _alloca (
sizeof (sSecInfo) * (
size_t) mSecs);
479#ifdef __MINGW64_VERSION_MAJOR
480 restore_modified_sections ();
ACPI_SIZE strlen(const char *String)
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
PBYTE _GetPEImageBase(void)
#define INVALID_HANDLE_VALUE
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
__kernel_ptrdiff_t ptrdiff_t
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_opt_ _CRTIMP int __cdecl vfprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
#define memcpy(s1, s2, n)
#define PAGE_EXECUTE_READWRITE
PIMAGE_SECTION_HEADER __mingw_GetSectionForAddress(LPVOID p)
int __mingw_GetSectionCount(void)
static void __write_memory(void *addr, const void *src, size_t len)
char __RUNTIME_PSEUDO_RELOC_LIST_END__
#define __MINGW_LSYMBOL(sym)
void _pei386_runtime_relocator(void)
char __RUNTIME_PSEUDO_RELOC_LIST__
static void do_pseudo_reloc(void *start, void *end, void *base)
static void ATTRIBUTE_NORETURN __report_error(const char *msg,...)
#define ATTRIBUTE_NORETURN
BOOL NTAPI VirtualProtect(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD flNewProtect, OUT PDWORD lpflOldProtect)
SIZE_T NTAPI VirtualQuery(IN LPCVOID lpAddress, OUT PMEMORY_BASIC_INFORMATION lpBuffer, IN SIZE_T dwLength)
DWORD WINAPI GetLastError(void)