/* pseudo-reloc.c Copyright 2002 Red Hat, Inc. Written by Egor Duda This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #include extern char __RUNTIME_PSEUDO_RELOC_LIST__; extern char __RUNTIME_PSEUDO_RELOC_LIST_END__; extern char _image_base__; typedef struct { DWORD addend; DWORD target; } runtime_pseudo_reloc; void do_pseudo_reloc (void* start, void* end, void* base) { DWORD reloc_target; runtime_pseudo_reloc* r; for (r = (runtime_pseudo_reloc*) start; r < (runtime_pseudo_reloc*) end; r++) { reloc_target = (DWORD) base + r->target; *((DWORD*) reloc_target) += r->addend; } } void _pei386_runtime_relocator () { do_pseudo_reloc (&__RUNTIME_PSEUDO_RELOC_LIST__, &__RUNTIME_PSEUDO_RELOC_LIST_END__, &_image_base__); }