diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2016-01-30 14:20:57 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-01-30 15:26:07 -0800 |
commit | e1a9f2099c2e683dffc4b898ce85ce935c4cb254 (patch) | |
tree | 14f8b080fb8515b81111dc269e37aa01f73b16fc /src/sheap.c | |
parent | 874c59a81b7ee12a739149c5229e6d3bbd463324 (diff) | |
download | emacs-e1a9f2099c2e683dffc4b898ce85ce935c4cb254.tar.gz |
Pacify --enable-gcc-warnings when HYBRID_MALLOC
* src/buffer.c (init_buffer):
* src/emacs.c (main):
* src/xsmfns.c (smc_save_yourself_CB, x_session_initialize):
Use emacs_get_current_dir_name, not get_current_dir_name.
* src/conf_post.h (aligned_alloc) [HYBRID_MALLOC && emacs]: New macro.
(HYBRID_GET_CURRENT_DIR_NAME, get_current_dir_name): Remove.
* src/emacs.c: Include "sheap.h".
(report_sheap_usage): Remove decl.
(Fdump_emacs) [HYBRID_MALLOC]: Report usage directly.
Don't assume ptrdiff_t can be printed as int.
* src/gmalloc.c [HYBRID_MALLOC]:
Include "sheap.h" rather than declaring its contents by hand.
(get_current_dir_name, gget_current_dir_name)
(hybrid_get_current_dir_name): Remove.
(emacs_abort): Remove duplicate decl.
(aligned_alloc): Undef, like malloc etc.
(ALLOCATED_BEFORE_DUMPING): Now a static function, not a macro.
Make it a bit more efficient.
(malloc_find_object_address): Remove unused decl.
(enum mcheck_status, mcheck, mprobe, mtrace, muntrace, struct mstats)
(mstats, memory_warnings): Declare only if GC_MCHECK.
* src/lisp.h (emacs_get_current_dir_name):
New decl, replacing get_current_dir_name.
* src/sheap.c: Include sheap.h first.
(STATIC_HEAP_SIZE): Remove; now in sheap.h.
(debug_sheap): Now static.
(bss_sbrk_buffer_end): Remove; no longer used.
(bss_sbrk_ptr): Now static and private.
(bss_sbrk_did_unexec): Now bool.
(BLOCKSIZE): Remove, to avoid GCC warning about its not being used.
(bss_sbrk): Don't treat request_size 0 as special, since the code
works without this being a special case.
Avoid overflow if request size exceeds INT_MAX.
(report_sheap_usage): Remove; now done in emacs.c.
* src/sheap.h: New file.
* src/sysdep.c (get_current_dir_name): Remove macro.
Include "sheap.h".
(emacs_get_current_dir_name): Rename function from
get_current_dir_name. Handle HYBRID_MALLOC here;
this is simpler.
(Bug#22086)
Diffstat (limited to 'src/sheap.c')
-rw-r--r-- | src/sheap.c | 83 |
1 files changed, 29 insertions, 54 deletions
diff --git a/src/sheap.c b/src/sheap.c index 1451eca8ce7..fe905ca0c02 100644 --- a/src/sheap.c +++ b/src/sheap.c @@ -19,87 +19,62 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> + +#include "sheap.h" + #include <stdio.h> #include "lisp.h" #include <unistd.h> #include <stdlib.h> /* for exit */ -#ifdef ENABLE_CHECKING -#define STATIC_HEAP_SIZE (28 * 1024 * 1024) -#else -#define STATIC_HEAP_SIZE (19 * 1024 * 1024) -#endif - -int debug_sheap = 0; - -#define BLOCKSIZE 4096 +static int debug_sheap; char bss_sbrk_buffer[STATIC_HEAP_SIZE]; -/* The following is needed in gmalloc.c */ -void *bss_sbrk_buffer_end = bss_sbrk_buffer + STATIC_HEAP_SIZE; -char *bss_sbrk_ptr; char *max_bss_sbrk_ptr; -int bss_sbrk_did_unexec; +bool bss_sbrk_did_unexec; void * bss_sbrk (ptrdiff_t request_size) { + static char *bss_sbrk_ptr; + if (!bss_sbrk_ptr) { max_bss_sbrk_ptr = bss_sbrk_ptr = bss_sbrk_buffer; #ifdef CYGWIN - sbrk (BLOCKSIZE); /* force space for fork to work */ + /* Force space for fork to work. */ + sbrk (4096); #endif } - if (!(int) request_size) - { - return (bss_sbrk_ptr); - } - else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer) + int used = bss_sbrk_ptr - bss_sbrk_buffer; + + if (request_size < -used) { - printf - ("attempt to free too much: avail %d used %d failed request %d\n", - STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer, - (int) request_size); + printf (("attempt to free too much: " + "avail %d used %d failed request %"pD"d\n"), + STATIC_HEAP_SIZE, used, request_size); exit (-1); return 0; } - else if (bss_sbrk_ptr + (int) request_size > - bss_sbrk_buffer + STATIC_HEAP_SIZE) + else if (STATIC_HEAP_SIZE - used < request_size) { - printf ("static heap exhausted: avail %d used %d failed request %d\n", - STATIC_HEAP_SIZE, - bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size); + printf ("static heap exhausted: avail %d used %d failed request %"pD"d\n", + STATIC_HEAP_SIZE, used, request_size); exit (-1); return 0; } - else if ((int) request_size < 0) - { - bss_sbrk_ptr += (int) request_size; - if (debug_sheap) - printf ("freed size %d\n", request_size); - return bss_sbrk_ptr; - } - else + + void *ret = bss_sbrk_ptr; + bss_sbrk_ptr += request_size; + if (max_bss_sbrk_ptr < bss_sbrk_ptr) + max_bss_sbrk_ptr = bss_sbrk_ptr; + if (debug_sheap) { - char *ret = bss_sbrk_ptr; - 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; + if (request_size < 0) + printf ("freed size %"pD"d\n", request_size); + else + printf ("allocated %p size %"pD"d\n", ret, request_size); } -} - -void -report_sheap_usage (int die_if_pure_storage_exceeded) -{ - char buf[200]; - 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); + return ret; } |