diff --git a/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/pixbuf.rkt b/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/pixbuf.rkt index d5c2733c22..c875a4feee 100644 --- a/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/pixbuf.rkt +++ b/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/pixbuf.rkt @@ -37,8 +37,8 @@ #:wrap (allocator release-pixbuf)) (define-gdk gdk_cairo_set_source_pixbuf (_fun _cairo_t _GdkPixbuf _double* _double* -> _void)) -(define-gdk gdk_pixbuf_get_width (_fun _GdkPixbuf -> _int)) -(define-gdk gdk_pixbuf_get_height (_fun _GdkPixbuf -> _int)) +(define-gdk_pixbuf gdk_pixbuf_get_width (_fun _GdkPixbuf -> _int)) +(define-gdk_pixbuf gdk_pixbuf_get_height (_fun _GdkPixbuf -> _int)) (define free-it (ffi-callback free (list _pointer) diff --git a/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/win32.rkt b/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/win32.rkt index a741489994..2ca6e23d77 100644 --- a/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/win32.rkt +++ b/pkgs/gui-pkgs/gui-lib/mred/private/wx/gtk/win32.rkt @@ -1,6 +1,7 @@ #lang racket/base (require ffi/unsafe ffi/unsafe/define + ffi/winapi "utils.rkt") (provide gdk_win32_drawable_get_handle @@ -20,7 +21,7 @@ (define-gdk gdk_win32_drawable_get_handle (_fun _GdkDrawable -> _pointer) #:make-fail make-not-available) -(define-user32 GetDC (_fun #:abi 'stdcall _pointer -> _pointer) +(define-user32 GetDC (_fun #:abi winapi _pointer -> _pointer) #:make-fail make-not-available) -(define-user32 ReleaseDC (_fun #:abi 'stdcall _pointer -> _void) +(define-user32 ReleaseDC (_fun #:abi winapi _pointer -> _void) #:make-fail make-not-available) diff --git a/racket/collects/compiler/private/xform.rkt b/racket/collects/compiler/private/xform.rkt index f609110066..ff36e83354 100644 --- a/racket/collects/compiler/private/xform.rkt +++ b/racket/collects/compiler/private/xform.rkt @@ -886,8 +886,8 @@ ;; they either take one argument or no pointer arguments. ;; So we can ignore them: - __get_errno_ptr ; QNX preprocesses errno to __get_errno_ptr + __getreent ; Cygwin strlen cos cosl sin sinl exp expl pow powl log logl sqrt sqrtl atan2 atan2l isnan isinf fpclass _fpclass __fpclassify __fpclassifyf __fpclassifyl diff --git a/racket/collects/ffi/winapi.rkt b/racket/collects/ffi/winapi.rkt index c1d3de4076..f0a0987ac2 100644 --- a/racket/collects/ffi/winapi.rkt +++ b/racket/collects/ffi/winapi.rkt @@ -6,4 +6,7 @@ (and (eq? 'windows (system-type)) (equal? "win32\\x86_64" (path->string (system-library-subpath #f))))) -(define winapi (if win64? 'default 'stdcall)) +(define winapi (if (or win64? + (not (eq? 'windows (system-type)))) + 'default + 'stdcall)) diff --git a/racket/src/README b/racket/src/README index ebe1d2e2fd..0a3fc3e3b7 100644 --- a/racket/src/README +++ b/racket/src/README @@ -31,11 +31,10 @@ The result is a Windows-style build, but without MzCOM. If you are using a variant of MinGW without "libdelayimp.a", get the implementation of "delayimp.c" from MinGW-w64 and compile it to "libdelayimp.a". -To compile with Cygwin tools, follow the Unix instructions below, and be -sure to configure with `--enable-shared'. The result is a Unix-style -build, not a Windows-style build (e.g., Racket's `system-type' procedure -returns 'unix, not 'windows, and `racket/gui' uses Gtk instead of -Win32). +To compile with Cygwin tools, follow the Unix instructions below. The +result is a Unix-style build, not a Windows-style build (e.g., +Racket's `system-type' procedure returns 'unix, not 'windows, and +`racket/gui' uses Gtk instead of Win32). Beware that MinGW/Cygwin builds different from the MSVC build when SSE-based floating-point math is enabled in the C compiler. In that diff --git a/racket/src/configure b/racket/src/configure index 0d91837c8b..48fa5f90a6 100755 --- a/racket/src/configure +++ b/racket/src/configure @@ -4584,7 +4584,6 @@ $as_echo "#define HAVE_STDINT_H 1" >>confdefs.h esac ;; cygwin*) - enable_cgcdefault="yes" MZINSTALLTARGET=unix-cygwin-install if test "${enable_shared}" = "yes" ; then ar_libtool_no_undefined=" -no-undefined" diff --git a/racket/src/foreign/foreign.c b/racket/src/foreign/foreign.c index b5be78debf..5babfa216a 100644 --- a/racket/src/foreign/foreign.c +++ b/racket/src/foreign/foreign.c @@ -267,6 +267,9 @@ static Scheme_Object *foreign_ffi_lib(int argc, Scheme_Object *argv[]) # ifdef __ANDROID__ if (!name) handle = RTLD_DEFAULT; else # endif /* __ANDROID__ */ +# ifdef __CYGWIN32__ + if (!name) { handle = RTLD_DEFAULT; null_ok = 1; } else +# endif /* __CYGWIN32__ */ handle = dlopen(name, RTLD_NOW | (as_global ? RTLD_GLOBAL : RTLD_LOCAL)); # endif /* WINDOWS_DYNAMIC_LOAD */ if (handle == NULL && !null_ok) { diff --git a/racket/src/foreign/foreign.rktc b/racket/src/foreign/foreign.rktc index f1ded27583..e67332c168 100755 --- a/racket/src/foreign/foreign.rktc +++ b/racket/src/foreign/foreign.rktc @@ -235,6 +235,7 @@ THREAD_LOCAL_DECL(static Scheme_Hash_Table *opened_libs); handle = LoadLibraryW(WIDE_PATH(name)); }{ @@IFDEF{__ANDROID__}{if (!name) handle = RTLD_DEFAULT; else} + @@IFDEF{__CYGWIN32__}{if (!name) { handle = RTLD_DEFAULT; null_ok = 1; } else} handle = dlopen(name, RTLD_NOW | (as_global ? RTLD_GLOBAL : RTLD_LOCAL)); } if (handle == NULL && !null_ok) { diff --git a/racket/src/racket/configure.ac b/racket/src/racket/configure.ac index 71884cdd86..2895aa1f38 100644 --- a/racket/src/racket/configure.ac +++ b/racket/src/racket/configure.ac @@ -718,7 +718,6 @@ case "$host_os" in esac ;; cygwin*) - enable_cgcdefault="yes" MZINSTALLTARGET=unix-cygwin-install if test "${enable_shared}" = "yes" ; then ar_libtool_no_undefined=" -no-undefined" diff --git a/racket/src/racket/gc2/gc2_obj.h b/racket/src/racket/gc2/gc2_obj.h index 5261cbe327..6061e8ab50 100644 --- a/racket/src/racket/gc2/gc2_obj.h +++ b/racket/src/racket/gc2/gc2_obj.h @@ -3,7 +3,7 @@ #if defined(MZ_PRECISE_GC) && !defined(USE_COMPACT_3M_GC) -#if defined(_WIN32) || defined(MZ_USE_LARGE_PAGE_SIZE) +#if defined(_WIN32) || defined(__CYGWIN32__) || defined(MZ_USE_LARGE_PAGE_SIZE) # define LOG_APAGE_SIZE 16 #else # define LOG_APAGE_SIZE 14 diff --git a/racket/src/racket/gc2/page_range.c b/racket/src/racket/gc2/page_range.c index 218fb7c2a4..a4e71c7d58 100644 --- a/racket/src/racket/gc2/page_range.c +++ b/racket/src/racket/gc2/page_range.c @@ -7,7 +7,7 @@ os_protect_pages */ -#ifdef _WIN32 +#if defined(_WIN32) || defined(__CYGWIN32__) /* VirtualProtect can be used only on pages allocated at the same time, so we can't collapse ranges. */ diff --git a/racket/src/racket/gc2/sighand.c b/racket/src/racket/gc2/sighand.c index dff2fd510f..6c46acda45 100644 --- a/racket/src/racket/gc2/sighand.c +++ b/racket/src/racket/gc2/sighand.c @@ -162,7 +162,10 @@ void fault_handler(int sn, struct siginfo *si, void *ctx) #endif /* ========== Windows signal handler ========== */ -#if defined(_WIN32) +#if defined(_WIN32) || defined(__CYGWIN32__) +# if defined(__CYGWIN32__) +# include +# endif LONG WINAPI fault_handler(LPEXCEPTION_POINTERS e) { if ((e->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) diff --git a/racket/src/racket/gc2/vm.c b/racket/src/racket/gc2/vm.c index 84d46bf10f..55d36b3e90 100644 --- a/racket/src/racket/gc2/vm.c +++ b/racket/src/racket/gc2/vm.c @@ -16,8 +16,18 @@ enum { MMU_WRITABLE = 1, }; -#if (defined(MZ_USE_PLACES) && !defined(_WIN32)) || defined(PREFER_MMAP_LARGE_BLOCKS) +#if defined(_WIN32) || defined(__CYGWIN32__) +/* No block cache or alloc cache */ +#elif defined(OSKIT) +# define OS_ALLOCATOR_NEEDS_ALIGNMENT +#elif defined(MZ_USE_PLACES) && defined(PREFER_MMAP_LARGE_BLOCKS) # define USE_BLOCK_CACHE +#else +# define USE_ALLOC_CACHE +#endif + +#ifdef USE_BLOCK_CACHE +# define USE_ALLOC_CACHE #endif struct AllocCacheBlock; @@ -25,7 +35,7 @@ struct BlockCache; typedef struct MMU { #ifdef USE_BLOCK_CACHE struct BlockCache *block_cache; -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) struct AllocCacheBlock *alloc_caches[2]; Page_Range *page_range; #endif @@ -34,16 +44,13 @@ typedef struct MMU { NewGC *gc; } MMU; -#if !( defined(_WIN32) || defined(OSKIT) ) +#ifdef OS_ALLOCATOR_NEEDS_ALIGNMENT +static void *os_alloc_aligned_pages(size_t len, size_t alignment, int dirty_ok) +#else static void *os_alloc_pages(size_t len); +#endif static void os_free_pages(void *p, size_t len); static void os_protect_pages(void *p, size_t len, int writable); -#else -static void *os_alloc_pages(MMU *mmu, size_t len, size_t alignment, int dirty); -static void os_free_pages(MMU *mmu, void *p, size_t len); -static void os_protect_pages(void *p, size_t len, int writable); -static void os_flush_freed_pages(MMU *mmu); -#endif /* provides */ static inline size_t mmu_get_os_page_size(MMU *mmu) { return mmu->os_pagesize; } @@ -77,32 +84,29 @@ static inline void mmu_assert_os_page_aligned(MMU *mmu, size_t p) { } #ifdef USE_BLOCK_CACHE -#include "block_cache.c" -#include "alloc_cache.c" -#include "page_range.c" -#include -#elif !( defined(_WIN32) || defined(OSKIT) ) -#include "alloc_cache.c" -#include "page_range.c" -#include +# include "block_cache.c" +#endif +#ifdef USE_ALLOC_CACHE +# include "alloc_cache.c" +# include "page_range.c" +# include #endif - static MMU *mmu_create(NewGC *gc) { MMU *mmu = ofm_malloc_zero(sizeof(MMU)); mmu->gc = gc; -#if !( defined(_WIN32) || defined(OSKIT) ) -#ifdef USE_BLOCK_CACHE +#ifdef USE_ALLOC_CACHE +# ifdef USE_BLOCK_CACHE mmu->block_cache = block_cache_create(mmu); -#else +# else /* initialization of page_range */ mmu->page_range = page_range_create(); /* initialization of alloc_cache */ mmu->alloc_caches[0] = alloc_cache_create(); mmu->alloc_caches[1] = alloc_cache_create(); -#endif +# endif mmu->os_pagesize = getpagesize(); #else @@ -116,7 +120,7 @@ static void mmu_free(MMU *mmu) { /* printf("MMU ALLOCATED PRE %li\n", mmu->memory_allocated); */ #ifdef USE_BLOCK_CACHE mmu->memory_allocated += block_cache_free(mmu->block_cache); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) page_range_free(mmu->page_range); mmu->memory_allocated += alloc_cache_free(mmu->alloc_caches[0]); mmu->memory_allocated += alloc_cache_free(mmu->alloc_caches[1]); @@ -129,7 +133,7 @@ static void *mmu_alloc_page(MMU* mmu, size_t len, size_t alignment, int dirty, i mmu_assert_os_page_aligned(mmu, len); #ifdef USE_BLOCK_CACHE return block_cache_alloc_page(mmu->block_cache, len, alignment, dirty, type, expect_mprotect, src_block, &mmu->memory_allocated); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) /* len = mmu_round_up_to_os_page_size(mmu, len); */ { AllocCacheBlock *alloc_cache = mmu->alloc_caches[!!expect_mprotect]; @@ -137,7 +141,11 @@ static void *mmu_alloc_page(MMU* mmu, size_t len, size_t alignment, int dirty, i } #else mmu->memory_allocated += len; - return os_alloc_pages(mmu, len, alignment, dirty); +# ifdef OS_ALLOCATOR_NEEDS_ALIGNMENT + return os_alloc_aligned_pages(len, alignment, dirty); +#else + return os_alloc_pages(len); +# endif #endif } @@ -148,7 +156,7 @@ static void mmu_free_page(MMU* mmu, void *p, size_t len, int type, int expect_mp #ifdef USE_BLOCK_CACHE mmu->memory_allocated += block_cache_free_page(mmu->block_cache, p, len, type, expect_mprotect, src_block, originated_here); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) /* len = mmu_round_up_to_os_page_size(mmu, len); */ { AllocCacheBlock *alloc_cache = mmu->alloc_caches[!!expect_mprotect]; @@ -156,18 +164,16 @@ static void mmu_free_page(MMU* mmu, void *p, size_t len, int type, int expect_mp } #else if (originated_here) mmu->memory_allocated -= len; - os_free_pages(mmu, p, len); + os_free_pages(p, len); #endif } static void mmu_flush_freed_pages(MMU *mmu) { #ifdef USE_BLOCK_CACHE mmu->memory_allocated += block_cache_flush_freed_pages(mmu->block_cache); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) mmu->memory_allocated += alloc_cache_flush_freed_pages(mmu->alloc_caches[0]); mmu->memory_allocated += alloc_cache_flush_freed_pages(mmu->alloc_caches[1]); -#elif defined(_WIN32) - os_flush_freed_pages(mmu); #endif } @@ -195,7 +201,7 @@ static void mmu_queue_protect_range(MMU *mmu, void *p, size_t len, int type, int mmu_assert_os_page_aligned(mmu, len); #ifdef USE_BLOCK_CACHE block_cache_queue_protect_range(mmu->block_cache, p, len, type, writeable, src_block); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) page_range_add(mmu->page_range, p, len, writeable); #else os_protect_pages(p, len, writeable); @@ -213,7 +219,7 @@ static void mmu_queue_write_unprotect_range(MMU *mmu, void *p, size_t len, int t static void mmu_flush_write_protect_ranges(MMU *mmu) { #ifdef USE_BLOCK_CACHE block_cache_flush_protect_ranges(mmu->block_cache, MMU_WRITE_PROTECTED); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) page_range_flush(mmu->page_range, MMU_WRITE_PROTECTED); #endif } @@ -221,7 +227,7 @@ static void mmu_flush_write_protect_ranges(MMU *mmu) { static void mmu_flush_write_unprotect_ranges(MMU *mmu) { #ifdef USE_BLOCK_CACHE block_cache_flush_protect_ranges(mmu->block_cache, MMU_WRITABLE); -#elif !( defined(_WIN32) || defined(OSKIT) ) +#elif defined(USE_ALLOC_CACHE) page_range_flush(mmu->page_range, MMU_WRITABLE); #endif } diff --git a/racket/src/racket/gc2/vm_osk.c b/racket/src/racket/gc2/vm_osk.c index e05cf81b85..2bf9476d56 100644 --- a/racket/src/racket/gc2/vm_osk.c +++ b/racket/src/racket/gc2/vm_osk.c @@ -9,14 +9,14 @@ #include -inline static void *os_malloc_pages(MMU *mmu, size_t len, size_t alignment, int dirty_ok) +inline static void *os_alloc_aligned_pages(size_t len, size_t alignment, int dirty_ok) { void *p; p = smemalign(alignment, len); if (!dirty_ok) - memset(p, 0, len); + memset(p, 0, len); return p; } diff --git a/racket/src/racket/gc2/vm_win.c b/racket/src/racket/gc2/vm_win.c index 778f2ffe12..dbef62f0a4 100644 --- a/racket/src/racket/gc2/vm_win.c +++ b/racket/src/racket/gc2/vm_win.c @@ -7,91 +7,19 @@ DONT_NEED_MAX_HEAP_SIZE --- to disable a provide */ -/* Cache doesn't seem to help in Windows: */ -#define CACHE_SLOTS 0 - -#if CACHE_SLOTS -typedef struct { - size_t len; - void *page; -} alloc_cache_entry; - -/* First dimension is age: */ -static alloc_cache_entry cache[2][CACHE_SLOTS]; -#endif - -static void *os_alloc_pages(MMU *mmu, size_t len, size_t alignment, int dirty_ok) +static void *os_alloc_pages(size_t len) { -#if CACHE_SLOTS - { - int i, j; - - for (j = 0; j < 2; j++) { - for (i = 0; i < CACHE_SLOTS; i++) { - if (cache[j][i].len == len) { - if (cache[j][i].page) { - void *result = cache[j][i].page; - cache[j][i].page = *(void **)result; - memset(result, 0, len); - return result; - } - break; - } - } - } - } -#endif - /* VirtualAlloc MEM_COMMIT always zeros memory */ return (void *)VirtualAlloc(NULL, len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); } -static void os_free_pages(MMU *mmu, void *p, size_t len) +static void os_free_pages(void *p, size_t len) { - -#if CACHE_SLOTS - { - int i; - - for (i = 0; i < CACHE_SLOTS; i++) { - if (!cache[0][i].len) - cache[0][i].len = len; - if (cache[0][i].len == len) { - *(void **)p = cache[0][i].page; - cache[0][i].page = p; - return; - } - } - } -#endif - VirtualFree(p, 0, MEM_RELEASE); } -static void os_flush_freed_pages(MMU *mmu) -{ -#if CACHE_SLOTS - int i; - void *p, *next; - - for (i = 0; i < CACHE_SLOTS; i++) { - if (cache[1][i].len) { - for (p = cache[1][i].page; p; p = next) { - next = *(void **)p; - mmu_memory_allocated_dec(mmu, cache[i].len); - VirtualFree(p, 0, MEM_RELEASE); - } - } - cache[1][i].len = cache[0][i].len; - cache[1][i].page = cache[0][i].page; - cache[0][i].len = 0; - cache[0][i].page = NULL; - } -#endif -} - static void os_protect_pages(void *p, size_t len, int writeable) { DWORD old; diff --git a/racket/src/racket/gc2/xform-mod.rkt b/racket/src/racket/gc2/xform-mod.rkt index 310451f383..1aa2691128 100644 --- a/racket/src/racket/gc2/xform-mod.rkt +++ b/racket/src/racket/gc2/xform-mod.rkt @@ -65,7 +65,7 @@ (call-with-output-file fn (lambda (out) (fprintf out "#define ~a ~a\n" (cadr m) (caddr m))) - 'truncate/replace) + #:exists 'truncate/replace) (set! cpp (string-append cpp (format " -include ~a" fn)))] [else (set! cpp (string-append cpp " -D" diff --git a/racket/src/racket/include/mzwin.def b/racket/src/racket/include/mzwin.def index 793ff308dd..da4a740a0f 100644 --- a/racket/src/racket/include/mzwin.def +++ b/racket/src/racket/include/mzwin.def @@ -96,9 +96,6 @@ EXPORTS scheme_set_can_break scheme_push_break_enable scheme_pop_break_enable - scheme_with_stack_freeze - scheme_frozen_run_some - scheme_is_in_frozen_stack scheme_abort_continuation_no_dws scheme_call_with_composable_no_dws scheme_set_on_atomic_timeout diff --git a/racket/src/racket/include/mzwin3m.def b/racket/src/racket/include/mzwin3m.def index eec3094382..7f679de91d 100644 --- a/racket/src/racket/include/mzwin3m.def +++ b/racket/src/racket/include/mzwin3m.def @@ -96,9 +96,6 @@ EXPORTS scheme_set_can_break scheme_push_break_enable scheme_pop_break_enable - scheme_with_stack_freeze - scheme_frozen_run_some - scheme_is_in_frozen_stack scheme_abort_continuation_no_dws scheme_call_with_composable_no_dws scheme_set_on_atomic_timeout diff --git a/racket/src/racket/include/racket.exp b/racket/src/racket/include/racket.exp index 737fc804b0..88d46c806f 100644 --- a/racket/src/racket/include/racket.exp +++ b/racket/src/racket/include/racket.exp @@ -93,9 +93,6 @@ scheme_pop_kill_action scheme_set_can_break scheme_push_break_enable scheme_pop_break_enable -scheme_with_stack_freeze -scheme_frozen_run_some -scheme_is_in_frozen_stack scheme_abort_continuation_no_dws scheme_call_with_composable_no_dws scheme_set_on_atomic_timeout diff --git a/racket/src/racket/include/racket3m.exp b/racket/src/racket/include/racket3m.exp index 1905f9ad9f..79f600736c 100644 --- a/racket/src/racket/include/racket3m.exp +++ b/racket/src/racket/include/racket3m.exp @@ -93,9 +93,6 @@ scheme_pop_kill_action scheme_set_can_break scheme_push_break_enable scheme_pop_break_enable -scheme_with_stack_freeze -scheme_frozen_run_some -scheme_is_in_frozen_stack scheme_abort_continuation_no_dws scheme_call_with_composable_no_dws scheme_set_on_atomic_timeout diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index 3bf595de04..6de06b078e 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -2128,8 +2128,8 @@ extern Scheme_Extension_Table *scheme_extension_table; # define MZ_FD_CLR(n, p) scheme_fdclr(p, n) # define MZ_FD_ISSET(n, p) scheme_fdisset(p, n) #else -# define MZ_GET_FDSET(p, n) ((void *)(((fd_set *)p) + n)) -# define MZ_FD_ZERO(p) FD_ZERO((fd_set *)(p)) +# define MZ_GET_FDSET(p, n) ((void *)(((fd_set *)p) XFORM_OK_PLUS n)) +# define MZ_FD_ZERO(p) XFORM_HIDE_EXPR(FD_ZERO((fd_set *)(p))) # define MZ_FD_SET(n, p) FD_SET(n, (fd_set *)(p)) # define MZ_FD_CLR(n, p) FD_CLR(n, (fd_set *)(p)) # define MZ_FD_ISSET(n, p) FD_ISSET(n, (fd_set *)(p)) diff --git a/racket/src/racket/include/schthread.h b/racket/src/racket/include/schthread.h index 54f1cdc1af..a8df7b7f10 100644 --- a/racket/src/racket/include/schthread.h +++ b/racket/src/racket/include/schthread.h @@ -49,7 +49,7 @@ extern "C" { #endif /* Set up MZ_EXTERN for DLL build */ -#if (defined(__WIN32__) || defined(WIN32) || defined(_WIN32)) \ +#if (defined(__WIN32__) || defined(WIN32) || defined(_WIN32) || defined(__CYGWIN32__)) \ && !defined(LINK_EXTENSIONS_BY_TABLE) \ && !defined(SCHEME_EMBEDDED_NO_DLL) # define MZ_DLLIMPORT __declspec(dllimport) @@ -59,10 +59,16 @@ extern "C" { # else # define MZ_DLLSPEC __declspec(dllimport) # endif +# if (defined(__CYGWIN32__) && !defined(MZ_USES_SHARED_LIB)) || defined(MZ_PRECISE_GC) +# define MZGC_DLLIMPORT +# else +# define MZGC_DLLIMPORT MZ_DLLIMPORT +# endif #else # define MZ_DLLSPEC # define MZ_DLLIMPORT # define MZ_DLLEXPORT +# define MZGC_DLLIMPORT #endif #define MZ_EXTERN extern MZ_DLLSPEC diff --git a/racket/src/racket/main.c b/racket/src/racket/main.c index bf75f44f31..9330e204d3 100644 --- a/racket/src/racket/main.c +++ b/racket/src/racket/main.c @@ -31,7 +31,9 @@ (except for the garbage collector, which is in `gc', `sgc', or `gc2', depending on which one you're using). */ -#define __MINGW32_DELAY_LOAD__ 1 +#ifdef __MINGW32__ +# define __MINGW32_DELAY_LOAD__ 1 +#endif #include "scheme.h" /*========================================================================*/ diff --git a/racket/src/racket/sconfig.h b/racket/src/racket/sconfig.h index 0aa3fff6bf..fdab893c98 100644 --- a/racket/src/racket/sconfig.h +++ b/racket/src/racket/sconfig.h @@ -589,9 +589,6 @@ # define DO_STACK_CHECK # define WINDOWS_FIND_STACK_BOUNDS -/* Default stack size is 1MB, but we try to read - the actual size from the executable on startup: */ -# define WINDOWS_DEFAULT_STACK_SIZE 1048576 # if !defined(_WIN64) || (_MSC_VER >= 1600) # define USE_MZ_SETJMP @@ -731,10 +728,6 @@ # define REGISTER_POOR_MACHINE -# ifndef AS_MSVC_EXTENSION -# define LINK_EXTENSIONS_BY_TABLE -# endif - # define MZ_USE_JIT_I386 # define FLAGS_ALREADY_SET diff --git a/racket/src/racket/sgc/Makefile.in b/racket/src/racket/sgc/Makefile.in index dd1e45fad6..969c8229fa 100644 --- a/racket/src/racket/sgc/Makefile.in +++ b/racket/src/racket/sgc/Makefile.in @@ -7,6 +7,10 @@ prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ +# for version.mak: +mainsrcdir = @srcdir@/../.. +@INCLUDEDEP@ @srcdir@/../version.mak + CC = @CC@ CXX = @CXX@ RANLIB = @RANLIB@ @@ -32,7 +36,7 @@ test: $(OBJS) test.@LTO@ gcobjects: $(OBJS) sgc.@LTO@: $(srcdir)/sgc.c $(srcdir)/autostat.inc $(srcdir)/collect.inc $(srcdir)/../utils/splay.c - $(CC) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ -I.. -c $(srcdir)/sgc.c -o sgc.@LTO@ + $(CC) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ -DSGC_EXPORTS -I.. -c $(srcdir)/sgc.c -o sgc.@LTO@ test.@LTO@: $(srcdir)/test.c $(CC) $(CFLAGS) $(CPPFLAGS) @OPTIONS@ -c $(srcdir)/test.c -o test.@LTO@ diff --git a/racket/src/racket/sgc/sgc.h b/racket/src/racket/sgc/sgc.h index 0dae616728..64c65d6a4a 100644 --- a/racket/src/racket/sgc/sgc.h +++ b/racket/src/racket/sgc/sgc.h @@ -7,8 +7,8 @@ extern "C" { #define GC_PTR void* -#ifdef WIN32 -# ifdef SGC_EXPORTS +#if defined(WIN32) || defined(__CYGWIN32__) +# if defined(SGC_EXPORTS) || (defined(__CYGWIN32__) && !defined(MZ_USES_SHARED_LIB)) # define SGC_EXTERN __declspec(dllexport) # else # define SGC_EXTERN __declspec(dllimport) diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index bf698d4783..d7bb626f9d 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -543,6 +543,7 @@ static uintptr_t adjust_stack_base(uintptr_t bnd) { #ifdef WINDOWS_FIND_STACK_BOUNDS intptr_t find_exe_stack_size() { +# define WINDOWS_DEFAULT_STACK_SIZE 1048576 intptr_t sz = WINDOWS_DEFAULT_STACK_SIZE; wchar_t *fn; DWORD len = 1024; @@ -580,7 +581,6 @@ intptr_t find_exe_stack_size() /* Skip to PE32[+] header's stack reservation value: */ if (SetFilePointer(fd, pos + 20 + 4 + 72, NULL, FILE_BEGIN) != INVALID_SET_FILE_POINTER) { - mzlonglong lsz; if (kind == 0x10b) { /* PE32: 32-bit stack size: */ int ssz; diff --git a/racket/src/racket/src/list.c b/racket/src/racket/src/list.c index 9edce7da65..4018d18b62 100644 --- a/racket/src/racket/src/list.c +++ b/racket/src/racket/src/list.c @@ -3494,13 +3494,13 @@ extern void *GC_base(void *d); # define GC_did_mark_stack_overflow() 0 # define GC_mark_overflow_recover(ptr) /**/ #else -extern MZ_DLLIMPORT void *GC_base(void *); -extern MZ_DLLIMPORT int GC_is_marked(void *); -extern MZ_DLLIMPORT int GC_did_mark_stack_overflow(void); -extern MZ_DLLIMPORT void GC_mark_overflow_recover(void *p); +extern MZGC_DLLIMPORT void *GC_base(void *); +extern MZGC_DLLIMPORT int GC_is_marked(void *); +extern MZGC_DLLIMPORT int GC_did_mark_stack_overflow(void); +extern MZGC_DLLIMPORT void GC_mark_overflow_recover(void *p); #endif -extern MZ_DLLIMPORT void GC_push_all_stack(void *, void *); -extern MZ_DLLIMPORT void GC_flush_mark_stack(void); +extern MZGC_DLLIMPORT void GC_push_all_stack(void *, void *); +extern MZGC_DLLIMPORT void GC_flush_mark_stack(void); #endif @@ -3674,7 +3674,7 @@ void scheme_clear_ephemerons() done_ephemerons = NULL; } -extern MZ_DLLIMPORT void (*GC_custom_finalize)(); +extern MZGC_DLLIMPORT void (*GC_custom_finalize)(); void scheme_init_ephemerons(void) { diff --git a/racket/src/racket/src/port.c b/racket/src/racket/src/port.c index 4229ef703e..7f357783f3 100644 --- a/racket/src/racket/src/port.c +++ b/racket/src/racket/src/port.c @@ -1212,7 +1212,7 @@ void scheme_fdzero(void *fd) scheme_init_fdset_array(fd, 1); # else # if defined(FILES_HAVE_FDS) || defined(USE_TCP) - FD_ZERO((fd_set *)fd); + XFORM_HIDE_EXPR(FD_ZERO((fd_set *)fd)); # endif # endif } diff --git a/racket/src/racket/src/salloc.c b/racket/src/racket/src/salloc.c index 8e0fd64d1f..804639ca1d 100644 --- a/racket/src/racket/src/salloc.c +++ b/racket/src/racket/src/salloc.c @@ -91,8 +91,8 @@ void **GC_variable_stack; #endif #ifndef MZ_PRECISE_GC -extern MZ_DLLIMPORT void GC_register_late_disappearing_link(void **link, void *obj); -extern MZ_DLLIMPORT void GC_register_indirect_disappearing_link(void **link, void *obj); +extern MZGC_DLLIMPORT void GC_register_late_disappearing_link(void **link, void *obj); +extern MZGC_DLLIMPORT void GC_register_indirect_disappearing_link(void **link, void *obj); #endif SHARED_OK static int use_registered_statics; @@ -102,7 +102,7 @@ SHARED_OK static int use_registered_statics; /************************************************************************/ #if !defined(MZ_PRECISE_GC) && !defined(USE_SENORA_GC) -extern MZ_DLLIMPORT void GC_init(); +extern MZGC_DLLIMPORT void GC_init(); #endif void scheme_set_stack_base(void *base, int no_auto_statics) XFORM_SKIP_PROC @@ -1688,7 +1688,7 @@ void scheme_unused_intptr(intptr_t i) { } extern "C" { # endif - extern MZ_DLLIMPORT void GC_dump(void); + extern MZGC_DLLIMPORT void GC_dump(void); # ifdef __cplusplus }; # endif diff --git a/racket/src/racket/src/schemef.h b/racket/src/racket/src/schemef.h index 0a5e3ed026..75a03665ca 100644 --- a/racket/src/racket/src/schemef.h +++ b/racket/src/racket/src/schemef.h @@ -201,12 +201,8 @@ MZ_EXTERN void scheme_set_can_break(int on); MZ_EXTERN void scheme_push_break_enable(Scheme_Cont_Frame_Data *cframe, int on, int pre_check); MZ_EXTERN void scheme_pop_break_enable(Scheme_Cont_Frame_Data *cframe, int post_check); -MZ_EXTERN int scheme_with_stack_freeze(Scheme_Frozen_Stack_Proc wha_f, void *wha_data); -MZ_EXTERN int scheme_frozen_run_some(Scheme_Frozen_Stack_Proc do_f, void *do_data, int run_msecs); -MZ_EXTERN int scheme_is_in_frozen_stack(); - -MZ_EXTERN Scheme_Object *scheme_abort_continuation_no_dws (Scheme_Object *pt, Scheme_Object *v); -MZ_EXTERN Scheme_Object *scheme_call_with_composable_no_dws (Scheme_Object *proc, Scheme_Object *pt); +MZ_EXTERN Scheme_Object *scheme_abort_continuation_no_dws(Scheme_Object *pt, Scheme_Object *v); +MZ_EXTERN Scheme_Object *scheme_call_with_composable_no_dws(Scheme_Object *proc, Scheme_Object *pt); MZ_EXTERN Scheme_On_Atomic_Timeout_Proc scheme_set_on_atomic_timeout(Scheme_On_Atomic_Timeout_Proc p); @@ -1229,5 +1225,5 @@ MZ_EXTERN void *scheme_register_process_global(const char *key, void *val); MZ_EXTERN Scheme_Object *scheme_malloc_key(void); MZ_EXTERN void scheme_free_key(Scheme_Object *k); -MZ_EXTERN void* scheme_jit_find_code_end(void *p); +MZ_EXTERN void *scheme_jit_find_code_end(void *p); MZ_EXTERN void scheme_jit_now(Scheme_Object *f); diff --git a/racket/src/racket/src/schemex.h b/racket/src/racket/src/schemex.h index e82bd9189a..97dcfd9b4e 100644 --- a/racket/src/racket/src/schemex.h +++ b/racket/src/racket/src/schemex.h @@ -145,11 +145,8 @@ void (*scheme_pop_kill_action)(); void (*scheme_set_can_break)(int on); void (*scheme_push_break_enable)(Scheme_Cont_Frame_Data *cframe, int on, int pre_check); void (*scheme_pop_break_enable)(Scheme_Cont_Frame_Data *cframe, int post_check); -int (*scheme_with_stack_freeze)(Scheme_Frozen_Stack_Proc wha_f, void *wha_data); -int (*scheme_frozen_run_some)(Scheme_Frozen_Stack_Proc do_f, void *do_data, int run_msecs); -int (*scheme_is_in_frozen_stack)(); -Scheme_Object *scheme_abort_continuation_no_dws; -Scheme_Object *scheme_call_with_composable_no_dws; +Scheme_Object *(*scheme_abort_continuation_no_dws)(Scheme_Object *pt, Scheme_Object *v); +Scheme_Object *(*scheme_call_with_composable_no_dws)(Scheme_Object *proc, Scheme_Object *pt); Scheme_On_Atomic_Timeout_Proc (*scheme_set_on_atomic_timeout)(Scheme_On_Atomic_Timeout_Proc p); /*========================================================================*/ /* error handling */ @@ -1001,7 +998,7 @@ Scheme_Hash_Table *(*scheme_get_place_table)(void); void *(*scheme_register_process_global)(const char *key, void *val); Scheme_Object *(*scheme_malloc_key)(void); void (*scheme_free_key)(Scheme_Object *k); - (*scheme_jit_find_code_end)(void *p); +void *(*scheme_jit_find_code_end)(void *p); void (*scheme_jit_now)(Scheme_Object *f); #ifndef SCHEME_EX_INLINE } Scheme_Extension_Table; diff --git a/racket/src/racket/src/schemex.inc b/racket/src/racket/src/schemex.inc index 8f4850d639..3ef9946405 100644 --- a/racket/src/racket/src/schemex.inc +++ b/racket/src/racket/src/schemex.inc @@ -102,9 +102,6 @@ scheme_extension_table->scheme_set_can_break = scheme_set_can_break; scheme_extension_table->scheme_push_break_enable = scheme_push_break_enable; scheme_extension_table->scheme_pop_break_enable = scheme_pop_break_enable; - scheme_extension_table->scheme_with_stack_freeze = scheme_with_stack_freeze; - scheme_extension_table->scheme_frozen_run_some = scheme_frozen_run_some; - scheme_extension_table->scheme_is_in_frozen_stack = scheme_is_in_frozen_stack; scheme_extension_table->scheme_abort_continuation_no_dws = scheme_abort_continuation_no_dws; scheme_extension_table->scheme_call_with_composable_no_dws = scheme_call_with_composable_no_dws; scheme_extension_table->scheme_set_on_atomic_timeout = scheme_set_on_atomic_timeout; diff --git a/racket/src/racket/src/schemexm.h b/racket/src/racket/src/schemexm.h index 362c47c556..aaf2ede556 100644 --- a/racket/src/racket/src/schemexm.h +++ b/racket/src/racket/src/schemexm.h @@ -102,9 +102,6 @@ #define scheme_set_can_break (scheme_extension_table->scheme_set_can_break) #define scheme_push_break_enable (scheme_extension_table->scheme_push_break_enable) #define scheme_pop_break_enable (scheme_extension_table->scheme_pop_break_enable) -#define scheme_with_stack_freeze (scheme_extension_table->scheme_with_stack_freeze) -#define scheme_frozen_run_some (scheme_extension_table->scheme_frozen_run_some) -#define scheme_is_in_frozen_stack (scheme_extension_table->scheme_is_in_frozen_stack) #define scheme_abort_continuation_no_dws (scheme_extension_table->scheme_abort_continuation_no_dws) #define scheme_call_with_composable_no_dws (scheme_extension_table->scheme_call_with_composable_no_dws) #define scheme_set_on_atomic_timeout (scheme_extension_table->scheme_set_on_atomic_timeout) diff --git a/racket/src/racket/src/setjmpup.c b/racket/src/racket/src/setjmpup.c index 7f59fe0089..e5e29aa4c6 100644 --- a/racket/src/racket/src/setjmpup.c +++ b/racket/src/racket/src/setjmpup.c @@ -47,10 +47,10 @@ HOOK_SHARED_OK void (*scheme_set_external_stack_val)(void *); stack copy to account for pointers to the interior of collectable objects. */ -extern MZ_DLLIMPORT void GC_push_all_stack(void *, void *); -extern MZ_DLLIMPORT void GC_flush_mark_stack(void); -extern MZ_DLLIMPORT void (*GC_push_last_roots)(void); -extern MZ_DLLIMPORT void (*GC_push_last_roots_again)(void); +extern MZGC_DLLIMPORT void GC_push_all_stack(void *, void *); +extern MZGC_DLLIMPORT void GC_flush_mark_stack(void); +extern MZGC_DLLIMPORT void (*GC_push_last_roots)(void); +extern MZGC_DLLIMPORT void (*GC_push_last_roots_again)(void); /* GC_push_last_roots_again is called after marking eager finalizations (once at each stage). We rely on the fact that no copied stack will be referenced by (or affected the ordering of) @@ -60,8 +60,8 @@ extern MZ_DLLIMPORT void (*GC_push_last_roots_again)(void); # define GC_is_marked(p) GC_base(p) # define GC_did_mark_stack_overflow() 0 #else -extern MZ_DLLIMPORT int GC_is_marked(void *); -extern MZ_DLLIMPORT int GC_did_mark_stack_overflow(void); +extern MZGC_DLLIMPORT int GC_is_marked(void *); +extern MZGC_DLLIMPORT int GC_did_mark_stack_overflow(void); #endif #define get_copy(s_c) (((CopiedStack *)s_c)->_stack_copy) @@ -673,12 +673,13 @@ void scheme_reset_jmpup_buf(Scheme_Jumpup_Buf *b) is fragile, because it's not well defined whether the compiler will generate frame-pointer setup; use mzsj86g.S, instead. */ -#ifdef __MINGW32__ -# if __OPTIMIZE__ > 0 -# define NEED_STACK_FRAME_SETUP -# endif +#if (__OPTIMIZE__ > 0) || defined(MZ_XFORM) +# define NEED_STACK_FRAME_SETUP #endif +MZ_DO_NOT_INLINE(int scheme_mz_setjmp(mz_pre_jmp_buf b)); +MZ_DO_NOT_INLINE(void scheme_mz_longjmp(mz_pre_jmp_buf b, int v)); + int scheme_mz_setjmp(mz_pre_jmp_buf b) { #ifdef NEED_STACK_FRAME_SETUP diff --git a/racket/src/racket/src/symbol.c b/racket/src/racket/src/symbol.c index 9068fdd366..d53b927fdd 100644 --- a/racket/src/racket/src/symbol.c +++ b/racket/src/racket/src/symbol.c @@ -41,7 +41,7 @@ #endif #ifndef MZ_PRECISE_GC -extern MZ_DLLIMPORT void (*GC_custom_finalize)(void); +extern MZGC_DLLIMPORT void (*GC_custom_finalize)(void); #endif #ifndef USE_SENORA_GC extern int GC_is_marked(void *);