annotate src/README.kkcc @ 5146:88bd4f3ef8e4

make lrecord UID's have a separate UID space for each object, resurrect debug SOE code in extents.c -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-15 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (c_readonly): * alloc.c (deadbeef_memory): * alloc.c (make_compiled_function): * alloc.c (make_button_data): * alloc.c (make_motion_data): * alloc.c (make_process_data): * alloc.c (make_timeout_data): * alloc.c (make_magic_data): * alloc.c (make_magic_eval_data): * alloc.c (make_eval_data): * alloc.c (make_misc_user_data): * alloc.c (noseeum_make_marker): * alloc.c (ADDITIONAL_FREE_string): * alloc.c (common_init_alloc_early): * alloc.c (init_alloc_once_early): * bytecode.c (print_compiled_function): * bytecode.c (mark_compiled_function): * casetab.c: * casetab.c (print_case_table): * console.c: * console.c (print_console): * database.c (print_database): * database.c (finalize_database): * device-msw.c (sync_printer_with_devmode): * device-msw.c (print_devmode): * device-msw.c (finalize_devmode): * device.c: * device.c (print_device): * elhash.c: * elhash.c (print_hash_table): * eval.c (print_multiple_value): * eval.c (mark_multiple_value): * events.c (deinitialize_event): * events.c (print_event): * events.c (event_equal): * extents.c: * extents.c (soe_dump): * extents.c (soe_insert): * extents.c (soe_delete): * extents.c (soe_move): * extents.c (extent_fragment_update): * extents.c (print_extent_1): * extents.c (print_extent): * extents.c (vars_of_extents): * frame.c: * frame.c (print_frame): * free-hook.c: * free-hook.c (check_free): * glyphs.c: * glyphs.c (print_image_instance): * glyphs.c (print_glyph): * gui.c: * gui.c (copy_gui_item): * hash.c: * hash.c (NULL_ENTRY): * hash.c (KEYS_DIFFER_P): * keymap.c (print_keymap): * keymap.c (MARKED_SLOT): * lisp.h: * lrecord.h: * lrecord.h (LISP_OBJECT_UID): * lrecord.h (set_lheader_implementation): * lrecord.h (struct old_lcrecord_header): * lstream.c (print_lstream): * lstream.c (finalize_lstream): * marker.c (print_marker): * marker.c (marker_equal): * mc-alloc.c (visit_all_used_page_headers): * mule-charset.c: * mule-charset.c (print_charset): * objects.c (print_color_instance): * objects.c (print_font_instance): * objects.c (finalize_font_instance): * opaque.c (print_opaque): * opaque.c (print_opaque_ptr): * opaque.c (equal_opaque_ptr): * print.c (internal_object_printer): * print.c (enum printing_badness): * rangetab.c (print_range_table): * rangetab.c (range_table_equal): * specifier.c (print_specifier): * specifier.c (finalize_specifier): * symbols.c: * symbols.c (print_symbol_value_magic): * tooltalk.c: * tooltalk.c (print_tooltalk_message): * tooltalk.c (print_tooltalk_pattern): * window.c (print_window): * window.c (debug_print_window): (1) Make lrecord UID's have a separate UID space for each object. Otherwise, with 20-bit UID's, we rapidly wrap around, especially when common objects like conses and strings increment the UID value for every object created. (Originally I tried making two UID spaces, one for objects that always print readably and hence don't display the UID, and one for other objects. But certain objects like markers for which a UID is displayed are still generated rapidly enough that UID overflow is a serious issue.) This also has the advantage of making UID values smaller, hence easier to remember -- their main purpose is to make it easier to keep track of different objects of the same type when debugging code. Make sure we dump lrecord UID's so that we don't have problems with pdumped and non-dumped objects having the same UID. (2) Display UID's consistently whenever an object (a) doesn't consistently print readably (objects like cons and string, which always print readably, can't display a UID), and (b) doesn't otherwise have a unique property that makes objects of a particular type distinguishable. (E.g. buffers didn't and still don't print an ID, but the buffer name uniquely identifies the buffer.) Some types, such as event, extent, compiled-function, didn't always (or didn't ever) display an ID; others (such as marker, extent, lstream, opaque, opaque-ptr, any object using internal_object_printer()) used to display the actual machine pointer instead. (3) Rename NORMAL_LISP_OBJECT_UID to LISP_OBJECT_UID; make it work over all Lisp objects and take a Lisp object, not a struct pointer. (4) Some misc cleanups in alloc.c, elhash.c. (5) Change code in events.c that "deinitializes" an event so that it doesn't increment the event UID counter in the process. Also use deadbeef_memory() to overwrite memory instead of doing the same with custom code. In the process, make deadbeef_memory() in alloc.c always available, and delete extraneous copy in mc-alloc.c. Also capitalize all uses of 0xDEADBEEF. Similarly in elhash.c call deadbeef_memory(). (6) Resurrect "debug SOE" code in extents.c. Make it conditional on DEBUG_XEMACS and on a `debug-soe' variable, rather than on SOE_DEBUG. Make it output to stderr, not stdout. (7) Delete some custom print methods that were identical to external_object_printer().
author Ben Wing <ben@xemacs.org>
date Mon, 15 Mar 2010 16:35:38 -0500
parents ac1be85b4a5f
children 3889ef128488
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
1 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
2 Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
3 Mike Sperber <mike@xemacs.org>
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
4
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
5 updated 2003-07-29
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
6
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
7 New KKCC-GC mark algorithm:
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
8 configure flag : --use-kkcc
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
9
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
10 For better understanding, first a few words about the mark algorithm
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
11 up to now:
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
12 Every Lisp_Object has its own mark method, which calls mark_object
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
13 with the stuff to be marked.
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
14 Also, many Lisp_Objects have pdump descriptions memory_descriptions,
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
15 which are used by the portable dumper. The dumper gets all the
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
16 information it needs about the Lisp_Object from the descriptions.
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
17
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
18 Also the garbage collector can use the information in the pdump
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
19 descriptions, so we can get rid of the mark methods.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
20 That is what we have been doing.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
21
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
22
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
23 DUMPABLE FLAG
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
24 -------------
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
25 First we added a dumpable flag to lrecord_implementation. It shows,
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
26 if the object is dumpable and should be processed by the dumper.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
27 The dumpable flag is the third argument of a lrecord_implementation
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
28 definition (DEFINE_LRECORD_IMPLEMENTATION).
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
29 If it is set to 1, the dumper processes the descriptions and dumps
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
30 the Object, if it is set to 0, the dumper does not care about it.
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
31
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
32
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
33 KKCC MARKING
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
34 ------------
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
35 All Lisp_Objects have memory_descriptions now, so we could get
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
36 rid of the mark_object calls.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
37 The KKCC algorithm manages its own stack. Instead of calling
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
38 mark_object, all the alive Lisp_Objects are pushed on the
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
39 kkcc_gc_stack. Then these elements on the stack are processed
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
40 according to their descriptions.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
41
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
42
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
43 TODO
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
44 ----
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
45 - For weakness use weak datatypes instead of XD_FLAG_NO_KKCC.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
46 XD_FLAG_NO_KKCC occurs in:
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
47 * elhash.c: htentry
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
48 * extents.c: lispobject_gap_array, extent_list, extent_info
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
49 * marker.c: marker
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
50 Not everything has to be rewritten. See Ben's comment in lrecord.h.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
51 - Clean up special case marking (weak_hash_tables, weak_lists,
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
52 ephemerons).
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
53 - Stack optimization (have one stack during runtime instead of
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
54 malloc/free it for every garbage collect)
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
55
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
56 There are a few Lisp_Objects, where there occured differences and
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
57 inexactness between the mark-method and the pdump description. All
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
58 these Lisp_Objects get dumped (except image instances), so their
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
59 descriptions have been written, before we started our work:
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
60 * alloc.c: string
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
61 description: size_, data_, and plist is described
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
62 mark: only plist is marked, but flush_cached_extent_info is called.
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
63 flush_cached_extent_info ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
64 free_soe ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
65 free_extent_list ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
66 free_gap_array ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
67 gap_array_delete_all_markers ->
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
68 Add gap_array to the gap_array_marker_freelist
992
964f33d24564 [xemacs-hg @ 2002-09-03 10:51:55 by michaels]
michaels
parents:
diff changeset
69
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
70 * glyphs.c: image_instance
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
71 description: device is not set to nil
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 992
diff changeset
72 mark: mark method sets device to nil if dead
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1204
diff changeset
73 See comment above the description.