From beb8445d1453de66125fc8c387a952fe19526e5f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 6 Dec 2018 16:39:28 -0700 Subject: [PATCH] cs on Windows: almost support embedded DLLs Wire in the pieces to make embedded DLLs work, but a DLL based on Chez Scheme doesn't actually work as embedded, yet. --- racket/src/cs/c/boot.c | 5 ++- racket/src/cs/c/boot.h | 6 ++-- racket/src/cs/c/main.c | 40 ++++++++++++++++++---- racket/src/start/config.inc | 27 +++++++-------- racket/src/start/embedded_dll.inc | 15 +++++++- racket/src/worksp/cs/Makefile | 20 ++++++----- racket/src/worksp/cs/vc140.pdb | Bin 0 -> 143360 bytes racket/src/worksp/csbuild.rkt | 3 +- racket/src/worksp/mrstart/mrstart.vcxproj | 1 + racket/src/worksp/mzstart/mzstart.vcxproj | 1 + 10 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 racket/src/worksp/cs/vc140.pdb diff --git a/racket/src/cs/c/boot.c b/racket/src/cs/c/boot.c index ffe8dea8dd..39540d4e65 100644 --- a/racket/src/cs/c/boot.c +++ b/racket/src/cs/c/boot.c @@ -96,7 +96,8 @@ void racket_boot(int argc, char **argv, char *exec_file, char *run_file, char *coldir, char *configdir, /* wchar_t * */void *dlldir, int pos1, int pos2, int pos3, int cs_compiled_subdir, int is_gui, - int wm_is_gracket, char *gracket_guid) + int wm_is_gracket, char *gracket_guid, + void *dll_open, void *dll_find_object) /* exe argument already stripped from argv */ { #if !defined(RACKET_USE_FRAMEWORK) || !defined(RACKET_AS_BOOT) @@ -109,6 +110,8 @@ void racket_boot(int argc, char **argv, char *exec_file, char *run_file, #ifdef WIN32 if (dlldir) rktio_set_dll_path((wchar_t *)dlldir); + if (dll_open) + rktio_set_dll_procs(dll_open, dll_find_object); #endif Sscheme_init(NULL); diff --git a/racket/src/cs/c/boot.h b/racket/src/cs/c/boot.h index 7fda935e66..47f656e680 100644 --- a/racket/src/cs/c/boot.h +++ b/racket/src/cs/c/boot.h @@ -3,11 +3,13 @@ BOOT_EXTERN void racket_boot(int argc, char **argv, char *exec_file, char *run_f char *coldir, char *configdir, /* wchar_t * */void *dlldir, int pos1, int pos2, int pos3, int cs_compiled_subdir, int is_gui, - int wm_is_gracket, char *gracket_guid); + int wm_is_gracket, char *gracket_guid, + void *ddll_open, void *dll_find_object); typedef void (*racket_boot_t)(int argc, char **argv, char *exec_file, char *run_file, char* boot_exe, long segment_offset, char *coldir, char *configdir, /* wchar_t * */void *dlldir, int pos1, int pos2, int pos3, int cs_compiled_subdir, int is_gui, - int wm_is_gracket, char *gracket_guid); + int wm_is_gracket, char *gracket_guid, + void *ddll_open, void *dll_find_object); diff --git a/racket/src/cs/c/main.c b/racket/src/cs/c/main.c index 45b714ce3d..292f1fddaa 100644 --- a/racket/src/cs/c/main.c +++ b/racket/src/cs/c/main.c @@ -29,6 +29,22 @@ static int scheme_utf8_encode(unsigned int *path, int zero_offset, int len, #include "../../start/config.inc" +#ifdef WIN32 +typedef void *(*scheme_dll_open_proc)(const char *name, int as_global); +typedef void *(*scheme_dll_find_object_proc)(void *h, const char *name); +static scheme_dll_open_proc embedded_dll_open; +static scheme_dll_find_object_proc scheme_dll_find_object; +static void scheme_set_dll_procs(scheme_dll_open_proc open, scheme_dll_find_object_proc find) +{ + embedded_dll_open = open; + scheme_dll_find_object = find; +} +# include "../../start/embedded_dll.inc" +#else +# define embedded_dll_open NULL +# define scheme_dll_find_object NULL +#endif + char *boot_file_data = "BooT FilE OffsetS:xxxxyyyyyzzzz"; static int boot_file_offset = 18; @@ -296,8 +312,8 @@ static int bytes_main(int argc, char **argv, long segment_offset; #ifdef WIN32 wchar_t *dll_path; - HMODULE dll; racket_boot_t racket_boot_p; + long boot_rsrc_offset = 0; #endif do_pre_filter_cmdline_arguments(&argc, &argv); @@ -308,10 +324,21 @@ static int bytes_main(int argc, char **argv, } #ifdef WIN32 -# define racket_boot racket_boot_p - dll_path = load_delayed_dll_x(NULL, "libracketcsxxxxxxx.dll", &dll); + parse_embedded_dlls(); + register_embedded_dll_hooks(); + if (embedded_dll_open) { + void *dll; + dll = embedded_dll_open("libracketcsxxxxxxx.dll", 1); + boot_rsrc_offset = in_memory_get_offset("libracketcsxxxxxxx.dll"); + racket_boot_p = (racket_boot_t)scheme_dll_find_object(dll, "racket_boot"); + dll_path = get_self_executable_path(); + } else { + HMODULE dll; + dll_path = load_delayed_dll_x(NULL, "libracketcsxxxxxxx.dll", &dll); + racket_boot_p = (racket_boot_t)GetProcAddress(dll, "racket_boot"); + } boot_exe = string_to_utf8(dll_path); - racket_boot_p = (racket_boot_t)GetProcAddress(dll, "racket_boot"); +# define racket_boot racket_boot_p #else boot_exe = get_self_path(exec_file); #endif @@ -331,7 +358,7 @@ static int bytes_main(int argc, char **argv, boot_offset = find_boot_section(boot_exe); #endif #ifdef WIN32 - boot_offset = find_resource_offset(dll_path, 259); + boot_offset = find_resource_offset(dll_path, 259, boot_rsrc_offset); #endif pos1 += boot_offset; @@ -343,7 +370,8 @@ static int bytes_main(int argc, char **argv, extract_coldir(), extract_configdir(), extract_dlldir(), pos1, pos2, pos3, CS_COMPILED_SUBDIR, RACKET_IS_GUI, - wm_is_gracket, gracket_guid); + wm_is_gracket, gracket_guid, + embedded_dll_open, scheme_dll_find_object); return 0; } diff --git a/racket/src/start/config.inc b/racket/src/start/config.inc index eccd2530de..3d10d19b76 100644 --- a/racket/src/start/config.inc +++ b/racket/src/start/config.inc @@ -162,12 +162,12 @@ wchar_t *get_self_executable_path() XFORM_SKIP_PROC return path; } -static DWORD find_by_id(HANDLE fd, DWORD rsrcs, DWORD pos, int id) XFORM_SKIP_PROC +static DWORD find_by_id(HANDLE fd, DWORD rsrcs, DWORD pos, int id, long delta) XFORM_SKIP_PROC { DWORD got, val; WORD name_count, id_count; - SetFilePointer(fd, pos + 12, 0, FILE_BEGIN); + SetFilePointer(fd, pos + 12 + delta, 0, FILE_BEGIN); ReadFile(fd, &name_count, 2, &got, NULL); ReadFile(fd, &id_count, 2, &got, NULL); @@ -185,7 +185,7 @@ static DWORD find_by_id(HANDLE fd, DWORD rsrcs, DWORD pos, int id) XFORM_SKIP_PR return 0; } -static long find_resource_offset(wchar_t *path, int id) XFORM_SKIP_PROC +static long find_resource_offset(wchar_t *path, int id, long delta) XFORM_SKIP_PROC { /* Find the resource of type `id` */ HANDLE fd; @@ -196,7 +196,6 @@ static long find_resource_offset(wchar_t *path, int id) XFORM_SKIP_PROC OPEN_EXISTING, 0, NULL); - free(path); if (fd == INVALID_HANDLE_VALUE) return 0; @@ -205,16 +204,16 @@ static long find_resource_offset(wchar_t *path, int id) XFORM_SKIP_PROC WORD num_sections, head_size; char name[8]; - SetFilePointer(fd, 60, 0, FILE_BEGIN); + SetFilePointer(fd, 60+delta, 0, FILE_BEGIN); ReadFile(fd, &val, 4, &got, NULL); - SetFilePointer(fd, val+4+2, 0, FILE_BEGIN); /* Skip "PE\0\0" tag and machine */ + SetFilePointer(fd, val+4+2+delta, 0, FILE_BEGIN); /* Skip "PE\0\0" tag and machine */ ReadFile(fd, &num_sections, 2, &got, NULL); SetFilePointer(fd, 12, 0, FILE_CURRENT); /* time stamp + symbol table */ ReadFile(fd, &head_size, 2, &got, NULL); sec_pos = val+4+20+head_size; while (num_sections--) { - SetFilePointer(fd, sec_pos, 0, FILE_BEGIN); + SetFilePointer(fd, sec_pos+delta, 0, FILE_BEGIN); ReadFile(fd, &name, 8, &got, NULL); if ((name[0] == '.') && (name[1] == 'r') @@ -226,24 +225,24 @@ static long find_resource_offset(wchar_t *path, int id) XFORM_SKIP_PROC ReadFile(fd, &virtual_addr, 4, &got, NULL); SetFilePointer(fd, 4, 0, FILE_CURRENT); /* skip file size */ ReadFile(fd, &rsrcs, 4, &got, NULL); - SetFilePointer(fd, rsrcs, 0, FILE_BEGIN); + SetFilePointer(fd, rsrcs+delta, 0, FILE_BEGIN); /* We're at the resource table; step through 3 layers */ - pos = find_by_id(fd, rsrcs, rsrcs, id); + pos = find_by_id(fd, rsrcs, rsrcs, id, delta); if (pos) { - pos = find_by_id(fd, rsrcs, pos, 1); + pos = find_by_id(fd, rsrcs, pos, 1, delta); if (pos) { - pos = find_by_id(fd, rsrcs, pos, 1033); + pos = find_by_id(fd, rsrcs, pos, 1033, delta); if (pos) { /* pos is the reource data entry */ - SetFilePointer(fd, pos, 0, FILE_BEGIN); + SetFilePointer(fd, pos+delta, 0, FILE_BEGIN); ReadFile(fd, &val, 4, &got, NULL); pos = val - virtual_addr + rsrcs; CloseHandle(fd); - return pos; + return pos+delta; } } } @@ -261,7 +260,7 @@ static long find_resource_offset(wchar_t *path, int id) XFORM_SKIP_PROC static long get_segment_offset() XFORM_SKIP_PROC { - return find_resource_offset(get_self_executable_path(), 257); + return find_resource_offset(get_self_executable_path(), 257, 0); } #endif diff --git a/racket/src/start/embedded_dll.inc b/racket/src/start/embedded_dll.inc index 579285f58c..0ef5ea02f4 100644 --- a/racket/src/start/embedded_dll.inc +++ b/racket/src/start/embedded_dll.inc @@ -38,7 +38,7 @@ static void parse_embedded_dlls() { long rsrc_pos; - rsrc_pos = find_resource_offset(get_self_executable_path(), 258); + rsrc_pos = find_resource_offset(get_self_executable_path(), 258, 0); if (rsrc_pos) { HANDLE fd = open_self(); @@ -140,6 +140,19 @@ static void *in_memory_find_object(void *h, const char *name) } } +static long in_memory_get_offset(const char *name) +{ + int i; + + for (i = 0; embedded_dlls[i].name; i++) { + if (!_stricmp(embedded_dlls[i].name, name)) { + return embedded_dlls[i].pos; + } + } + + return 0; +} + static void register_embedded_dll_hooks() { if (embedded_dlls) { diff --git a/racket/src/worksp/cs/Makefile b/racket/src/worksp/cs/Makefile index 03545841c7..211431e217 100644 --- a/racket/src/worksp/cs/Makefile +++ b/racket/src/worksp/cs/Makefile @@ -4,9 +4,10 @@ INCS = /I.. /I..\..\rktio /I..\librktio /I$(SCHEME_DIR)\$(MACHINE)\boot\$(MACHIN RKTIO_LIB = ..\..\build\librktio.lib BASE_WIN32_LIBS = WS2_32.lib Shell32.lib User32.lib WIN32_LIBS = $(BASE_WIN32_LIBS) RpCrt4.lib Ole32.lib Advapi32.lib +SCHEME_LIB_FULL = $(SCHEME_DIR)\$(MACHINE)\boot\$(MACHINE)\$(SCHEME_LIB) LIBS = $(RKTIO_LIB) \ - $(SCHEME_DIR)\$(MACHINE)\boot\$(MACHINE)\$(SCHEME_LIB) \ + $(SCHEME_LIB_FULL) \ $(WIN32_LIBS) DEST_DLL = ..\..\build\raw_libracketcs.dll @@ -17,27 +18,30 @@ CSDIR = ..\..\cs\c MAIN_DEPS = ..\..\start\config.inc \ ..\..\start\parse_cmdl.inc \ ..\..\start\delayed.inc \ - ..\..\start\win_single.inc + ..\..\start\win_single.inc \ + ..\..\start\embedded_dll.inc -FLAGS = /DWIN32 +MEMMOD = ..\..\start\MemoryModule.c + +FLAGS = /DWIN32 /Ox /MT COMP_SUBDIR = /DCS_COMPILED_SUBDIR=1 all: $(DEST) $(GDEST) -$(DEST_DLL): $(CSDIR)\boot.c libracket.res $(RKTIO_LIB) - cl /LD /DLL /Fe$(DEST_DLL) /Ox /MT $(FLAGS) $(INCS) $(CSDIR)\boot.c libracket.res $(LIBS) +$(DEST_DLL): $(CSDIR)\boot.c libracket.res $(RKTIO_LIB) $(SCHEME_LIB_FULL) + cl /LD /DLL /Fe$(DEST_DLL) $(FLAGS) $(INCS) $(CSDIR)\boot.c libracket.res $(LIBS) libracket.res: libracket.rc rc /l 0x409 /folibracket.res libracket.rc -$(DEST): $(CSDIR)\main.c $(MAIN_DEPS) $(DEST_DLL) racket.res - cl /Fe$(DEST) /Ox /MT $(COMP_SUBDIR) $(FLAGS) $(INCS) $(CSDIR)\main.c racket.res $(WIN32_LIBS) +$(DEST): $(CSDIR)\main.c $(MAIN_DEPS) $(MEMMOD) $(DEST_DLL) racket.res + cl /Fe$(DEST) $(COMP_SUBDIR) $(FLAGS) $(INCS) $(CSDIR)\main.c $(MEMMOD) racket.res $(WIN32_LIBS) racket.res: ../racket/racket.rc ../racket/racket.ico rc /l 0x409 /foracket.res ../racket/racket.rc $(GDEST): $(CSDIR)\grmain.c $(CSDIR)\main.c $(MAIN_DEPS) $(DEST_DLL) gracket.res - cl /Fe$(GDEST) /Ox /MT $(COMP_SUBDIR) $(FLAGS) $(INCS) $(CSDIR)\grmain.c gracket.res $(WIN32_LIBS) + cl /Fe$(GDEST) $(COMP_SUBDIR) $(FLAGS) $(INCS) $(CSDIR)\grmain.c $(MEMMOD) gracket.res $(WIN32_LIBS) gracket.res: ../gracket/gracket.rc ../gracket/gracket.ico rc /l 0x409 /fogracket.res ../gracket/gracket.rc diff --git a/racket/src/worksp/cs/vc140.pdb b/racket/src/worksp/cs/vc140.pdb new file mode 100644 index 0000000000000000000000000000000000000000..cdb4f3ed6de51b3b3fe508ea8049fd3119c4df3f GIT binary patch literal 143360 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 <_ProjectFileVersion>10.0.40219.1 + MrStart ..\..\..\lib\ $(Platform)\$(Configuration)\ false diff --git a/racket/src/worksp/mzstart/mzstart.vcxproj b/racket/src/worksp/mzstart/mzstart.vcxproj index e235374916..4a56b5f954 100644 --- a/racket/src/worksp/mzstart/mzstart.vcxproj +++ b/racket/src/worksp/mzstart/mzstart.vcxproj @@ -38,6 +38,7 @@ <_ProjectFileVersion>10.0.40219.1 + MzStart ..\..\..\lib\ $(Platform)\$(Configuration)\ false