diff options
| author | Pip Cet | 2024-08-20 19:02:29 +0000 |
|---|---|---|
| committer | Stefan Kangas | 2024-12-12 22:48:12 +0100 |
| commit | e1e101c6c10b6e5110c2c47946d477a752828a78 (patch) | |
| tree | 92f78b118b1b7ac548e0acf356e9d14503a85c1c /src/alloc.c | |
| parent | 5ec86966638885a0f8df8afa28a01ca103ad2a49 (diff) | |
| download | emacs-e1e101c6c10b6e5110c2c47946d477a752828a78.tar.gz emacs-e1e101c6c10b6e5110c2c47946d477a752828a78.zip | |
Pure storage removal: Remove support for pinned objects
* 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.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 47 |
1 files changed, 0 insertions, 47 deletions
diff --git a/src/alloc.c b/src/alloc.c index ff491719547..ea142fb1076 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -3898,13 +3898,6 @@ struct symbol_block | |||
| 3898 | 3898 | ||
| 3899 | static struct symbol_block *symbol_block; | 3899 | static struct symbol_block *symbol_block; |
| 3900 | static int symbol_block_index = SYMBOL_BLOCK_SIZE; | 3900 | static int symbol_block_index = SYMBOL_BLOCK_SIZE; |
| 3901 | /* Pointer to the first symbol_block that contains pinned symbols. | ||
| 3902 | Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols, | ||
| 3903 | 10K of which are pinned (and all but 250 of them are interned in obarray), | ||
| 3904 | whereas a "typical session" has in the order of 30K symbols. | ||
| 3905 | `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather | ||
| 3906 | than 30K to find the 10K symbols we need to mark. */ | ||
| 3907 | static struct symbol_block *symbol_block_pinned; | ||
| 3908 | 3901 | ||
| 3909 | /* List of free symbols. */ | 3902 | /* List of free symbols. */ |
| 3910 | 3903 | ||
| @@ -3930,7 +3923,6 @@ init_symbol (Lisp_Object val, Lisp_Object name) | |||
| 3930 | p->u.s.interned = SYMBOL_UNINTERNED; | 3923 | p->u.s.interned = SYMBOL_UNINTERNED; |
| 3931 | p->u.s.trapped_write = SYMBOL_UNTRAPPED_WRITE; | 3924 | p->u.s.trapped_write = SYMBOL_UNTRAPPED_WRITE; |
| 3932 | p->u.s.declared_special = false; | 3925 | p->u.s.declared_special = false; |
| 3933 | p->u.s.pinned = false; | ||
| 3934 | } | 3926 | } |
| 3935 | 3927 | ||
| 3936 | DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0, | 3928 | DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0, |
| @@ -5666,13 +5658,6 @@ Does not copy symbols. Copies strings without text properties. */) | |||
| 5666 | return purecopy (obj); | 5658 | return purecopy (obj); |
| 5667 | } | 5659 | } |
| 5668 | 5660 | ||
| 5669 | /* Pinned objects are marked before every GC cycle. */ | ||
| 5670 | static struct pinned_object | ||
| 5671 | { | ||
| 5672 | Lisp_Object object; | ||
| 5673 | struct pinned_object *next; | ||
| 5674 | } *pinned_objects; | ||
| 5675 | |||
| 5676 | static Lisp_Object | 5661 | static Lisp_Object |
| 5677 | purecopy (Lisp_Object obj) | 5662 | purecopy (Lisp_Object obj) |
| 5678 | { | 5663 | { |
| @@ -5882,13 +5867,6 @@ compact_undo_list (Lisp_Object list) | |||
| 5882 | return list; | 5867 | return list; |
| 5883 | } | 5868 | } |
| 5884 | 5869 | ||
| 5885 | static void | ||
| 5886 | mark_pinned_objects (void) | ||
| 5887 | { | ||
| 5888 | for (struct pinned_object *pobj = pinned_objects; pobj; pobj = pobj->next) | ||
| 5889 | mark_object (pobj->object); | ||
| 5890 | } | ||
| 5891 | |||
| 5892 | #if defined HAVE_ANDROID && !defined (__clang__) | 5870 | #if defined HAVE_ANDROID && !defined (__clang__) |
| 5893 | 5871 | ||
| 5894 | /* The Android gcc is broken and needs the following version of | 5872 | /* The Android gcc is broken and needs the following version of |
| @@ -5913,29 +5891,6 @@ android_make_lisp_symbol (struct Lisp_Symbol *sym) | |||
| 5913 | #endif | 5891 | #endif |
| 5914 | 5892 | ||
| 5915 | static void | 5893 | static void |
| 5916 | mark_pinned_symbols (void) | ||
| 5917 | { | ||
| 5918 | struct symbol_block *sblk; | ||
| 5919 | int lim; | ||
| 5920 | struct Lisp_Symbol *sym, *end; | ||
| 5921 | |||
| 5922 | if (symbol_block_pinned == symbol_block) | ||
| 5923 | lim = symbol_block_index; | ||
| 5924 | else | ||
| 5925 | lim = SYMBOL_BLOCK_SIZE; | ||
| 5926 | |||
| 5927 | for (sblk = symbol_block_pinned; sblk; sblk = sblk->next) | ||
| 5928 | { | ||
| 5929 | sym = sblk->symbols, end = sym + lim; | ||
| 5930 | for (; sym < end; ++sym) | ||
| 5931 | if (sym->u.s.pinned) | ||
| 5932 | mark_object (make_lisp_symbol (sym)); | ||
| 5933 | |||
| 5934 | lim = SYMBOL_BLOCK_SIZE; | ||
| 5935 | } | ||
| 5936 | } | ||
| 5937 | |||
| 5938 | static void | ||
| 5939 | visit_vectorlike_root (struct gc_root_visitor visitor, | 5894 | visit_vectorlike_root (struct gc_root_visitor visitor, |
| 5940 | struct Lisp_Vector *ptr, | 5895 | struct Lisp_Vector *ptr, |
| 5941 | enum gc_root_type type) | 5896 | enum gc_root_type type) |
| @@ -6198,8 +6153,6 @@ garbage_collect (void) | |||
| 6198 | struct gc_root_visitor visitor = { .visit = mark_object_root_visitor }; | 6153 | struct gc_root_visitor visitor = { .visit = mark_object_root_visitor }; |
| 6199 | visit_static_gc_roots (visitor); | 6154 | visit_static_gc_roots (visitor); |
| 6200 | 6155 | ||
| 6201 | mark_pinned_objects (); | ||
| 6202 | mark_pinned_symbols (); | ||
| 6203 | mark_lread (); | 6156 | mark_lread (); |
| 6204 | mark_terminals (); | 6157 | mark_terminals (); |
| 6205 | mark_kboards (); | 6158 | mark_kboards (); |