From f747d82e08b4d1201fa08cfee090759f7a6ef5b1 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Sun, 18 Aug 2013 13:37:31 -0400 Subject: [PATCH] Change size of static heap on Cygwin; report maximum usage after dumping. * src/sheap.c (STATIC_HEAP_SIZE): Adjust to current needs; use bigger static heap if ENABLE_CHECKING is defined. (max_bss_sbrk_ptr): New variable. (bss_sbrk): Use it. (report_sheap_usage): Report maximum static heap usage instead of ending static heap usage. --- src/ChangeLog | 9 +++++++++ src/sheap.c | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7a875ae63bc..671f6afc722 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2013-08-18 Ken Brown + + * sheap.c (STATIC_HEAP_SIZE): Adjust to current needs; use bigger + static heap if ENABLE_CHECKING is defined. + (max_bss_sbrk_ptr): New variable. + (bss_sbrk): Use it. + (report_sheap_usage): Report maximum static heap usage instead of + ending static heap usage. + 2013-08-17 Eli Zaretskii * decompress.c (Fzlib_available_p) [WINDOWSNT]: Update the value diff --git a/src/sheap.c b/src/sheap.c index 54eef60c27d..daff0c1d700 100644 --- a/src/sheap.c +++ b/src/sheap.c @@ -26,10 +26,18 @@ along with GNU Emacs. If not, see . */ #include #ifdef __x86_64__ +#ifdef ENABLE_CHECKING +#define STATIC_HEAP_SIZE (28 * 1024 * 1024) +#else +#define STATIC_HEAP_SIZE (19 * 1024 * 1024) +#endif +#else /* x86 */ +#ifdef ENABLE_CHECKING #define STATIC_HEAP_SIZE (18 * 1024 * 1024) #else #define STATIC_HEAP_SIZE (13 * 1024 * 1024) #endif +#endif /* x86 */ int debug_sheap = 0; @@ -37,6 +45,7 @@ int debug_sheap = 0; char bss_sbrk_buffer[STATIC_HEAP_SIZE]; char *bss_sbrk_ptr; +char *max_bss_sbrk_ptr; int bss_sbrk_did_unexec; void * @@ -44,7 +53,7 @@ bss_sbrk (ptrdiff_t request_size) { if (!bss_sbrk_ptr) { - bss_sbrk_ptr = bss_sbrk_buffer; + max_bss_sbrk_ptr = bss_sbrk_ptr = bss_sbrk_buffer; #ifdef CYGWIN sbrk (BLOCKSIZE); /* force space for fork to work */ #endif @@ -85,6 +94,8 @@ bss_sbrk (ptrdiff_t request_size) if (debug_sheap) printf ("allocated 0x%08x size %d\n", ret, request_size); bss_sbrk_ptr += (int) request_size; + if (bss_sbrk_ptr > max_bss_sbrk_ptr) + max_bss_sbrk_ptr = bss_sbrk_ptr; return ret; } } @@ -93,8 +104,8 @@ void report_sheap_usage (int die_if_pure_storage_exceeded) { char buf[200]; - sprintf (buf, "Static heap usage: %d of %d bytes", - bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE); + sprintf (buf, "Maximum static heap usage: %d of %d bytes", + max_bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE); /* Don't log messages, cause at this point, we're not allowed to create buffers. */ message1_nolog (buf); -- 2.39.2