[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: buffer.c/buffer.h: How to add new buffer-local variables?
From: |
Keith David Bershatsky |
Subject: |
Re: buffer.c/buffer.h: How to add new buffer-local variables? |
Date: |
Sun, 07 Apr 2019 21:34:26 -0700 |
Thank you, Eli, for providing the steps to facilitate troubleshooting this
issue. The attached files may make it easier to do a diff between the gdb
output for both commits. I performed the gdb tests on the stock Emacs versions
on the w32 platform without making any edits by me to the underlying source
code; i.e., I did not add any buffer-local variables in these tests.
a68eee50eb515b28b448894299334afced26ef78
and
05d2fc7170fb66a87601b1c76ddae2c1b7b4b934
I am also posing the results in text form below just in case you prefer that
instead of text files:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a68eee50eb515b28b448894299334afced26ef78
$ gdb ./emacs.exe
...
(gdb) start -Q
...
(gdb) ptype /o current_buffer
type = struct buffer {
/* 0 | 4 */ union vectorlike_header {
/* 4 */ ptrdiff_t size;
/* total size (bytes): 4 */
} header;
/* 4 | 4 */ Lisp_Object name_;
/* 8 | 4 */ Lisp_Object filename_;
/* 12 | 4 */ Lisp_Object directory_;
/* 16 | 4 */ Lisp_Object backed_up_;
/* 20 | 4 */ Lisp_Object save_length_;
/* 24 | 4 */ Lisp_Object auto_save_file_name_;
/* 28 | 4 */ Lisp_Object read_only_;
/* 32 | 4 */ Lisp_Object mark_;
/* 36 | 4 */ Lisp_Object local_var_alist_;
/* 40 | 4 */ Lisp_Object major_mode_;
/* 44 | 4 */ Lisp_Object mode_name_;
/* 48 | 4 */ Lisp_Object mode_line_format_;
/* 52 | 4 */ Lisp_Object header_line_format_;
/* 56 | 4 */ Lisp_Object keymap_;
/* 60 | 4 */ Lisp_Object abbrev_table_;
/* 64 | 4 */ Lisp_Object syntax_table_;
/* 68 | 4 */ Lisp_Object category_table_;
/* 72 | 4 */ Lisp_Object case_fold_search_;
/* 76 | 4 */ Lisp_Object tab_width_;
/* 80 | 4 */ Lisp_Object fill_column_;
/* 84 | 4 */ Lisp_Object left_margin_;
/* 88 | 4 */ Lisp_Object auto_fill_function_;
/* 92 | 4 */ Lisp_Object downcase_table_;
/* 96 | 4 */ Lisp_Object upcase_table_;
/* 100 | 4 */ Lisp_Object case_canon_table_;
/* 104 | 4 */ Lisp_Object case_eqv_table_;
/* 108 | 4 */ Lisp_Object truncate_lines_;
/* 112 | 4 */ Lisp_Object word_wrap_;
/* 116 | 4 */ Lisp_Object ctl_arrow_;
/* 120 | 4 */ Lisp_Object bidi_display_reordering_;
/* 124 | 4 */ Lisp_Object bidi_paragraph_direction_;
/* 128 | 4 */ Lisp_Object bidi_paragraph_separate_re_;
/* 132 | 4 */ Lisp_Object bidi_paragraph_start_re_;
/* 136 | 4 */ Lisp_Object selective_display_;
/* 140 | 4 */ Lisp_Object selective_display_ellipses_;
/* 144 | 4 */ Lisp_Object minor_modes_;
/* 148 | 4 */ Lisp_Object overwrite_mode_;
/* 152 | 4 */ Lisp_Object abbrev_mode_;
/* 156 | 4 */ Lisp_Object display_table_;
/* 160 | 4 */ Lisp_Object mark_active_;
/* 164 | 4 */ Lisp_Object enable_multibyte_characters_;
/* 168 | 4 */ Lisp_Object buffer_file_coding_system_;
/* 172 | 4 */ Lisp_Object file_format_;
/* 176 | 4 */ Lisp_Object auto_save_file_format_;
/* 180 | 4 */ Lisp_Object cache_long_scans_;
/* 184 | 4 */ Lisp_Object width_table_;
/* 188 | 4 */ Lisp_Object pt_marker_;
/* 192 | 4 */ Lisp_Object begv_marker_;
/* 196 | 4 */ Lisp_Object zv_marker_;
/* 200 | 4 */ Lisp_Object point_before_scroll_;
/* 204 | 4 */ Lisp_Object file_truename_;
/* 208 | 4 */ Lisp_Object invisibility_spec_;
/* 212 | 4 */ Lisp_Object last_selected_window_;
/* 216 | 4 */ Lisp_Object display_count_;
/* 220 | 4 */ Lisp_Object left_margin_cols_;
/* 224 | 4 */ Lisp_Object right_margin_cols_;
/* 228 | 4 */ Lisp_Object left_fringe_width_;
/* 232 | 4 */ Lisp_Object right_fringe_width_;
/* 236 | 4 */ Lisp_Object fringes_outside_margins_;
/* 240 | 4 */ Lisp_Object scroll_bar_width_;
/* 244 | 4 */ Lisp_Object scroll_bar_height_;
/* 248 | 4 */ Lisp_Object vertical_scroll_bar_type_;
/* 252 | 4 */ Lisp_Object horizontal_scroll_bar_type_;
/* 256 | 4 */ Lisp_Object indicate_empty_lines_;
/* 260 | 4 */ Lisp_Object indicate_buffer_boundaries_;
/* 264 | 4 */ Lisp_Object fringe_indicator_alist_;
---Type <return> to continue, or q <return> to quit---
/* 268 | 4 */ Lisp_Object fringe_cursor_alist_;
/* 272 | 4 */ Lisp_Object display_time_;
/* 276 | 4 */ Lisp_Object scroll_up_aggressively_;
/* 280 | 4 */ Lisp_Object scroll_down_aggressively_;
/* 284 | 4 */ Lisp_Object cursor_type_;
/* 288 | 4 */ Lisp_Object extra_line_spacing_;
/* 292 | 4 */ Lisp_Object cursor_in_non_selected_windows_;
/* 296 | 72 */ struct buffer_text {
/* 296 | 4 */ unsigned char *beg;
/* 300 | 4 */ ptrdiff_t gpt;
/* 304 | 4 */ ptrdiff_t z;
/* 308 | 4 */ ptrdiff_t gpt_byte;
/* 312 | 4 */ ptrdiff_t z_byte;
/* 316 | 4 */ ptrdiff_t gap_size;
/* 320 | 4 */ EMACS_INT modiff;
/* 324 | 4 */ EMACS_INT chars_modiff;
/* 328 | 4 */ EMACS_INT save_modiff;
/* 332 | 4 */ EMACS_INT overlay_modiff;
/* 336 | 4 */ EMACS_INT compact;
/* 340 | 4 */ ptrdiff_t beg_unchanged;
/* 344 | 4 */ ptrdiff_t end_unchanged;
/* 348 | 4 */ EMACS_INT unchanged_modified;
/* 352 | 4 */ EMACS_INT overlay_unchanged_modified;
/* 356 | 4 */ INTERVAL intervals;
/* 360 | 4 */ struct Lisp_Marker *markers;
/* 364:31 | 4 */ bool_bf inhibit_shrinking : 1;
/* 364:30 | 4 */ bool_bf redisplay : 1;
/* total size (bytes): 72 */
} own_text;
/* 368 | 4 */ struct buffer_text *text;
/* 372 | 4 */ struct buffer *next;
/* 376 | 4 */ ptrdiff_t pt;
/* 380 | 4 */ ptrdiff_t pt_byte;
/* 384 | 4 */ ptrdiff_t begv;
/* 388 | 4 */ ptrdiff_t begv_byte;
/* 392 | 4 */ ptrdiff_t zv;
/* 396 | 4 */ ptrdiff_t zv_byte;
/* 400 | 4 */ struct buffer *base_buffer;
/* 404 | 4 */ int indirections;
/* 408 | 4 */ int window_count;
/* 412 | 50 */ char local_flags[50];
/* XXX 2-byte hole */
/* 464 | 16 */ struct timespec {
/* 464 | 8 */ union {
/* 4 */ time_t tv_sec;
/* 4 */ __time32_t __tv32_sec;
/* 8 */ __time64_t __tv64_sec;
/* total size (bytes): 8 */
};
/* 472 | 4 */ long tv_nsec;
/* total size (bytes): 16 */
} modtime;
/* 480 | 4 */ off_t modtime_size;
/* 484 | 4 */ EMACS_INT auto_save_modified;
/* 488 | 4 */ EMACS_INT display_error_modiff;
/* 492 | 4 */ time_t auto_save_failure_time;
/* 496 | 4 */ ptrdiff_t last_window_start;
/* 500 | 4 */ struct region_cache *newline_cache;
/* 504 | 4 */ struct region_cache *width_run_cache;
/* 508 | 4 */ struct region_cache *bidi_paragraph_cache;
/* 512:31 | 4 */ bool_bf prevent_redisplay_optimizations_p : 1;
/* 512:30 | 4 */ bool_bf clip_changed : 1;
/* XXX 6-bit hole */
/* XXX 3-byte hole */
/* 516 | 4 */ struct Lisp_Overlay *overlays_before;
/* 520 | 4 */ struct Lisp_Overlay *overlays_after;
/* 524 | 4 */ ptrdiff_t overlay_center;
/* 528 | 4 */ Lisp_Object undo_list_;
---Type <return> to continue, or q <return> to quit---
/* total size (bytes): 536 */
} *
(gdb)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
05d2fc7170fb66a87601b1c76ddae2c1b7b4b934
$ gdb ./emacs.exe
...
(gdb) start -Q
...
(gdb) ptype /o current_buffer
type = struct buffer {
/* 0 | 4 */ union vectorlike_header {
/* 4 */ ptrdiff_t size;
/* total size (bytes): 4 */
} header;
/* 4 | 4 */ Lisp_Object name_;
/* 8 | 4 */ Lisp_Object filename_;
/* 12 | 4 */ Lisp_Object directory_;
/* 16 | 4 */ Lisp_Object backed_up_;
/* 20 | 4 */ Lisp_Object save_length_;
/* 24 | 4 */ Lisp_Object auto_save_file_name_;
/* 28 | 4 */ Lisp_Object read_only_;
/* 32 | 4 */ Lisp_Object mark_;
/* 36 | 4 */ Lisp_Object local_var_alist_;
/* 40 | 4 */ Lisp_Object major_mode_;
/* 44 | 4 */ Lisp_Object mode_name_;
/* 48 | 4 */ Lisp_Object mode_line_format_;
/* 52 | 4 */ Lisp_Object header_line_format_;
/* 56 | 4 */ Lisp_Object keymap_;
/* 60 | 4 */ Lisp_Object abbrev_table_;
/* 64 | 4 */ Lisp_Object syntax_table_;
/* 68 | 4 */ Lisp_Object category_table_;
/* 72 | 4 */ Lisp_Object case_fold_search_;
/* 76 | 4 */ Lisp_Object tab_width_;
/* 80 | 4 */ Lisp_Object fill_column_;
/* 84 | 4 */ Lisp_Object left_margin_;
/* 88 | 4 */ Lisp_Object auto_fill_function_;
/* 92 | 4 */ Lisp_Object downcase_table_;
/* 96 | 4 */ Lisp_Object upcase_table_;
/* 100 | 4 */ Lisp_Object case_canon_table_;
/* 104 | 4 */ Lisp_Object case_eqv_table_;
/* 108 | 4 */ Lisp_Object truncate_lines_;
/* 112 | 4 */ Lisp_Object word_wrap_;
/* 116 | 4 */ Lisp_Object ctl_arrow_;
/* 120 | 4 */ Lisp_Object bidi_display_reordering_;
/* 124 | 4 */ Lisp_Object bidi_paragraph_direction_;
/* 128 | 4 */ Lisp_Object bidi_paragraph_separate_re_;
/* 132 | 4 */ Lisp_Object bidi_paragraph_start_re_;
/* 136 | 4 */ Lisp_Object selective_display_;
/* 140 | 4 */ Lisp_Object selective_display_ellipses_;
/* 144 | 4 */ Lisp_Object minor_modes_;
/* 148 | 4 */ Lisp_Object overwrite_mode_;
/* 152 | 4 */ Lisp_Object abbrev_mode_;
/* 156 | 4 */ Lisp_Object display_table_;
/* 160 | 4 */ Lisp_Object mark_active_;
/* 164 | 4 */ Lisp_Object enable_multibyte_characters_;
/* 168 | 4 */ Lisp_Object buffer_file_coding_system_;
/* 172 | 4 */ Lisp_Object file_format_;
/* 176 | 4 */ Lisp_Object auto_save_file_format_;
/* 180 | 4 */ Lisp_Object cache_long_scans_;
/* 184 | 4 */ Lisp_Object width_table_;
/* 188 | 4 */ Lisp_Object pt_marker_;
/* 192 | 4 */ Lisp_Object begv_marker_;
/* 196 | 4 */ Lisp_Object zv_marker_;
/* 200 | 4 */ Lisp_Object point_before_scroll_;
/* 204 | 4 */ Lisp_Object file_truename_;
/* 208 | 4 */ Lisp_Object invisibility_spec_;
/* 212 | 4 */ Lisp_Object last_selected_window_;
/* 216 | 4 */ Lisp_Object display_count_;
/* 220 | 4 */ Lisp_Object left_margin_cols_;
/* 224 | 4 */ Lisp_Object right_margin_cols_;
/* 228 | 4 */ Lisp_Object left_fringe_width_;
/* 232 | 4 */ Lisp_Object right_fringe_width_;
/* 236 | 4 */ Lisp_Object fringes_outside_margins_;
/* 240 | 4 */ Lisp_Object scroll_bar_width_;
/* 244 | 4 */ Lisp_Object scroll_bar_height_;
/* 248 | 4 */ Lisp_Object vertical_scroll_bar_type_;
/* 252 | 4 */ Lisp_Object horizontal_scroll_bar_type_;
/* 256 | 4 */ Lisp_Object indicate_empty_lines_;
/* 260 | 4 */ Lisp_Object indicate_buffer_boundaries_;
/* 264 | 4 */ Lisp_Object fringe_indicator_alist_;
---Type <return> to continue, or q <return> to quit---
/* 268 | 4 */ Lisp_Object fringe_cursor_alist_;
/* 272 | 4 */ Lisp_Object display_time_;
/* 276 | 4 */ Lisp_Object scroll_up_aggressively_;
/* 280 | 4 */ Lisp_Object scroll_down_aggressively_;
/* 284 | 4 */ Lisp_Object cursor_type_;
/* 288 | 4 */ Lisp_Object extra_line_spacing_;
/* 292 | 4 */ Lisp_Object cursor_in_non_selected_windows_;
/* 296 | 104 */ struct buffer_text {
/* 296 | 4 */ unsigned char *beg;
/* 300 | 4 */ ptrdiff_t gpt;
/* 304 | 4 */ ptrdiff_t z;
/* 308 | 4 */ ptrdiff_t gpt_byte;
/* 312 | 4 */ ptrdiff_t z_byte;
/* 316 | 4 */ ptrdiff_t gap_size;
/* 320 | 8 */ modiff_count modiff;
/* 328 | 8 */ modiff_count chars_modiff;
/* 336 | 8 */ modiff_count save_modiff;
/* 344 | 8 */ modiff_count overlay_modiff;
/* 352 | 8 */ modiff_count compact;
/* 360 | 4 */ ptrdiff_t beg_unchanged;
/* 364 | 4 */ ptrdiff_t end_unchanged;
/* 368 | 8 */ modiff_count unchanged_modified;
/* 376 | 8 */ modiff_count overlay_unchanged_modified;
/* 384 | 4 */ INTERVAL intervals;
/* 388 | 4 */ struct Lisp_Marker *markers;
/* 392:31 | 4 */ bool_bf inhibit_shrinking : 1;
/* 392:30 | 4 */ bool_bf redisplay : 1;
/* total size (bytes): 104 */
} own_text;
/* 400 | 4 */ struct buffer_text *text;
/* 404 | 4 */ struct buffer *next;
/* 408 | 4 */ ptrdiff_t pt;
/* 412 | 4 */ ptrdiff_t pt_byte;
/* 416 | 4 */ ptrdiff_t begv;
/* 420 | 4 */ ptrdiff_t begv_byte;
/* 424 | 4 */ ptrdiff_t zv;
/* 428 | 4 */ ptrdiff_t zv_byte;
/* 432 | 4 */ struct buffer *base_buffer;
/* 436 | 4 */ int indirections;
/* 440 | 4 */ int window_count;
/* 444 | 50 */ char local_flags[50];
/* XXX 2-byte hole */
/* 496 | 16 */ struct timespec {
/* 496 | 8 */ union {
/* 4 */ time_t tv_sec;
/* 4 */ __time32_t __tv32_sec;
/* 8 */ __time64_t __tv64_sec;
/* total size (bytes): 8 */
};
/* 504 | 4 */ long tv_nsec;
/* total size (bytes): 16 */
} modtime;
/* 512 | 4 */ off_t modtime_size;
/* XXX 4-byte hole */
/* 520 | 8 */ modiff_count auto_save_modified;
/* 528 | 8 */ modiff_count display_error_modiff;
/* 536 | 4 */ time_t auto_save_failure_time;
/* 540 | 4 */ ptrdiff_t last_window_start;
/* 544 | 4 */ struct region_cache *newline_cache;
/* 548 | 4 */ struct region_cache *width_run_cache;
/* 552 | 4 */ struct region_cache *bidi_paragraph_cache;
/* 556:31 | 4 */ bool_bf prevent_redisplay_optimizations_p : 1;
/* 556:30 | 4 */ bool_bf clip_changed : 1;
/* XXX 6-bit hole */
/* XXX 3-byte hole */
/* 560 | 4 */ struct Lisp_Overlay *overlays_before;
/* 564 | 4 */ struct Lisp_Overlay *overlays_after;
/* 568 | 4 */ ptrdiff_t overlay_center;
/* 572 | 4 */ Lisp_Object undo_list_;
---Type <return> to continue, or q <return> to quit---
/* total size (bytes): 576 */
} *
(gdb)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> Date: [04-07-2019 08:48:21] <07 Apr 2019 18:48:21 +0300>
> From: Eli Zaretskii <address@hidden>
> To: Keith David Bershatsky <address@hidden>
> CC:
> address@hidden,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden
> Subject: Re: buffer.c/buffer.h: How to add new buffer-local variables?
>
> > Date: Sat, 06 Apr 2019 19:50:14 -0700
> > From: Keith David Bershatsky <address@hidden>
> > Cc: address@hidden,Stefan Monnier <address@hidden>,Andreas Schwab
> > <address@hidden>,Alan Mackenzie <address@hidden>,Daniel Colascione
> > <address@hidden>,Paul Eggert <address@hidden>
> >
> > Using an unsophisticated method of going back in time and building various
> > versions of Emacs on the w32 platform, I tracked down the inability to add
> > a few new buffer-local variables in buffer.c/buffer.h to a commit that
> > occurred on 01/31/2019: 05d2fc7170fb66a87601b1c76ddae2c1b7b4b934.
>
> Is your GDB version 8.1 or later? If so, please do this:
>
> $ cd /path/to/emacs/src
> $ gdb ./emacs.exe
> ...
> (gdb) start -Q
> ...
> (gdb) ptype /o current_buffer
>
> and post here the result. Please do this both in the build before and
> after the above commit, and let us see both results.
05d2fc7170fb66a87601b1c76ddae2c1b7b4b934.txt
Description: application/txt
a68eee50eb515b28b448894299334afced26ef78.txt
Description: application/txt