blob: 243378388b31d22ea35344a7177afa72e328ee82 [file] [log] [blame]
#include <windows.h>
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;
static void
do_pseudo_reloc (void* start,void *end,void *base)
{
ptrdiff_t reloc_target;
runtime_pseudo_reloc *r;
for (r = (runtime_pseudo_reloc*) start; r < (runtime_pseudo_reloc*) end; r++)
{
reloc_target = (ptrdiff_t) base + r->target;
*((ptrdiff_t*) reloc_target) += r->addend;
}
}
void
_pei386_runtime_relocator ()
{
do_pseudo_reloc (&__RUNTIME_PSEUDO_RELOC_LIST__,&__RUNTIME_PSEUDO_RELOC_LIST_END__,&_image_base__);
}