aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Alternative implementation for weak hash tablesHelmut Eller2026-02-021-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It can be enabled with -DUSE_EPHEMERON_POOL. This variant uses the ephemeron pool and hence sovles the key-in-value problem. This version stores key/values pairs a vector-of-pairs instead of a pair-of-vectors. The same vector-of-pairs type is used for weak and non-weak. This avoids the code duplication used by the pair-of-vector version; though it adds a bit of overhead to the non-weak code path. * src/lisp.h: (struct vector_pair [!USE_EPHEMERON_POOL]): New type. (struct pair_vector [USE_EPHEMERON_POOL]):New type. (hash_table_kv): New typedef used to both version. (hash_table_kv_create, hash_table_kv_free, hash_table_kv_key) (hash_table_kv_value, hash_table_kv_set_key, hash_table_kv_set_value) (hash_table_kv_null): New helpers (struct Lisp_Hash_Table): Use a single field kv of type hash_table_kv instead of two fields. (HASH_KEY, HASH_VALUE, WEAK_HASH_KEY, WEAK_HASH_VALUE, DOHASH) (DOHASH_WEAK, set_hash_key_slot, set_hash_value_slot) (set_weak_hash_key_slot, set_weak_hash_value_slot): Adapt to hash_table_kv. (DOHASH [USE_EPHEMERON_POOL]): New version. * src/igc.h (enum igc_obj_type): Add IGC_OBJ_PAIR_VECTOR, IGC_OBJ_WEAK_KEY_PAIR_VECTOR, IGC_OBJ_WEAK_VALUE_PAIR_VECTOR, IGC_OBJ_WEAK_OR_PAIR_VECTOR. (igc_alloc_pair_vector): New prototype. * src/igc.c (obj_type_names, set_header, dflt_scan_obj, thread_ap): Handle new tpes. (struct igc_thread, create_ephemeron_ap, create_thread_aps) (igc_thread_remove): Add allocation point for ephemeron pool. (struct igc, make_pool_aeph, make_igc): Add ephemeron pool. (as_igc_header, fix_pair_vector, decode_ptr, encode_ptr) (increment_ndeleted, splat_pair, fix_weak_key_pair, fix_weak_value_pair) (fix_weak_or_pair, fix_weak_and_pair, scan_pair_vector) (fix_weak_key_pair_vector, fix_weak_value_pair_vector) (fix_weak_or_pair_vector, fix_weak_and_pair_vector): New helpers. (fix_hash_table, fix_weak_hash_table_strong_part) (fix_weak_hash_table_weak_part): Adapt to hash_table_kv. (igc_alloc_pair_vector): New function. * src/fns.c (maybe_resize_hash_table): Call maybe_resize_hash_table. (Fgethash): Add assertion for HASH_UNUSED_ENTRY_KEY. (Fhash_table_count): Take deleted entries into account. (hash_table_kv_init, hash_table_kv_create) (hash_table_kv_resize, hash_table_kv_free): New helpers. (hash_table_kv_ndeleted, hash_table_ndeleted) (hash_table_count, reclaim_deleted_entries) (maybe_reclaim_deleted_entries): New helpers. (make_hash_table, copy_hash_table, hash_table_thaw, hash_table_rehash) (allocate_weak_hash_table_parts, make_weak_hash_table) (maybe_resize_weak_hash_table): Adapt to hash_table_kv. * src/alloc.c (cleanup_vector): Adapt to hash_table_kv. * src/pdumper.c (hash_table_contents, hash_table_freeze) (dump_hash_table): Adapt to hash_table_kv. (dump_hash_table_kv_slot, dump_hash_table_kv, dump_hash_table_kv_part): New helpers. * src/print.c (print_object): Use Fhash_table_count instead of the h->count field. * test/src/fns-tests.el (ft--check-entries): Check hash-table-count. (ft-weak-fixnums2, ft--test-weak-fixnums2): New test. (ft--test-ephemeron-table): Better check for hash-table-count.
* Merge branch 'master' into feature/igcHelmut Eller2026-01-301-8/+23
|\
| * ; * src/alloc.c (Fgarbage_collect_heapsize): Avoid compiler warning.Eli Zaretskii2026-01-211-1/+1
| |
| * (garbage-collect-heapsize): New functionStefan Monnier2026-01-201-8/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The info returned from `garbage-collect` is really handy to track the evolution of the heap size, but sadly it's available only at the cost of running a full GC, which has two big downsides: it's slow, it affects what we're measuring, and it can't be used in `post-gc-hook`. So, this patch makes it available without running the GC. * src/alloc.c (Fgarbage_collect_heapsize): New function, extracted from `Fgarbage_collect`. (Fgarbage_collect): Use it. (syms_of_alloc): defsubr it. * doc/lispref/internals.texi (Garbage Collection): Extract documentation for it from that of `garbage-collect`.
* | Merge branch 'master' into feature/igcHelmut Eller2026-01-021-5/+5
|\ \ | |/
| * ; Add 2026 to copyright years.Sean Whitton2026-01-011-1/+1
| |
| * Include malloc.h early in alloc.cPaul Eggert2025-12-071-4/+4
| | | | | | | | | | | | | | | | | | | | | | * src/alloc.c, src/gmalloc.c: Include <malloc.h> before <stdlib.h>. This mimics include patterns elsewhere, and avoids a problem if malloc.h declares realloc (i.e., rpl_realloc) early as extern, whereas Gnulib stdlib.h declares it later as inline which means it is extern inline, which clashes with gmalloc’s definition of rpl_realloc when gmalloc.o is used. Problem discovered when building Emacs on Ubuntu 25.10 with "./configure CC='gcc -m32' emacs_cv_struct_alignment=no gl_cv_header_working_stdalign_h=no".
* | Tally GMP allocationsHelmut Eller2025-12-011-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Without this, bignum allocations in the pidigits don't properly trigger GC. This patch changes the peak memory usage for the pidigits benchmark by a factor of 6. The benchmark also begins to spend much more time in GC, as it should be: | | max rss | elapsed time | |--------+-----------+--------------| | before | 392472 KB | 6.7 s | | after | 58512 KB | 32.93 s | * src/bignum.h (init_gmp_memory_functions): Declare new function. * src/alloc.c (init_gmp_memory_functions): Implement it. (xmalloc_for_gmp): New helper. (xrealloc_for_gmp, xfree_for_gmp): Moved here from bignum.c. * src/bignum.c (init_bignum): Call init_gmp_memory_functions.
* | Revert "Add "flat" representation for bignums"Helmut Eller2025-11-261-42/+0
| | | | | | | | This reverts commit 1a339d54ea7e6a005973c7eb392155b2ce7065d5.
* | Add "flat" representation for bignumsHelmut Eller2025-11-251-0/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If FLAT_BIGNUMS is defined, Lisp_Bignums are a vector of GMP limbs instead of a mpz_t (i.e. pointer to limb array). The primary difficulty was the changed return type of the bignum_val function. The idiom "*bignum_val (foo)" was used all over the place. For the flat representation, it seems impossible to define bignum_val such that it returns a pointer. I changed the return type to a struct, but that made it necessary to change the idiom to "bignum_val (foo).z". * src/bignum.h (FLAT_BIGNUMS): Define if HAVE_MPS. (struct Lisp_Bignums): Define alternative representation. (struct bignum_val): New helper struct. (bignum_val): Change return type and define different version for flat bignums. (bignum_integer): Define a separate version for flat bignums. (BIGNUM_VAL): New macro. (init_gmp_memory_functions): New. Define the prototype here for a function that is implemented in alloc.c. (mpz_set_integer): Update for changed xbignum_val. * src/bignum.c (init_bignum): Call init_gmp_memory_functions. (make_bignum_from_mpz): New helper. (make_bignum_bits, make_bignum_str): Adapted for flat bignums. (bignum_to_double, bignum_to_uintmax, bignum_bufsize, bignum_to_c_string) (get_random_bignum): Adapt to changed bignum_val. * src/alloc.c (xmalloc_for_gmp): New. (xrealloc_for_gmp, xfree_for_gmp): Moved here from bignum.c. Call tally_consing. (init_gmp_memory_functions): New. (cleanup_vector): Adapt to flat bignums. * src/data.c (Fnatnump, arithcompare, Fminus, integer_remainder) (Flogcount, Fash, expt_integer, Fadd1, Fsub1, Flognot): Adapt to changed bignum_val. * src/emacs-module.c (module_extract_big_integer): Adapt to changed bignum_val. * src/floatfns.c (Fabs, Flogb): Adapt to changed bignum_val. * src/fns.c (Frandom, Ftake, Fntake, Fnthcdr, Fmemql, Feql) (internal_equal_1, value_cmp, sxhash_bignum): Adapt to changed bignum_val. * src/igc.c (finalize_bignum, finalize_vector, maybe_finalize): Adapt to flat bignums. * src/pdumper.c (dump_bignum): Define separate version for flat bignums. (dump_cold_bignum, dump_do_dump_relocation): Adapt to changed bignum_val. * src/timefns.c (ztrillion, ticks_hz_to_timespec, ticks_hz_hz_ticks) (lispint_arith): Adapt to changed bignum_val.
* | Fix non-MPS buildHelmut Eller2025-11-101-0/+4
| | | | | | | | * src/alloc.c (make_misc_ptr, make_user_ptr): Add #ifdefs.
* | Assert that misc and user pointers don't point to MPS memoryPip Cet2025-11-081-0/+2
| | | | | | | | | | | | | | * src/alloc.c (make_misc_ptr, make_user_ptr): Call 'igc_assert_not_an_mps_object'. * src/igc.c (gc_assert_untraced_object): New wrapper function. * src/lisp.h (make_mint_ptr): Use it.
* | Move the attribute field of charsets to a separate vectorHelmut Eller2025-10-281-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This simplifies the GC code, as this was the only field in the charset struct that referenced the GC heap. Without it, we no longer need to trace the charset_table. * src/charset.h (struct charset.attributes): Removed. (charset_attributes_getter): New helper. (CHARSET_ATTRIBUTES): Use it. * src/charset.c (charset_attributes_table): New. (Fdefine_charset_internal): Place attrs in charset_attributes_table. (syms_of_charset): Initialize charset_attributes_table. (mark_charset): Deleted. * src/pdumper.c (dump_charset): Skip attributes field. * src/lisp.h (mark_charset): Deleted. * src/igc.c (fix_charset_table): Nothing to do anymore. * src/alloc.c (garbage_collect): mark_charset no longer needed.
* | Avoid interior pointers into hash table vectorsHelmut Eller2025-10-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Create a type alias Lisp_KV_Vector that is a struct Lisp_Vector* for igc and a naked Lisp_Object* for the old GC. * src/lisp.h (Lisp_KV_Vector): New typedef. (kv_vector_data): New helper. (struct Lisp_Obarray): Make buckets a Lisp_KV_Vector. (struct Lisp_Hash_Table): Make key and value Lisp_KV_Vectors. (hash_table_alloc_kv, hash_table_free_kv): Use Lisp_KV_Vector. (obarray_iter_at_end, HASH_KEY, HASH_KEY, DOHASH, set_hash_key_slot) (set_hash_value_slot): Adapt to Lisp_KV_Vector. * src/alloc.c (hash_table_alloc_kv, hash_table_free_kv): Adapt to Lisp_KV_Vector. * src/fns.c (make_hash_table, copy_hash_table, maybe_resize_hash_table) (hash_table_rehash): Adapt to Lisp_KV_Vector. * src/igc.h (igc_make_hash_table_vec): Return a Lisp_Vector. * src/igc.c (igc_make_hash_table_vec): Return a Lisp_Vector. (fix_hash_table, fix_obarray): Use IGC_FIX12_PVEC for Lisp_KV_Vectors. * src/lread.c (intern_sym, Funintern, oblookup, make_obarray) (grow_obarray, Fobarray_clear): Adapt to Lisp_KV_Vector. * src/pdumper.c (hash_table_contents, hash_table_freeze, dump_hash_vec): Adapt to Lisp_KV_Vector.
* | * src/alloc.c (gc_in_progress): Add FIXME/igcHelmut Eller2025-10-191-1/+1
| |
* | Merge branch 'master' into feature/igcHelmut Eller2025-10-041-81/+80
|\ \ | |/
| * Turn some checking macros into functions in the GC marker codeMattias Engdegård2025-09-171-81/+80
| | | | | | | | | | | | | | | | | | | | | | This rids us of a bunch of unhygienic macros with free variables and makes the marking code actually readable again. Even better, it is all processed by the compiler even when the checks are disabled. * src/alloc.c (CHECK_ALLOCATED, CHECK_LIVE, CHECK_ALLOCATED_AND_LIVE) (CHECK_ALLOCATED_AND_LIVE_SYMBOL): Transform macros into... (check_live, check_allocated_and_live, check_allocated_and_live_symbol) (check_allocated_and_live_vectorlike): ...functions. Callers adapted.
* | Merge branch 'master' into feature/igcGerd Möllmann2025-08-241-59/+0
|\ \ | |/
| * Disallow string data resizing (bug#79784)Mattias Engdegård2025-08-241-50/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only allow string mutation that is certain not to require string data to be resized and reallocated: writing bytes into a unibyte string, and changing ASCII to ASCII in a multibyte string. This ensures that mutation will never transform a unibyte string to multibyte, that the size of a string in bytes never changes, and that the byte offsets of characters remain the same. Most importantly, it removes a long-standing obstacle to reform of string representation and allow for future performance improvements. * src/data.c (Faset): Disallow resizing string mutation. * src/fns.c (clear_string_char_byte_cache): * src/alloc.c (resize_string_data): Remove. * test/src/data-tests.el (data-aset-string): New test. * test/lisp/subr-tests.el (subr--subst-char-in-string): Skip error cases. * test/src/alloc-tests.el (aset-nbytes-change): Remove test that is no longer relevant. * doc/lispref/strings.texi (Modifying Strings): * doc/lispref/sequences.texi (Array Functions): * doc/lispref/text.texi (Substitution): Update manual. * etc/NEWS: Announce.
* | Merge branch 'master' into feature/igcPip Cet2025-05-011-102/+5
|\ \ | |/
| * Avoid performance regressions in unoptimized buildsPo Lu2025-04-151-1/+3
| | | | | | | | * src/alloc.c (lisp_malloc): Declare val register.
| * Remove unused XMALLOC_BLOCK_INPUT_CHECK debug facilityStefan Kangas2025-04-141-105/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The compile-time option XMALLOC_BLOCK_INPUT_CHECK was added in 2012 (commit 4d7e6e51dd4acecff) to allow blocking input during malloc-family calls, in case any issues arose from related changes in Emacs 24.3. However, it has not been referenced on emacs-devel or the bug tracker in over a decade. It is clear that we do not need it, as our signal handlers do not allocate memory. Removing it simplifies the allocation function wrappers and eliminates dead debug code. Ref: https://debbugs.gnu.org/12450 * src/alloc.c [XMALLOC_BLOCK_INPUT_CHECK] (malloc_block_input, malloc_unblock_input): Delete functions. (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT): Delete macros. Update all callers.
* | Merge from 'savannah/master'Pip Cet2025-03-181-7/+15
|\ \ | |/
| * Re-port to 32-bit systems without alignment primitivesPo Lu2025-03-091-7/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac (ALIGNOF_INT, ALIGNOF_LONG, ALIGNOF_LONG_LONG): New variables. (emacs_cv_alignas_unavailable): Define if alignas and structure alignment primitives are unavailable. In such an environment, the MSB tagging scheme must be enabled, as must the GNU malloc. * msdos/sed2v2.inp: Adjust correspondingly. * src/alloc.c (union emacs_align_type): Remove types which contain flexible array members. The address of a field subsequent to an aggregate with flexible array members cannot validly be taken. (mark_memory) [!USE_LSB_TAG && !WIDE_EMACS_INT]: Strip type bits before scanning memory. * src/emacs.c (main): * src/eval.c (Fautoload_do_load): * src/fns.c (Frequire): Rename a number of illogically named fields. * src/lisp.h (ALIGNOF_EMACS_INT): Define to the natural alignment of EMACS_INT. (IDEAL_GCALIGNMENT): New macro. (USE_LSB_TAG): Disable if no alignment specifiers are available, WIDE_EMACS_INT is undefined, and the natural alignment of EMACS_INT falls short of LSB tagging's requirements. (gflags): Rename illogically named fields and don't define them as bitfields, which runs afoul of certain compiler issues. (will_dump_p, will_bootstrap_p, will_dump_with_pdumper_p) (dumped_with_pdumper_p): Adjust accordingly. * src/pdumper.c (VM_SUPPORTED): Define to 0 when !USE_LSB_TAG. It is better to read dump files into the heap by hand than to be supplied with an address that is not representable. (_dump_object_start_pseudovector): Rename to dump_object_start_pseudovector, to avoid encroaching on reserved names. (START_DUMP_PVEC): Adjust correspondingly. (dump_mmap_contiguous_vm): Preserve errno around failure cleanup. (dump_bitset_bit_set_p): Work around certain compiler issues. (pdumper_load) [!USE_LSB_TAG]: Reject dump file allocations that are not representable as Lisp_Objects. Tested on i386-unknown-solaris2.10, sparc-sun-solaris2.10.
* | Don't forget to free process->gnutls_pproc if we HAVE_MPS (Bug#76473)Helmut Eller2025-02-221-6/+1
| | | | | | | | | | * src/gnutls.c (emacs_gnutls_deinit): Free gnutls_pproc here. * src/alloc.c (cleanup_vector): Not here.
* | Merge from savannah/masterPip Cet2025-02-171-25/+41
|\ \ | |/
| * Improve malloc Lisp alignment commentaryPaul Eggert2025-02-011-14/+20
| | | | | | | | Prompted by a private email from Pip Cet.
| * Fix compilation warnings on AndroidPo Lu2025-02-011-8/+10
| | | | | | | | | | * src/alloc.c (pointer_align): Only define if !USE_ALIGNED_ALLOC.
* | Split 'xpalloc' into two functionsPip Cet2025-02-071-20/+47
| | | | | | | | | | | | | | | | The new function 'xpalloc_nbytes' calculates the new size without performing the actual allocation. * src/alloc.c (xpalloc_nbytes): New function. (xpalloc): Use it.
* | Keep hash table allocation statistics accurate (Bug#76069)Pip Cet2025-02-071-2/+1
| | | | | | | | | | * src/alloc.c (hash_table_free_kv): Call 'hash_table_free_bytes", which updates 'hash_table_allocated_bytes'.
* | Fix GC tallying for hash table allocations (bug#76069)Pip Cet2025-02-051-2/+3
| | | | | | | | | | | | | | | | | | | | * src/alloc.c (hash_table_alloc_kv): Use 'hash_table_alloc_bytes', not 'xmalloc'. (hash_table_free_kv): * src/lisp.h: Add size argument to 'hash_table_free_kv'. * src/fns.c (maybe_resize_hash_table): * src/lread.c (grow_obarray): Pass size to 'hash_table_free_kv'. If HAVE_MPS, pass dummy argument.
* | Remove DEFVAR_LISP_NOPROEli Zaretskii2025-02-011-3/+1
| | | | | | | | | | | | | | | | * src/alloc.c (process_mark_stack): * src/lread.c (defvar_lisp_nopro): * src/lisp.h (DEFVAR_LISP_NOPRO): * src/font.c (syms_of_font): Remove the function and the macro, their callers, and related comments.
* | ; Avoid compiler warnings in alloc.cEli Zaretskii2025-02-011-0/+4
| | | | | | | | | | * src/alloc.c (XFLOAT_INIT, pointer_align) [HAVE_MPS]: Don't define, as they are unused in the HAVE_MPS build.
* | Merge 'master' into 'feature/igc'Pip Cet2025-02-011-705/+78
|\ \ | |/
| * Merge branch 'scratch/no-purespace' into 'master'Stefan Kangas2025-02-011-644/+90
| |\
| | * Improve purify-flag docstringStefan Kangas2024-12-151-7/+5
| | | | | | | | | | | | * src/alloc.c (syms_of_alloc): Improve purify-flag docstring.
| | * Make 'purecopy' an obsolete function alias for 'identity'Stefan Kangas2024-12-121-37/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/subr.el (purecopy): New obsolete function alias for 'identity'. * src/alloc.c (purecopy): Remove function. (Fpurecopy): Remove DEFUN. (syms_of_alloc): Remove defsubr for above DEFUN. * lisp/loadup.el (purify-flag): Don't set to hash table. * doc/lispref/spellfile: * doc/lispref/keymaps.texi (Tool Bar): * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Delete references to 'purecopy'
| | * Delete obsolete comment about using purespaceStefan Kangas2024-12-121-7/+0
| | | | | | | | | | | | * src/alloc.c (Fmake_byte_code): Delete obsolete comment.
| | * Remove unused function my_heap_startStefan Kangas2024-12-121-19/+0
| | | | | | | | | | | | | | | * src/alloc.c (my_heap_start) [DOUG_LEA_MALLOC && GNU_LINUX]: Remove unused function. Update callers.
| | * Remove check for working malloc_set_stateStefan Kangas2024-12-121-29/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This check was added to 'malloc_initialize_hook' in order to "insulate Emacs better from configuration screwups" (commit b4788b9394f3). With unexec gone, we no longer use 'malloc_set_state', and thus don't need this check. Note that this patch removes the last uses of the deprecated glibc functions 'malloc_set_state' and 'malloc_get_state' from our code. * src/alloc.c (malloc_initialize_hook) [DOUG_LEA_MALLOC]: Remove check for working 'malloc_set_state'. (alloc_unexec_pre) [DOUG_LEA_MALLOC]: Delete unused function. (alloc_unexec_post) [DOUG_LEA_MALLOC]: Delete function. (malloc_state_ptr) [DOUG_LEA_MALLOC]: Delete variable. * configure.ac (emacs_cv_var_doug_lea_malloc): Don't check for malloc_set_state and malloc_get_state.
| | * Avoid compiler warning in process_mark_stackPip Cet2024-12-121-3/+5
| | | | | | | | | | | | | | | | | | * src/alloc.c (process_mark_stack): Only declare and assign to 'po' if it's needed. Problem reported by: Stefan Kangas <stefankangas@gmail.com>.
| | * Pure storage removal: Remove documentationPip Cet2024-12-121-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As pure storage is now gone, it no longer needs to be documented. * doc/lispref/elisp.texi (Top): * doc/lispref/internals.texi (GNU Emacs Internals): Remove "Pure Storage" section. (Building Emacs, Garbage Collection, Writing Emacs Primitives): * doc/lispref/symbols.texi (Standard Properties): Remove references to pure storage. * src/alloc.c (Fgarbage_collect): Remove docstring text referring to pure storage.
| | * Pure storage removal: Remove support for pinned objectsPip Cet2024-12-121-47/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/alloc.c (symbol_block_pinned): Remove variable. (init_symbol): Don't initialize 'pinned flag'. (pinned_objects): Remove variable. (mark_pinned_objects, mark_pinned_symbols): Remove functions. (garbage_collect): Don't call 'mark_pinned_objects', 'mark_pinned_symbols'. * src/lisp.h (struct Lisp_Symbol): Remove 'pinned' flag. * src/pdumper.c (dump_symbol): Remove 'pinned' flag from dump.
| | * Pure storage removal: Replace calls to removed functionsPip Cet2024-12-121-13/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/alloc.c (string_bytes, pin_string, valid_lisp_object_p) (process_mark_stack, survives_gc_p, syms_of_alloc): * src/androidterm.c (android_term_init): Replace call to 'build_pure_c_string'. * src/buffer.c (init_buffer_once, syms_of_buffer): * src/bytecode.c (exec_byte_code): * src/callint.c (syms_of_callint): * src/callproc.c (syms_of_callproc): * src/category.c (Fdefine_category): * src/coding.c (syms_of_coding): * src/comp.c (Fcomp__compile_ctxt_to_file0) (maybe_defer_native_compilation, syms_of_comp): * src/data.c (Fsetcar, Fsetcdr, Fdefalias, Faset, syms_of_data): * src/dbusbind.c (syms_of_dbusbind): * src/doc.c (Fsnarf_documentation): * src/emacs-module.c (syms_of_module): * src/eval.c (Finternal__define_uninitialized_variable) (Fdefconst_1, define_error, syms_of_eval): * src/fileio.c (syms_of_fileio): * src/fns.c (Ffillarray, Fclear_string, check_mutable_hash_table): * src/fontset.c (syms_of_fontset): * src/frame.c (make_initial_frame): * src/haikufns.c (syms_of_haikufns): * src/intervals.c (create_root_interval): * src/keyboard.c (syms_of_keyboard): * src/keymap.c (Fmake_sparse_keymap, Fset_keymap_parent) (store_in_keymap, syms_of_keymap): * src/lisp.h: * src/lread.c (Fload, read0, intern_c_string_1, define_symbol) (Fintern, defsubr, syms_of_lread): * src/pdumper.c (Fdump_emacs_portable): * src/pgtkfns.c (syms_of_pgtkfns): * src/pgtkterm.c (syms_of_pgtkterm): * src/process.c (syms_of_process): * src/search.c (syms_of_search): * src/sqlite.c (syms_of_sqlite): * src/syntax.c (syms_of_syntax): * src/treesit.c (syms_of_treesit): * src/w32fns.c (syms_of_w32fns): * src/xdisp.c (syms_of_xdisp): * src/xfaces.c (syms_of_xfaces): * src/xfns.c (syms_of_xfns): * src/xftfont.c (syms_of_xftfont): * src/xterm.c (syms_of_xterm): Remove calls to 'PURE_P', 'CHECK_IMPURE', 'Fpurecopy', and replace calls to 'build_pure_c_string', 'pure_list', 'pure_listn', etc., by impure equivalents.
| | * Pure storage removal: Main partPip Cet2024-12-121-454/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/alloc.c (pure, PUREBEG, purebeg, pure_size) (pure_bytes_used_before_overflow, pure_bytes_used_lisp) (pure_bytes_used_non_lisp): Remove definitions. (init_strings): Make empty strings impure. (cons_listn): Drop 'cons' argument. (pure_listn): Remove function. (init_vectors): Allocate zero vector manually to avoid freelist issues. (pure_alloc, check_pure_size, find_string_data_in_pure) (make_pure_string, make_pure_c_string, pure_cons, make_pure_float) (make_pure_bignum, make_pure_vector, purecopy_hash_table): Remove functions. (purecopy): Reduce to hash consing our argument. (init_alloc_once_for_pdumper): Adjust to lack of pure space. (pure-bytes-used): Adjust docstring to mark as obsolete. (purify-flag): Keep for hash consing, but adjust docstring. * src/bytecode.c: * src/comp.c: Don't include "puresize.h". * src/conf_post.h (SYSTEM_PURESIZE_EXTRA): Remove definition. * src/data.c (pure_write_error): Remove function. * src/deps.mk: Remove puresize.h dependency throughout. * src/emacs.c: * src/fns.c: * src/intervals.c: * src/keymap.c: Don't include "puresize.h". * src/lisp.h (struct Lisp_Hash_Table): Adjust comment. (pure_listn, pure_list, build_pure_c_string): Remove. * src/w32heap.c (FREEABLE_P): Don't do use 'dumped_data'. (malloc_before_dump, realloc_before_dump, free_before_dump): Remove functions. * src/w32heap.h: Adjust prototype. * lisp/loadup.el: * lisp/startup.el: Remove purespace code.
| | * Unexec removal: Remove HYBRID_MALLOC supportPip Cet2024-12-121-18/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/gmalloc.c (gdefault_morecore): Remove HYBRID_MALLOC code. (allocated_via_gmalloc, hybrid_malloc, hybrid_calloc, hybrid_free_1) (hybrid_free, hybrid_aligned_alloc, hybrid_realloc): Remove functions. * msdos/sed1v2.inp: * msdos/sedlibmk.inp: * src/alloc.c (GC_MALLOC_CHECK, USE_ALIGNED_ALLOC) (refill_memory_reserve, aligned_alloc): * src/emacs.c (main): * src/lastfile.c (my_edata): * src/lisp.h: * src/ralloc.c: * src/sysdep.c (get_current_dir_name_or_unreachable): * src/xdisp.c (decode_mode_spec): Remove HYBRID_MALLOC conditions. * configure.ac (hybrid_malloc, HYBRID_MALLOC): Remove variables and dependent code. * src/conf_post.h (hybrid_malloc, hybrid_calloc, hybrid_free) (hybrid_aligned_alloc, hybrid_realloc): Remove conditional prototypes. * src/Makefile.in (HYBRID_MALLOC): Remove variable. (base_obj): Remove sheap.o (LIBEGNU_ARCHIVE): * lib/Makefile.in (libgnu_a_OBJECTS): Remove libegnu.a support.
| | * Unexec removal: Main partPip Cet2024-12-121-17/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * configure.ac: Remove unexec-specific parts. (EMACS_CONFIG_FEATURES): Always report that we do not have the UNEXEC feature. (AC_ECHO): No longer display a line about the unexec feature. * lisp/loadup.el: * lisp/startup.el: Remove unexec-specific code. * src/Makefile.in (base_obj): Drop 'UNEXEC_OBJ'. * src/alloc.c (staticvec): Never initialize this variable. (BLOCK_ALIGN): Always allow large blocks. (mmap_lisp_allowed_p): Remove unexec-specific code. * src/buffer.c (init_buffer): * src/conf_post.h (ADDRESS_SANITIZER): * src/emacs.c (load_pdump, main): Remove unexec-specific code. (Fdump_emacs): Remove function. (syms_of_emacs): Remove 'Fdump_emacs'. * src/lastfile.c: Remove unexec-specific code. * src/lisp.h (gflags): Remove unexec-specific flags. (will_dump_p, will_bootstrap_p, will_dump_with_unexec_p) (dumped_with_unexec_p, definitely_will_not_unexec_p): Remove or adjust predicates. (SUBR_SECTION_ATTRIBUTE): Remove unexec-specific definition. * src/pdumper.c (Fdump_emacs_portable): Remove unexec-specific warning. * src/process.c (init_process_emacs): Remove !unexec condition * src/sysdep.c (maybe_disable_address_randomization): Adjust comment. (init_signals): * src/timefns.c (init_timefns): Remove unexec-specific code. * src/w32heap.c (report_temacs_memory_usage): Remove function. * src/w32heap.h: Adjust comment. * src/w32image.c (globals_of_w32image): Remove unexec-specific code.
* | | Merge branch 'master' into feature/igcPip Cet2025-01-311-8/+14
|\ \ \ | |/ /
| * | Avoid some make_formatted_string mallocsPaul Eggert2025-01-271-1/+1
| | | | | | | | | | | | | | | * src/alloc.c (make_formatted_string): Grow the local buffer from 64 to MAX_ALLOCA bytes.
| * | Simplify make_formatted_string APIPaul Eggert2025-01-261-6/+10
| | | | | | | | | | | | | | | | | | | | | From a suggestion by Pip Cet. * src/alloc.c (make_formatted_string): Omit first argument, to simplify the calling convention. All callers changed. * src/doprnt.c (doprnt): Also support %u. Update doc.