1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-10 13:40:36 -08:00
Commit graph

720 commits

Author SHA1 Message Date
Glenn Morris
01a6dcc883 lispref/internals.texi Memory Usage tiny change
* doc/lispref/internals.texi: (Memory Usage): Copyedit.

* src/alloc.c (misc-objects-consed): Doc fix.
2012-03-02 20:18:09 -08:00
Glenn Morris
999dd33306 lispref/internals.texi Pure Storage updates
* doc/lispref/internals.texi: (Pure Storage): Small changes.
* src/alloc.c (Fgarbage_collect): Doc fix.
2012-03-02 19:59:22 -08:00
Paul Eggert
a9a769fba6 * alloc.c (mark_memory): Conditionalize recent fix on USE_USB_TAG. 2012-02-25 17:09:59 -08:00
Paul Eggert
27f3c6378b Generalize fix for crash due to non-contiguous EMACS_INT (Bug#10780).
Suggested by Stefan Monnier in
<http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00692.html>.
* alloc.c (widen_to_Lisp_Object): New static function.
(mark_memory): Also mark Lisp_Objects by fetching pointer words
and widening them to Lisp_Objects.  This would work even if
USE_LSB_TAG is defined and wide integers are used, which might
happen in a future version of Emacs.
2012-02-25 11:39:42 -08:00
Glenn Morris
acaf905b11 Add 2012 to FSF copyright years for Emacs files 2012-01-05 01:46:05 -08:00
Paul Eggert
333f9019e2 Spelling fixes. 2011-12-11 21:32:49 -08:00
Paul Eggert
615a3b8d0d Merge from trunk. 2011-11-19 19:07:02 -08:00
Juanma Barranquero
c701515351 Fix typos. 2011-11-15 18:37:37 +01:00
Paul Eggert
91af3942e9 Spelling fixes. 2011-11-14 15:59:56 -08:00
Paul Eggert
6a0bf43d7c Standardize on VIRT_ADDR_VARIES behavior; otherwise, valgrind
does not work on some platforms.  Problem reported by Andreas Schwab in
<http://lists.gnu.org/archive/html/emacs-devel/2011-11/msg00081.html>.
* puresize.h (pure, PURE_P): Always behave as if VIRT_ADDR_VARIES
is set, removing the need for VIRT_ADDRESS_VARIES.
(PURE_P): Use a more-efficient implementation that needs just one
comparison, not two: on x86-64 with GCC 4.6.2, this cut down the
number of instructions from 6 (xorl, cmpq, jge, xorl, cmpq, setge)
to 4 (xorl, subq, cmpq, setbe).
* alloc.c (pure): Always extern now, since that's the
VIRT_ADDR_VARIES behavior.
(PURE_POINTER_P): Use a single comparison, not two, for
consistency with the new puresize.h.
* lisp.h (PNTR_COMPARISON_TYPE): Remove; no longer needed.
* m/ibms390.h, m/intel386.h, m/template.h, s/cygwin.h, s/hpux10-20.h:
Remove VIRT_ADDR_VARIES no longer needed.
2011-11-10 00:14:27 -08:00
Paul Eggert
ca78dc431f * alloc.c (DEADP): New macro, for porting to GNU/Hurd (Bug#9926).
This is also needed for porting to any host where GC_MARK_STACK is
not GC_MAKE_GCPROS_NOOPS.
(which_symbols): Use it.
2011-11-06 21:37:49 -08:00
Paul Eggert
196e41e4ae * alloc.c (which_symbols): Declare EXTERNALLY_VISIBLE,
so that this new function doesn't get optimized away by a
whole-program optimizer.  Make the 2nd arg EMACS_INT, not int.
2011-10-29 10:25:44 -07:00
Eli Zaretskii
8b058d4474 Fix the `xbytecode' user-defined command in .gdbinit.
src/.gdbinit (xprintbytestr): New command.
 (xwhichsymbols): Renamed from `which'; all callers changed.
 (xbytecode): Print the byte-code string as well.
 src/alloc.c (which_symbols): New function.
2011-10-29 15:35:23 +02:00
Dmitry Antipov
6e4b3fbe6d * alloc.c (Fgc_status): Do not access beyond zombies array
boundary if nzombies > MAX_ZOMBIES.
* alloc.c (dump_zombies): Add missing format specifier.
2011-10-11 23:09:40 -07:00
Paul Eggert
84e8e185cd * alloc.c: Add comment. 2011-10-07 09:42:32 -07:00
Paul Eggert
7c5ee88ecb Fix alignment-related core dump during GC.
* configure.in (GC_LISP_OBJECT_ALIGNMENT): Remove.
This is now done by src/alloc.c.
* src/alloc.c (GC_LISP_OBJECT_ALIGNMENT): Use offsetof, not __alignof__
or sizeof.  __alignof__ gives the wrong answer on Fedora x86-64
with GCC 4.6.1 when configured with CC='gcc -m32' --with-wide-int;
this makes Emacs dump core during garbage collection on rare
occasions.  sizeof is obviously inferior to offsetof here, so
stick with offsetof.
(GC_POINTER_ALIGNMENT): New macro.
(mark_memory): Omit 3rd (offset) arg; caller changed.
Don't assume EMACS_INT alignment is the same as pointer alignment.
2011-10-07 00:23:44 -07:00
Paul Eggert
f701dc2abb Remove dependency on glibc malloc internals.
* alloc.c (XMALLOC_OVERRUN_CHECK_OVERHEAD, XMALLOC_OVERRUN_CHECK_SIZE):
Move back here from lisp.h, but with their new implementations.
(XMALLOC_BASE_ALIGNMENT, COMMON_MULTIPLE, XMALLOC_HEADER_ALIGNMENT)
(XMALLOC_OVERRUN_SIZE_SIZE): Move these new lisp.h macros here.
* charset.c (charset_table_init): New static var.
(syms_of_charset): Use it instead of xmalloc.  This removes a
dependency on glibc malloc internals.  See Eli Zaretskii's comment in
<http://lists.gnu.org/archive/html/emacs-devel/2011-09/msg00815.html>.
* lisp.h (XMALLOC_OVERRUN_CHECK_OVERHEAD, XMALLOC_OVERRUN_CHECK_SIZE):
Move back to alloc.c.
(XMALLOC_BASE_ALIGNMENT, COMMON_MULTIPLE, XMALLOC_HEADER_ALIGNMENT)
(XMALLOC_OVERRUN_SIZE_SIZE): Move to alloc.c.
2011-09-30 10:07:40 -07:00
Paul Eggert
cb993c584c Port --enable-checking=all to Fedora 14 x86.
* alloc.c (XMALLOC_OVERRUN_CHECK_OVERHEAD, XMALLOC_OVERRUN_CHECK_SIZE):
Move to lisp.h.
(xmalloc_put_size, xmalloc_get_size, overrun_check_malloc)
(overrun_check_realloc, overrun_check_free):
Use XMALLOC_OVERRUN_SIZE_SIZE, not sizeof (size_t).
That way, xmalloc returns a properly-aligned pointer even if
XMALLOC_OVERRUN_CHECK is defined.  The old debugging code happened
to align OK on typical 64-bit hosts, but not on Fedora 14 x86.
* charset.c (syms_of_charset): Take XMALLOC_OVERRUN_CHECK_OVERHEAD
into account when calculating the initial malloc maximum.
* lisp.h (XMALLOC_OVERRUN_CHECK_OVERHEAD, XMALLOC_OVERRUN_CHECK_SIZE):
Move here from alloc.c, so that charset.c can use it too.
Properly align; the old code wasn't right for common 32-bit hosts
when configured with --enable-checking=all.
(XMALLOC_BASE_ALIGNMENT, COMMON_MULTIPLE, XMALLOC_HEADER_ALIGNMENT)
(XMALLOC_OVERRUN_SIZE_SIZE): New macros.
2011-09-29 20:25:46 -07:00
Juanma Barranquero
5e617bc2b6 Whitespace changes. 2011-09-09 03:06:52 +02:00
Paul Eggert
0e51f7172b Merge from trunk. 2011-08-04 19:19:34 -07:00
Paul Eggert
0065d05491 Adjust in response to jan.h.d's comments.
See, for example <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9196#26>.
2011-08-04 19:15:35 -07:00
Jan Djärv
ae9e757af1 Check for pthread and use it if found.
* configure.in (HAVE_PTHREAD): Add check for -lpthread.
(HAVE_GTK_AND_PTHREAD): Remove.

* src/Makefile.in (LIB_PTHREAD): New variable.
(LIBES): Add LIB_PTHREAD (Bug#9216).

* src/alloc.c, src/emacs.c, src/gmalloc.c, src/gtkutil.c, src/keyboard.c, src/syssignal.h:
Rename HAVE_GTK_AND_PTHREAD to HAVE_PTHREAD (Bug#9216).
2011-08-04 19:04:39 +02:00
Paul Eggert
66606eea1f * alloc.c (memory_full) [!SYNC_INPUT]: Fix signal-related race.
Without this fix, if a signal arrives just after memory fills up,
'malloc' might be invoked reentrantly.
2011-07-28 10:05:33 -07:00
Paul Eggert
0d8de0fd0a Merge from trunk. 2011-07-19 13:33:28 -07:00
Paul Eggert
41bed37d15 * alloc.c (valid_pointer_p): Use pipe, not open.
This fixes some permissions issues when debugging.
2011-07-18 13:24:40 -07:00
Paul Eggert
5e92781539 * alloc.c (__malloc_size_t): Remove.
All uses replaced by size_t.  See Andreas Schwab's note
<http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9079#8>.
2011-07-14 09:07:02 -07:00
Paul Eggert
89bfafe5d3 Merge from trunk. 2011-07-12 20:45:56 -07:00
Paul Eggert
47ea7f442f * alloc.c (gc_sweep): Don't read past end of array.
In theory, the old code could also have corrupted Emacs internals,
though it'd be very unlikely.
2011-07-12 18:04:29 -07:00
Paul Eggert
da85a02af7 Merge from trunk. 2011-07-10 23:05:57 -07:00
Andreas Schwab
268c2c36f4 Protoize
* src/alloc.c (reset_malloc_hooks): Protoize.
* src/cm.c (losecursor): Likewise.
* src/ralloc.c (r_alloc_check): Likewise.
2011-07-10 10:52:10 +02:00
Paul Eggert
903fe15d9d * alloc.c: Integer signedness and overflow fixes.
Do not impose an arbitrary 32-bit limit on malloc sizes when debugging.
(__malloc_size_t): Default to size_t, not to int.
(pure_size, pure_bytes_used_before_overflow, stack_copy_size)
(Fgarbage_collect, mark_object_loop_halt, mark_object):
Prefer ptrdiff_t to size_t when either would do, as we prefer
signed integers.
(XMALLOC_OVERRUN_CHECK_OVERHEAD): New macro.
(xmalloc_overrun_check_header, xmalloc_overrun_check_trailer):
Now const.  Initialize with values that are in range even if char
is signed.
(XMALLOC_PUT_SIZE, XMALLOC_GET_SIZE): Remove, replacing with ...
(xmalloc_put_size, xmalloc_get_size): New functions.  All uses changed.
These functions do the right thing with sizes > 2**32.
(check_depth): Now ptrdiff_t, not int.
(overrun_check_malloc, overrun_check_realloc, overrun_check_free):
Adjust to new way of storing sizes.  Check for size overflow bugs
in rest of code.
(STRING_BYTES_MAX): Adjust to new overheads.  The old code was
slightly wrong anyway, as it missed one instance of
XMALLOC_OVERRUN_CHECK_OVERHEAD.
(refill_memory_reserve): Omit needless cast to size_t.
(mark_object_loop_halt): Mark as externally visible.
2011-07-07 09:58:24 -07:00
Paul Eggert
8a5c77bba5 Remove more assumptions re struct layout (Bug#8884). 2011-07-06 15:22:32 -07:00
Juanma Barranquero
cd3520a41d Move DEFSYM to lisp.h and use everywhere. 2011-06-24 23:25:22 +02:00
Paul Eggert
c0c1ee9f77 * alloc.c (Fmake_bool_vector): Avoid unnecessary multiplication. 2011-06-18 08:39:24 -07:00
Paul Eggert
dd0b0efbab * alloc.c: Check that resized vectors' lengths fit in fixnums.
(header_size, word_size): New constants.
(allocate_vectorlike): Don't check size overflow here.
(allocate_vector): Check it here instead, since this is the only
caller of allocate_vectorlike that could cause overflow.
Check that the new vector's length is representable as a fixnum.
2011-06-14 14:30:16 -07:00
Paul Eggert
f66c7cf8f7 Variadic C functions now count arguments with ptrdiff_t.
This partly undoes my 2011-03-30 change, which replaced int with size_t.
Back then I didn't know that the Emacs coding style prefers signed int.
Also, in the meantime I found a few more instances where arguments
were being counted with int, which may truncate counts on 64-bit
machines, or EMACS_INT, which may be unnecessarily wide.
* lisp.h (struct Lisp_Subr.function.aMANY)
(DEFUN_ARGS_MANY, internal_condition_case_n, safe_call):
Arg counts are now ptrdiff_t, not size_t.
All variadic functions and their callers changed accordingly.
(struct gcpro.nvars): Now size_t, not size_t.  All uses changed.
* bytecode.c (exec_byte_code): Check maxdepth for overflow,
to avoid potential buffer overrun.  Don't assume arg counts fit in 'int'.
* callint.c (Fcall_interactively): Check arg count for overflow,
to avoid potential buffer overrun.  Use signed char, not 'int',
for 'varies' array, so that we needn't bother to check its size
calculation for overflow.
* editfns.c (Fformat): Use ptrdiff_t, not EMACS_INT, to count args.
* eval.c (apply_lambda):
* fns.c (Fmapconcat): Use XFASTINT, not XINT, to get args length.
(struct textprop_rec.argnum): Now ptrdiff_t, not int.  All uses changed.
(mapconcat): Use ptrdiff_t, not int and EMACS_INT, to count args.
2011-06-14 11:57:19 -07:00
Paul Eggert
9c4c5f81ce * lisp.h (SAFE_ALLOCA_LISP): Check for integer overflow.
(struct Lisp_Save_Value): Use ptrdiff_t, not int, for 'integer' member.
* alloc.c (make_save_value): Integer argument is now of type
ptrdiff_t, not int.
(mark_object): Use ptrdiff_t, not int.
* lisp.h (pD): New macro.
* print.c (print_object): Use it.
2011-06-08 12:54:32 -07:00
Paul Eggert
e46bb31a9f * alloc.c (allocate_pseudovector): Don't use EMACS_INT when int would do. 2011-06-08 12:18:46 -07:00
Paul Eggert
6349ae4d9c * alloc.c (inhibit_garbage_collection): Set gc_cons_threshold to max value.
Previously, this ceilinged at INT_MAX, but that doesn't work on
64-bit machines.
2011-06-08 12:07:55 -07:00
Paul Eggert
211a0b2a70 * alloc.c (nzombies, ngcs, max_live, max_zombies): Now EMACS_INT, not 'int'. 2011-06-08 12:01:08 -07:00
Paul Eggert
5a25e253b4 * alloc.c: (n_interval_blocks, n_string_blocks, n_float_blocks, n_cons_blocks)
(n_vectors, n_symbol_blocks, n_marker_blocks): Remove.
These were 'int' variables that could overflow on 64-bit hosts;
they were never used, so remove them instead of repairing them.
2011-06-08 11:51:02 -07:00
Paul Eggert
c0c5c8ae36 * alloc.c: Use EMACS_INT, not int, to count objects.
(total_conses, total_markers, total_symbols, total_vector_size)
(total_free_conses, total_free_markers, total_free_symbols)
(total_free_floats, total_floats, total_free_intervals, total_intervals)
(total_strings, total_free_strings):
Now EMACS_INT, not int.  All uses changed.
(Fgarbage_collect): Compute overall total using a double, so that
integer overflow is less likely to be a problem.  Check for overflow
when converting back to an integer.
2011-06-08 11:43:44 -07:00
Paul Eggert
b643996157 * alloc.c (mark_vectorlike, mark_char_table, mark_object): Avoid EMACS_UINT
when a (possibly-narrower) signed value would do just as well.
We prefer using signed arithmetic, to avoid comparison confusion.
2011-06-08 10:54:58 -07:00
Paul Eggert
86f61a158a * alloc.c (allocate_vectorlike): Check for ptrdiff_t overflow. 2011-06-08 10:48:26 -07:00
Paul Eggert
c78baabfc2 * alloc.c (Fmake_bool_vector): Don't assume vector size fits in int. 2011-06-08 10:43:47 -07:00
Paul Eggert
c9d624c605 * alloc.c: Catch some string size overflows that we were missing.
(XMALLOC_OVERRUN_CHECK_SIZE) [!XMALLOC_OVERRUN_CHECK]: Define to 0,
for convenience in STRING_BYTES_MAX.
(STRING_BYTES_MAX): New macro, superseding the old one in lisp.h.
The definition here is exact; the one in lisp.h was approximate.
(allocate_string_data): Check for string overflow.  This catches
some instances we weren't catching before.  Also, it catches
size_t overflow on (unusual) hosts where SIZE_MAX <= min
(PTRDIFF_MAX, MOST_POSITIVE_FIXNUM), e.g., when size_t is 32 bits
and ptrdiff_t and EMACS_INT are both 64 bits.
* character.c, coding.c, doprnt.c, editfns.c, eval.c:
All uses of STRING_BYTES_MAX replaced by STRING_BYTES_BOUND.
* lisp.h (STRING_BYTES_BOUND): Renamed from STRING_BYTES_MAX.
2011-06-08 10:22:24 -07:00
Paul Eggert
2bccce07c2 * alloc.c (Fmake_string): Check for out-of-range init. 2011-06-06 22:32:27 -07:00
Paul Eggert
77984278b9 Merge from trunk. 2011-06-06 10:58:07 -07:00
Paul Eggert
2b6148e42e * alloc.c: Simplify handling of large-request failures (Bug#8800).
(SPARE_MEMORY): Always define.
(LARGE_REQUEST): Remove.
(memory_full): Use SPARE_MEMORY rather than LARGE_REQUEST.
2011-06-06 09:41:21 -07:00
Paul Eggert
d1f3d2afe1 Check for buffer and string overflow more precisely.
* buffer.h (BUF_BYTES_MAX): New macro.
* lisp.h (STRING_BYTES_MAX): New macro.
* alloc.c (Fmake_string):
* character.c (string_escape_byte8):
* coding.c (coding_alloc_by_realloc):
* doprnt.c (doprnt):
* editfns.c (Fformat):
* eval.c (verror):
Use STRING_BYTES_MAX, not MOST_POSITIVE_FIXNUM,
since they may not be the same number.
* editfns.c (Finsert_char):
* fileio.c (Finsert_file_contents):
Likewise for BUF_BYTES_MAX.
2011-06-05 23:16:12 -07:00