* bug#34655: 26.1.92; Segfault in module with --module-assertions @ 2019-02-25 21:00 Basil L. Contovounesios 2019-02-26 2:59 ` Richard Stallman 2019-02-26 15:45 ` Eli Zaretskii 0 siblings, 2 replies; 32+ messages in thread From: Basil L. Contovounesios @ 2019-02-25 21:00 UTC (permalink / raw) To: 34655 [-- Attachment #1: GDB log --] [-- Type: text/plain, Size: 45468 bytes --] Starting program: /home/blc/.local/src/emacs26/src/emacs -Q --module-assertions [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff01cb700 (LWP 8299)] [New Thread 0x7fffef9ac700 (LWP 8300)] [New Thread 0x7fffef1ab700 (LWP 8301)] Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. re_search_2 (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, range=18, regs=0x0, stop=18) at regex.c:4354 4354 buf_ch = STRING_CHAR_AND_LENGTH (d, buf_charlen); #0 0x0000000000608594 in re_search_2 (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, range=18, regs=0x0, stop=18) at regex.c:4354 buf_charlen = 0 irange = 18 lim = 0 d = 0x0 buf_ch = 18 val = 691541629 string1 = 0x0 string2 = 0x0 fastmap = 0xbf5d38 <searchbufs+440> "" translate = make_number(0) total_size = 18 endpos = 18 anchored_start = 0 '\000' multibyte = 1 '\001' #1 0x0000000000607f91 in re_search (bufp=0xbf5d00 <searchbufs+384>, string=0x0, size=18, startpos=0, range=18, regs=0x0) at regex.c:4181 #2 0x00000000005f3fd0 in fast_string_match_internal (regexp=XIL(0x8c761c), string=XIL(0x3036ec4), table=XIL(0)) at search.c:485 val = 140737488336288 bufp = 0xbf5d00 <searchbufs+384> #3 0x0000000000581b5e in fast_string_match (regexp=XIL(0x8c761c), string=XIL(0x3036ec4)) at lisp.h:4061 #4 0x00000000005d7b2d in Ffind_file_name_handler (filename=XIL(0x3036ec4), operation=XIL(0x5af0)) at fileio.c:313 string = XIL(0x8c761c) match_pos = 140737488336448 handler = XIL(0x4e1380) operations = XIL(0x10b5c83) elt = XIL(0x10ae193) chain = XIL(0x15749e3) inhibited_handlers = XIL(0) result = XIL(0) pos = -1 #5 0x00000000005d8002 in Ffile_name_as_directory (file=XIL(0x3036ec4)) at fileio.c:547 buf = 0x7fffffffb6b0 "P\267\377\377\377\177" length = 4458226606852 handler = make_number(4) val = XIL(0x57e6cb) sa_avail = 16384 sa_count = 24 sa_must_free = false #6 0x0000000000644443 in funcall_subr (subr=0x7e7d00 <Sfile_name_as_directory>, numargs=1, args=0x7fffffffb7c8) at eval.c:2851 internal_argbuf = {XIL(0x7e7d00), XIL(0x7fffffffb718), make_number(1440909), XIL(0xa00c0b080), XIL(0x7e7d05), XIL(0x7fffffffb738), XIL(0x7e7d00), XIL(0x7fffffffb730)} internal_args = 0x7fffffffb7c8 #7 0x0000000000643f75 in Ffuncall (nargs=2, args=0x7fffffffb7c0) at eval.c:2776 fun = XIL(0x7e7d05) original_fun = XIL(0x5af0) funcar = XIL(0x57e6cb) numargs = 1 val = XIL(0x3031c43) count = 23 #8 0x0000000000682ae1 in module_funcall (env=0x3036810, fun=0x2e4d680, nargs=1, args=0x7fffffffb8f0) at emacs-module.c:478 internal_handler_CONDITION_CASE = 0x2c803a0 internal_cleanup_CONDITION_CASE = 0x2c803a0 internal_handler_CATCHER_ALL = 0x2c818d0 internal_cleanup_CATCHER_ALL = 0x2c818d0 newargs = 0x7fffffffb7c0 sa_avail = 16368 sa_count = 23 sa_must_free = false nargs1 = 2 result = 0x7fffffffb880 #9 0x00007fffee6d21e4 in () at /tmp/tmp.wcwAarLF0X/realpath/realpath.so #10 0x00007fffee6d2407 in () at /tmp/tmp.wcwAarLF0X/realpath/realpath.so #11 0x0000000000684e4b in funcall_module (function=XIL(0x1436cd5), nargs=1, arglist=0x7fffffffbb70) at emacs-module.c:783 func = 0x1436cd0 <bss_sbrk_buffer+8420464> pub = { size = 210453397508, private_members = 0x0, make_global_ref = 0x0, free_global_ref = 0x770000005b, non_local_exit_check = 0x0, non_local_exit_clear = 0x0, non_local_exit_get = 0x13, non_local_exit_signal = 0x0, non_local_exit_throw = 0x7fffffffb9e0, make_function = 0xc17f20 <lispsym+52896>, funcall = 0xfffffffffffffc48, intern = 0xcea0, type_of = 0x7fffffffba00, is_not_nil = 0x57e6cb <builtin_lisp_symbol+48>, eq = 0x0, extract_integer = 0x44e01043390, make_integer = 0x7fffffffba40, extract_float = 0x61f56e <Fsymbol_value+43>, make_float = 0x57f236 <PSEUDOVECTORP+63>, copy_string_contents = 0x438310 <x_figure_window_size+6133>, make_string = 0x7fffffffba40, make_user_ptr = 0x8096c4 <pure+130788>, get_user_ptr = 0xb8f000 <Sadd1>, set_user_ptr = 0x0, get_user_finalizer = 0x7fffffffbb60, set_user_finalizer = 0x642070 <eval_sub+210>, vec_get = 0x7fffffffba70, vec_set = 0x438310 <x_figure_window_size+6133>, vec_size = 0x7fffffffbad0, should_quit = 0x1105398 <bss_sbrk_buffer+5071672> } priv = { pending_non_local_exit = emacs_funcall_exit_return, non_local_exit_symbol = XIL(0), non_local_exit_data = XIL(0), values = XIL(0xc9a023) } env = 0x3036810 count = 22 sa_avail = 16376 sa_count = 23 sa_must_free = false args = 0x7fffffffb930 ret = 0x1100642c1e #12 0x0000000000644baa in funcall_lambda (fun=XIL(0x1436cd5), nargs=1, arg_vector=0x7fffffffbb70) at eval.c:2987 val = XIL(0x648c9c) syms_left = XIL(0x7fffffffbb70) next = XIL(0x20b9830) lexenv = XIL(0x580de9) count = 22 i = 34314288 optional = false rest = false previous_optional_or_rest = false #13 0x00000000006447f1 in apply_lambda (fun=XIL(0x1436cd5), args=XIL(0x2fc8cb3), count=21) at eval.c:2913 args_left = XIL(0) i = 1 numargs = 1 arg_vector = 0x7fffffffbb70 tem = XIL(0x8096c4) sa_avail = 16376 sa_count = 22 sa_must_free = false #14 0x00000000006429c9 in eval_sub (form=XIL(0x2fc8ca3)) at eval.c:2286 fun = XIL(0x1436cd5) val = make_number(230) original_fun = XIL(0x20b9830) original_args = XIL(0x2fc8cb3) funcar = XIL(0x2fab7e9) count = 21 argvals = {XIL(0x2fc8833), XIL(0x2fc8db3), XIL(0x2fc8873), XIL(0x2fb2868), XIL(0x41f2b0), XIL(0x685581), XIL(0x10), make_number(2)} #15 0x000000000063cef2 in Fprogn (body=XIL(0x2fc8e13)) at eval.c:459 form = XIL(0x2fc8ca3) val = XIL(0) #16 0x000000000063cf24 in prog_ignore (body=XIL(0x2fc8e23)) at eval.c:470 #17 0x000000000063f11c in Fwhile (args=XIL(0x2fc8e33)) at eval.c:992 test = XIL(0x2fc8db3) body = XIL(0x2fc8e23) #18 0x0000000000642382 in eval_sub (form=XIL(0x2fc8e43)) at eval.c:2193 args_left = XIL(0x2fc8e33) numargs = make_number(3) fun = XIL(0xb90f45) val = XIL(0x7fffffffbe80) original_fun = XIL(0xae0a0) original_args = XIL(0x2fc8e33) funcar = XIL(0xc0b080) count = 20 argvals = {XIL(0), XIL(0), XIL(0x2fb4ad0), XIL(0), XIL(0x7fffffffbfc0), XIL(0x684bff), XIL(0x7fffffffbe60), XIL(0x2d788b4)} #19 0x000000000063cef2 in Fprogn (body=XIL(0)) at eval.c:459 form = XIL(0x2fc8e43) val = XIL(0) #20 0x000000000063f03c in Flet (args=XIL(0x2fc8e63)) at eval.c:973 temps = 0x7fffffffbf00 tem = make_number(0) lexenv = XIL(0) elt = XIL(0x2fc8d63) varlist = XIL(0) count = 18 argnum = 2 sa_avail = 16368 sa_count = 18 sa_must_free = false varlist_len = 2 nvars = 2 #21 0x0000000000642382 in eval_sub (form=XIL(0x2fc8e73)) at eval.c:2193 args_left = XIL(0x2fc8e63) numargs = make_number(2) fun = XIL(0xb90f05) val = XIL(0xc2a0) original_fun = XIL(0x83a0) original_args = XIL(0x2fc8e63) funcar = XIL(0x57e6cb) count = 17 argvals = {XIL(0x2d788b4), XIL(0), make_number(0), XIL(0xc0a7a0), XIL(0x7fffffffc060), XIL(0xc0b080), XIL(0x2fc9323), XIL(0)} #22 0x000000000063cef2 in Fprogn (body=XIL(0)) at eval.c:459 form = XIL(0x2fc8e73) val = XIL(0xc2a0) #23 0x0000000000642382 in eval_sub (form=XIL(0x2fc8f43)) at eval.c:2193 args_left = XIL(0x2fc8f53) numargs = make_number(2) fun = XIL(0xb90bc5) val = XIL(0x1105280) original_fun = XIL(0xa920) original_args = XIL(0x2fc8f53) funcar = make_number(1644217) count = 16 argvals = {XIL(0x7fffffffc190), XIL(0xc0a7a0), XIL(0xc9e400), XIL(0), XIL(0x7fffffffc1b0), XIL(0xc12a90), XIL(0x580b87), XIL(0)} #24 0x0000000000641d39 in Feval (form=XIL(0x2fc8f43), lexical=XIL(0)) at eval.c:2061 count = 15 #25 0x0000000000644464 in funcall_subr (subr=0xb911c0 <Seval>, numargs=2, args=0x7fffffffc3f0) at eval.c:2853 internal_argbuf = {XIL(0xb911c0), XIL(0x7fffffffc2d8), make_number(1440909), XIL(0xa00c0b080), XIL(0xb911c5), XIL(0x7fffffffc2f8), XIL(0xb911c0), XIL(0x7fffffffc2f0)} internal_args = 0x7fffffffc3f0 #26 0x0000000000643f75 in Ffuncall (nargs=3, args=0x7fffffffc3e8) at eval.c:2776 fun = XIL(0xb911c5) original_fun = XIL(0x53a0) funcar = make_number(1604955) numargs = 2 val = XIL(0x7fffffffc370) count = 14 #27 0x00000000006996f0 in exec_byte_code (bytestr=XIL(0x94685c), vector=XIL(0x94687d), maxdepth=make_number(16), args_template=make_number(257), nargs=1, args=0x7fffffffc890) at bytecode.c:630 op = 2 type = (unknown: 2218598600) targets = {0x69c65f <exec_byte_code+15689>, 0x69c684 <exec_byte_code+15726>, 0x69c686 <exec_byte_code+15728>, 0x69c688 <exec_byte_code+15730>, 0x69c68a <exec_byte_code+15732>, 0x69c68a <exec_byte_code+15732>, 0x69c6ef <exec_byte_code+15833>, 0x69c763 <exec_byte_code+15949>, 0x698e2a <exec_byte_code+1300>, 0x698e2c <exec_byte_code+1302>, 0x698e2e <exec_byte_code+1304>, 0x698e30 <exec_byte_code+1306>, 0x698e32 <exec_byte_code+1308>, 0x698e32 <exec_byte_code+1308>, 0x698e38 <exec_byte_code+1314>, 0x698df9 <exec_byte_code+1251>, 0x6992fe <exec_byte_code+2536>, 0x699300 <exec_byte_code+2538>, 0x699302 <exec_byte_code+2540>, 0x699304 <exec_byte_code+2542>, 0x699306 <exec_byte_code+2544>, 0x699306 <exec_byte_code+2544>, 0x69933b <exec_byte_code+2597>, 0x69930c <exec_byte_code+2550>, 0x69960d <exec_byte_code+3319>, 0x69960f <exec_byte_code+3321>, 0x699611 <exec_byte_code+3323>, 0x699613 <exec_byte_code+3325>, 0x699615 <exec_byte_code+3327>, 0x699615 <exec_byte_code+3327>, 0x6995c7 <exec_byte_code+3249>, 0x6995de <exec_byte_code+3272>, 0x6996bd <exec_byte_code+3495>, 0x6996bf <exec_byte_code+3497>, 0x6996c1 <exec_byte_code+3499>, 0x6996c3 <exec_byte_code+3501>, 0x6996c5 <exec_byte_code+3503>, 0x6996c5 <exec_byte_code+3503>, 0x699677 <exec_byte_code+3425>, 0x69968e <exec_byte_code+3448>, 0x699772 <exec_byte_code+3676>, 0x699774 <exec_byte_code+3678>, 0x699776 <exec_byte_code+3680>, 0x699778 <exec_byte_code+3682>, 0x69977a <exec_byte_code+3684>, 0x69977a <exec_byte_code+3684>, 0x69972c <exec_byte_code+3606>, 0x699743 <exec_byte_code+3629>, 0x699fd1 <exec_byte_code+5819>, 0x699eb7 <exec_byte_code+5537>, 0x699eae <exec_byte_code+5528>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69a202 <exec_byte_code+6380>, 0x69a321 <exec_byte_code+6667>, 0x69a38b <exec_byte_code+6773>, 0x69a3f6 <exec_byte_code+6880>, 0x69a462 <exec_byte_code+6988>, 0x699151 <exec_byte_code+2107>, 0x6991d6 <exec_byte_code+2240>, 0x69a4e3 <exec_byte_code+7117>, 0x699092 <exec_byte_code+1916>, 0x69923e <exec_byte_code+2344>, 0x69a555 <exec_byte_code+7231>, 0x69a5bd <exec_byte_code+7335>, 0x69a605 <exec_byte_code+7407>, 0x69a66d <exec_byte_code+7511>, 0x69a6bf <exec_byte_code+7593>, 0x69a790 <exec_byte_code+7802>, 0x69a7d8 <exec_byte_code+7874>, 0x69a840 <exec_byte_code+7978>, 0x69a8c5 <exec_byte_code+8111>, 0x69a90d <exec_byte_code+8183>, 0x69a955 <exec_byte_code+8255>, 0x69a9bd <exec_byte_code+8359>, 0x69aa25 <exec_byte_code+8463>, 0x69aa8d <exec_byte_code+8567>, 0x69ab12 <exec_byte_code+8700>, 0x69ab64 <exec_byte_code+8782>, 0x69abb6 <exec_byte_code+8864>, 0x69ac87 <exec_byte_code+9073>, 0x69ad01 <exec_byte_code+9195>, 0x69ad7b <exec_byte_code+9317>, 0x69af47 <exec_byte_code+9777>, 0x69afb4 <exec_byte_code+9886>, 0x69b021 <exec_byte_code+9995>, 0x69b08e <exec_byte_code+10104>, 0x69b0fb <exec_byte_code+10213>, 0x69b14d <exec_byte_code+10295>, 0x69b1cb <exec_byte_code+10421>, 0x69b21d <exec_byte_code+10503>, 0x69b26f <exec_byte_code+10585>, 0x69b2c1 <exec_byte_code+10667>, 0x69b3cd <exec_byte_code+10935>, 0x699d31 <exec_byte_code+5147>, 0x69b42b <exec_byte_code+11029>, 0x69b473 <exec_byte_code+11101>, 0x69b53f <exec_byte_code+11305>, 0x69b5a8 <exec_byte_code+11410>, 0x69b606 <exec_byte_code+11504>, 0x69b64e <exec_byte_code+11576>, 0x69b694 <exec_byte_code+11646>, 0x69b6da <exec_byte_code+11716>, 0x69b728 <exec_byte_code+11794>, 0x69c65f <exec_byte_code+15689>, 0x69b780 <exec_byte_code+11882>, 0x69b7c6 <exec_byte_code+11952>, 0x69b80c <exec_byte_code+12022>, 0x69b852 <exec_byte_code+12092>, 0x69b898 <exec_byte_code+12162>, 0x69b8de <exec_byte_code+12232>, 0x699d31 <exec_byte_code+5147>, 0x69c65f <exec_byte_code+15689>, 0x69b926 <exec_byte_code+12304>, 0x69b97b <exec_byte_code+12389>, 0x69b9c3 <exec_byte_code+12461>, 0x69ba0b <exec_byte_code+12533>, 0x69ba73 <exec_byte_code+12637>, 0x69badb <exec_byte_code+12741>, 0x69bb23 <exec_byte_code+12813>, 0x69bc3d <exec_byte_code+13095>, 0x69bca5 <exec_byte_code+13199>, 0x69bd0d <exec_byte_code+13303>, 0x69bd75 <exec_byte_code+13407>, 0x69bdbb <exec_byte_code+13477>, 0x69c65f <exec_byte_code+15689>, 0x699c65 <exec_byte_code+4943>, 0x699829 <exec_byte_code+3859>, 0x699003 <exec_byte_code+1773>, 0x6998d5 <exec_byte_code+4031>, 0x699956 <exec_byte_code+4160>, 0x6999d4 <exec_byte_code+4286>, 0x699c19 <exec_byte_code+4867>, 0x699c2e <exec_byte_code+4888>, 0x699574 <exec_byte_code+3166>, 0x699ce8 <exec_byte_code+5074>, 0x699d68 <exec_byte_code+5202>, 0x699df6 <exec_byte_code+5344>, 0x699e3f <exec_byte_code+5417>, 0x69a01d <exec_byte_code+5895>, 0x69a09a <exec_byte_code+6020>, 0x69a11f <exec_byte_code+6153>, 0x69a17f <exec_byte_code+6249>, 0x6997db <exec_byte_code+3781>, 0x69be03 <exec_byte_code+13549>, 0x69be88 <exec_byte_code+13682>, 0x69bed0 <exec_byte_code+13754>, 0x69bf18 <exec_byte_code+13826>, 0x69bf60 <exec_byte_code+13898>, 0x69bfa8 <exec_byte_code+13970>, 0x69c010 <exec_byte_code+14074>, 0x69c078 <exec_byte_code+14178>, 0x69c0e0 <exec_byte_code+14282>, 0x69c148 <exec_byte_code+14386>, 0x69c2be <exec_byte_code+14760>, 0x69c326 <exec_byte_code+14864>, 0x69c38e <exec_byte_code+14968>, 0x69c3d6 <exec_byte_code+15040>, 0x69c43e <exec_byte_code+15144>, 0x69c4a6 <exec_byte_code+15248>, 0x69c4ee <exec_byte_code+15320>, 0x69c536 <exec_byte_code+15392>, 0x69b313 <exec_byte_code+10749>, 0x69b365 <exec_byte_code+10831>, 0x69c588 <exec_byte_code+15474>, 0x69c5f4 <exec_byte_code+15582>, 0x69c65f <exec_byte_code+15689>, 0x699a52 <exec_byte_code+4412>, 0x699a6f <exec_byte_code+4441>, 0x699adb <exec_byte_code+4549>, 0x699b47 <exec_byte_code+4657>, 0x699bb0 <exec_byte_code+4762>, 0x69a711 <exec_byte_code+7675>, 0x69ac08 <exec_byte_code+8946>, 0x69b4c0 <exec_byte_code+11178>, 0x69c7f6 <exec_byte_code+16096>, 0x69c86b <exec_byte_code+16213>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c901 <exec_byte_code+16363>, 0x69c988 <exec_byte_code+16498>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69cb9c <exec_byte_code+17030> <repeats 64 times>} const_length = 7 bytestr_length = 43 vectorp = 0x946880 <pure+1429664> quitcounter = 1 '\001' stack_items = 17 sa_avail = 16205 sa_count = 14 sa_must_free = false stack_base = 0x7fffffffc380 stack_lim = 0x7fffffffc408 top = 0x7fffffffc3e8 void_stack_lim = 0x7fffffffc408 bytestr_data = 0x7fffffffc408 "\301\001!\211@\001A\211@\001A\211@\001A\001\004\006\a\302\303\304\305 !\b\"\002\203#" pc = 0x7fffffffc423 "\002\203#" count = 14 result = XIL(0) #28 0x0000000000644b6f in funcall_lambda (fun=XIL(0x94682d), nargs=1, arg_vector=0x7fffffffc888) at eval.c:2977 size = 5 val = XIL(0x7fffffffc7e8) syms_left = make_number(257) next = XIL(0x1200c0b080) lexenv = XIL(0x7fffffffc7c0) count = 14 i = 0 optional = false rest = false previous_optional_or_rest = false #29 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffc880) at eval.c:2778 fun = XIL(0x94682d) original_fun = XIL(0xa39960) funcar = XIL(0x645e21) numargs = 1 val = XIL(0x7fffffffc860) count = 13 #30 0x00000000006996f0 in exec_byte_code (bytestr=XIL(0x946afc), vector=XIL(0x946b1d), maxdepth=make_number(4), args_template=make_number(257), nargs=1, args=0x7fffffffcd10) at bytecode.c:630 op = 1 type = (unknown: 12114688) targets = {0x69c65f <exec_byte_code+15689>, 0x69c684 <exec_byte_code+15726>, 0x69c686 <exec_byte_code+15728>, 0x69c688 <exec_byte_code+15730>, 0x69c68a <exec_byte_code+15732>, 0x69c68a <exec_byte_code+15732>, 0x69c6ef <exec_byte_code+15833>, 0x69c763 <exec_byte_code+15949>, 0x698e2a <exec_byte_code+1300>, 0x698e2c <exec_byte_code+1302>, 0x698e2e <exec_byte_code+1304>, 0x698e30 <exec_byte_code+1306>, 0x698e32 <exec_byte_code+1308>, 0x698e32 <exec_byte_code+1308>, 0x698e38 <exec_byte_code+1314>, 0x698df9 <exec_byte_code+1251>, 0x6992fe <exec_byte_code+2536>, 0x699300 <exec_byte_code+2538>, 0x699302 <exec_byte_code+2540>, 0x699304 <exec_byte_code+2542>, 0x699306 <exec_byte_code+2544>, 0x699306 <exec_byte_code+2544>, 0x69933b <exec_byte_code+2597>, 0x69930c <exec_byte_code+2550>, 0x69960d <exec_byte_code+3319>, 0x69960f <exec_byte_code+3321>, 0x699611 <exec_byte_code+3323>, 0x699613 <exec_byte_code+3325>, 0x699615 <exec_byte_code+3327>, 0x699615 <exec_byte_code+3327>, 0x6995c7 <exec_byte_code+3249>, 0x6995de <exec_byte_code+3272>, 0x6996bd <exec_byte_code+3495>, 0x6996bf <exec_byte_code+3497>, 0x6996c1 <exec_byte_code+3499>, 0x6996c3 <exec_byte_code+3501>, 0x6996c5 <exec_byte_code+3503>, 0x6996c5 <exec_byte_code+3503>, 0x699677 <exec_byte_code+3425>, 0x69968e <exec_byte_code+3448>, 0x699772 <exec_byte_code+3676>, 0x699774 <exec_byte_code+3678>, 0x699776 <exec_byte_code+3680>, 0x699778 <exec_byte_code+3682>, 0x69977a <exec_byte_code+3684>, 0x69977a <exec_byte_code+3684>, 0x69972c <exec_byte_code+3606>, 0x699743 <exec_byte_code+3629>, 0x699fd1 <exec_byte_code+5819>, 0x699eb7 <exec_byte_code+5537>, 0x699eae <exec_byte_code+5528>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69a202 <exec_byte_code+6380>, 0x69a321 <exec_byte_code+6667>, 0x69a38b <exec_byte_code+6773>, 0x69a3f6 <exec_byte_code+6880>, 0x69a462 <exec_byte_code+6988>, 0x699151 <exec_byte_code+2107>, 0x6991d6 <exec_byte_code+2240>, 0x69a4e3 <exec_byte_code+7117>, 0x699092 <exec_byte_code+1916>, 0x69923e <exec_byte_code+2344>, 0x69a555 <exec_byte_code+7231>, 0x69a5bd <exec_byte_code+7335>, 0x69a605 <exec_byte_code+7407>, 0x69a66d <exec_byte_code+7511>, 0x69a6bf <exec_byte_code+7593>, 0x69a790 <exec_byte_code+7802>, 0x69a7d8 <exec_byte_code+7874>, 0x69a840 <exec_byte_code+7978>, 0x69a8c5 <exec_byte_code+8111>, 0x69a90d <exec_byte_code+8183>, 0x69a955 <exec_byte_code+8255>, 0x69a9bd <exec_byte_code+8359>, 0x69aa25 <exec_byte_code+8463>, 0x69aa8d <exec_byte_code+8567>, 0x69ab12 <exec_byte_code+8700>, 0x69ab64 <exec_byte_code+8782>, 0x69abb6 <exec_byte_code+8864>, 0x69ac87 <exec_byte_code+9073>, 0x69ad01 <exec_byte_code+9195>, 0x69ad7b <exec_byte_code+9317>, 0x69af47 <exec_byte_code+9777>, 0x69afb4 <exec_byte_code+9886>, 0x69b021 <exec_byte_code+9995>, 0x69b08e <exec_byte_code+10104>, 0x69b0fb <exec_byte_code+10213>, 0x69b14d <exec_byte_code+10295>, 0x69b1cb <exec_byte_code+10421>, 0x69b21d <exec_byte_code+10503>, 0x69b26f <exec_byte_code+10585>, 0x69b2c1 <exec_byte_code+10667>, 0x69b3cd <exec_byte_code+10935>, 0x699d31 <exec_byte_code+5147>, 0x69b42b <exec_byte_code+11029>, 0x69b473 <exec_byte_code+11101>, 0x69b53f <exec_byte_code+11305>, 0x69b5a8 <exec_byte_code+11410>, 0x69b606 <exec_byte_code+11504>, 0x69b64e <exec_byte_code+11576>, 0x69b694 <exec_byte_code+11646>, 0x69b6da <exec_byte_code+11716>, 0x69b728 <exec_byte_code+11794>, 0x69c65f <exec_byte_code+15689>, 0x69b780 <exec_byte_code+11882>, 0x69b7c6 <exec_byte_code+11952>, 0x69b80c <exec_byte_code+12022>, 0x69b852 <exec_byte_code+12092>, 0x69b898 <exec_byte_code+12162>, 0x69b8de <exec_byte_code+12232>, 0x699d31 <exec_byte_code+5147>, 0x69c65f <exec_byte_code+15689>, 0x69b926 <exec_byte_code+12304>, 0x69b97b <exec_byte_code+12389>, 0x69b9c3 <exec_byte_code+12461>, 0x69ba0b <exec_byte_code+12533>, 0x69ba73 <exec_byte_code+12637>, 0x69badb <exec_byte_code+12741>, 0x69bb23 <exec_byte_code+12813>, 0x69bc3d <exec_byte_code+13095>, 0x69bca5 <exec_byte_code+13199>, 0x69bd0d <exec_byte_code+13303>, 0x69bd75 <exec_byte_code+13407>, 0x69bdbb <exec_byte_code+13477>, 0x69c65f <exec_byte_code+15689>, 0x699c65 <exec_byte_code+4943>, 0x699829 <exec_byte_code+3859>, 0x699003 <exec_byte_code+1773>, 0x6998d5 <exec_byte_code+4031>, 0x699956 <exec_byte_code+4160>, 0x6999d4 <exec_byte_code+4286>, 0x699c19 <exec_byte_code+4867>, 0x699c2e <exec_byte_code+4888>, 0x699574 <exec_byte_code+3166>, 0x699ce8 <exec_byte_code+5074>, 0x699d68 <exec_byte_code+5202>, 0x699df6 <exec_byte_code+5344>, 0x699e3f <exec_byte_code+5417>, 0x69a01d <exec_byte_code+5895>, 0x69a09a <exec_byte_code+6020>, 0x69a11f <exec_byte_code+6153>, 0x69a17f <exec_byte_code+6249>, 0x6997db <exec_byte_code+3781>, 0x69be03 <exec_byte_code+13549>, 0x69be88 <exec_byte_code+13682>, 0x69bed0 <exec_byte_code+13754>, 0x69bf18 <exec_byte_code+13826>, 0x69bf60 <exec_byte_code+13898>, 0x69bfa8 <exec_byte_code+13970>, 0x69c010 <exec_byte_code+14074>, 0x69c078 <exec_byte_code+14178>, 0x69c0e0 <exec_byte_code+14282>, 0x69c148 <exec_byte_code+14386>, 0x69c2be <exec_byte_code+14760>, 0x69c326 <exec_byte_code+14864>, 0x69c38e <exec_byte_code+14968>, 0x69c3d6 <exec_byte_code+15040>, 0x69c43e <exec_byte_code+15144>, 0x69c4a6 <exec_byte_code+15248>, 0x69c4ee <exec_byte_code+15320>, 0x69c536 <exec_byte_code+15392>, 0x69b313 <exec_byte_code+10749>, 0x69b365 <exec_byte_code+10831>, 0x69c588 <exec_byte_code+15474>, 0x69c5f4 <exec_byte_code+15582>, 0x69c65f <exec_byte_code+15689>, 0x699a52 <exec_byte_code+4412>, 0x699a6f <exec_byte_code+4441>, 0x699adb <exec_byte_code+4549>, 0x699b47 <exec_byte_code+4657>, 0x699bb0 <exec_byte_code+4762>, 0x69a711 <exec_byte_code+7675>, 0x69ac08 <exec_byte_code+8946>, 0x69b4c0 <exec_byte_code+11178>, 0x69c7f6 <exec_byte_code+16096>, 0x69c86b <exec_byte_code+16213>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c901 <exec_byte_code+16363>, 0x69c988 <exec_byte_code+16498>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69cb9c <exec_byte_code+17030> <repeats 64 times>} const_length = 4 bytestr_length = 29 vectorp = 0x946b20 <pure+1430336> quitcounter = 1 '\001' stack_items = 5 sa_avail = 16315 sa_count = 12 sa_must_free = false stack_base = 0x7fffffffc870 stack_lim = 0x7fffffffc898 top = 0x7fffffffc880 void_stack_lim = 0x7fffffffc898 bytestr_data = 0x7fffffffc898 "\b\204\b" pc = 0x7fffffffc8a5 "\n)B\211A\t=\204\032" count = 12 result = XIL(0x7fffffffcb30) #31 0x0000000000644b6f in funcall_lambda (fun=XIL(0x946abd), nargs=1, arg_vector=0x7fffffffcd08) at eval.c:2977 size = 6 val = XIL(0x7fffffffcc68) syms_left = make_number(257) next = XIL(0x1200c0b080) lexenv = make_number(1440909) count = 12 i = 0 optional = false rest = false previous_optional_or_rest = false #32 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffcd00) at eval.c:2778 fun = XIL(0x946abd) original_fun = XIL(0x4dd0a0) funcar = XIL(0xc0b080) numargs = 1 val = XIL(0xc2a0) count = 11 #33 0x00000000006996f0 in exec_byte_code (bytestr=XIL(0x94601c), vector=XIL(0x94603d), maxdepth=make_number(3), args_template=make_number(256), nargs=1, args=0x7fffffffd2a8) at bytecode.c:630 op = 1 type = (unknown: 12133568) targets = {0x69c65f <exec_byte_code+15689>, 0x69c684 <exec_byte_code+15726>, 0x69c686 <exec_byte_code+15728>, 0x69c688 <exec_byte_code+15730>, 0x69c68a <exec_byte_code+15732>, 0x69c68a <exec_byte_code+15732>, 0x69c6ef <exec_byte_code+15833>, 0x69c763 <exec_byte_code+15949>, 0x698e2a <exec_byte_code+1300>, 0x698e2c <exec_byte_code+1302>, 0x698e2e <exec_byte_code+1304>, 0x698e30 <exec_byte_code+1306>, 0x698e32 <exec_byte_code+1308>, 0x698e32 <exec_byte_code+1308>, 0x698e38 <exec_byte_code+1314>, 0x698df9 <exec_byte_code+1251>, 0x6992fe <exec_byte_code+2536>, 0x699300 <exec_byte_code+2538>, 0x699302 <exec_byte_code+2540>, 0x699304 <exec_byte_code+2542>, 0x699306 <exec_byte_code+2544>, 0x699306 <exec_byte_code+2544>, 0x69933b <exec_byte_code+2597>, 0x69930c <exec_byte_code+2550>, 0x69960d <exec_byte_code+3319>, 0x69960f <exec_byte_code+3321>, 0x699611 <exec_byte_code+3323>, 0x699613 <exec_byte_code+3325>, 0x699615 <exec_byte_code+3327>, 0x699615 <exec_byte_code+3327>, 0x6995c7 <exec_byte_code+3249>, 0x6995de <exec_byte_code+3272>, 0x6996bd <exec_byte_code+3495>, 0x6996bf <exec_byte_code+3497>, 0x6996c1 <exec_byte_code+3499>, 0x6996c3 <exec_byte_code+3501>, 0x6996c5 <exec_byte_code+3503>, 0x6996c5 <exec_byte_code+3503>, 0x699677 <exec_byte_code+3425>, 0x69968e <exec_byte_code+3448>, 0x699772 <exec_byte_code+3676>, 0x699774 <exec_byte_code+3678>, 0x699776 <exec_byte_code+3680>, 0x699778 <exec_byte_code+3682>, 0x69977a <exec_byte_code+3684>, 0x69977a <exec_byte_code+3684>, 0x69972c <exec_byte_code+3606>, 0x699743 <exec_byte_code+3629>, 0x699fd1 <exec_byte_code+5819>, 0x699eb7 <exec_byte_code+5537>, 0x699eae <exec_byte_code+5528>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69a202 <exec_byte_code+6380>, 0x69a321 <exec_byte_code+6667>, 0x69a38b <exec_byte_code+6773>, 0x69a3f6 <exec_byte_code+6880>, 0x69a462 <exec_byte_code+6988>, 0x699151 <exec_byte_code+2107>, 0x6991d6 <exec_byte_code+2240>, 0x69a4e3 <exec_byte_code+7117>, 0x699092 <exec_byte_code+1916>, 0x69923e <exec_byte_code+2344>, 0x69a555 <exec_byte_code+7231>, 0x69a5bd <exec_byte_code+7335>, 0x69a605 <exec_byte_code+7407>, 0x69a66d <exec_byte_code+7511>, 0x69a6bf <exec_byte_code+7593>, 0x69a790 <exec_byte_code+7802>, 0x69a7d8 <exec_byte_code+7874>, 0x69a840 <exec_byte_code+7978>, 0x69a8c5 <exec_byte_code+8111>, 0x69a90d <exec_byte_code+8183>, 0x69a955 <exec_byte_code+8255>, 0x69a9bd <exec_byte_code+8359>, 0x69aa25 <exec_byte_code+8463>, 0x69aa8d <exec_byte_code+8567>, 0x69ab12 <exec_byte_code+8700>, 0x69ab64 <exec_byte_code+8782>, 0x69abb6 <exec_byte_code+8864>, 0x69ac87 <exec_byte_code+9073>, 0x69ad01 <exec_byte_code+9195>, 0x69ad7b <exec_byte_code+9317>, 0x69af47 <exec_byte_code+9777>, 0x69afb4 <exec_byte_code+9886>, 0x69b021 <exec_byte_code+9995>, 0x69b08e <exec_byte_code+10104>, 0x69b0fb <exec_byte_code+10213>, 0x69b14d <exec_byte_code+10295>, 0x69b1cb <exec_byte_code+10421>, 0x69b21d <exec_byte_code+10503>, 0x69b26f <exec_byte_code+10585>, 0x69b2c1 <exec_byte_code+10667>, 0x69b3cd <exec_byte_code+10935>, 0x699d31 <exec_byte_code+5147>, 0x69b42b <exec_byte_code+11029>, 0x69b473 <exec_byte_code+11101>, 0x69b53f <exec_byte_code+11305>, 0x69b5a8 <exec_byte_code+11410>, 0x69b606 <exec_byte_code+11504>, 0x69b64e <exec_byte_code+11576>, 0x69b694 <exec_byte_code+11646>, 0x69b6da <exec_byte_code+11716>, 0x69b728 <exec_byte_code+11794>, 0x69c65f <exec_byte_code+15689>, 0x69b780 <exec_byte_code+11882>, 0x69b7c6 <exec_byte_code+11952>, 0x69b80c <exec_byte_code+12022>, 0x69b852 <exec_byte_code+12092>, 0x69b898 <exec_byte_code+12162>, 0x69b8de <exec_byte_code+12232>, 0x699d31 <exec_byte_code+5147>, 0x69c65f <exec_byte_code+15689>, 0x69b926 <exec_byte_code+12304>, 0x69b97b <exec_byte_code+12389>, 0x69b9c3 <exec_byte_code+12461>, 0x69ba0b <exec_byte_code+12533>, 0x69ba73 <exec_byte_code+12637>, 0x69badb <exec_byte_code+12741>, 0x69bb23 <exec_byte_code+12813>, 0x69bc3d <exec_byte_code+13095>, 0x69bca5 <exec_byte_code+13199>, 0x69bd0d <exec_byte_code+13303>, 0x69bd75 <exec_byte_code+13407>, 0x69bdbb <exec_byte_code+13477>, 0x69c65f <exec_byte_code+15689>, 0x699c65 <exec_byte_code+4943>, 0x699829 <exec_byte_code+3859>, 0x699003 <exec_byte_code+1773>, 0x6998d5 <exec_byte_code+4031>, 0x699956 <exec_byte_code+4160>, 0x6999d4 <exec_byte_code+4286>, 0x699c19 <exec_byte_code+4867>, 0x699c2e <exec_byte_code+4888>, 0x699574 <exec_byte_code+3166>, 0x699ce8 <exec_byte_code+5074>, 0x699d68 <exec_byte_code+5202>, 0x699df6 <exec_byte_code+5344>, 0x699e3f <exec_byte_code+5417>, 0x69a01d <exec_byte_code+5895>, 0x69a09a <exec_byte_code+6020>, 0x69a11f <exec_byte_code+6153>, 0x69a17f <exec_byte_code+6249>, 0x6997db <exec_byte_code+3781>, 0x69be03 <exec_byte_code+13549>, 0x69be88 <exec_byte_code+13682>, 0x69bed0 <exec_byte_code+13754>, 0x69bf18 <exec_byte_code+13826>, 0x69bf60 <exec_byte_code+13898>, 0x69bfa8 <exec_byte_code+13970>, 0x69c010 <exec_byte_code+14074>, 0x69c078 <exec_byte_code+14178>, 0x69c0e0 <exec_byte_code+14282>, 0x69c148 <exec_byte_code+14386>, 0x69c2be <exec_byte_code+14760>, 0x69c326 <exec_byte_code+14864>, 0x69c38e <exec_byte_code+14968>, 0x69c3d6 <exec_byte_code+15040>, 0x69c43e <exec_byte_code+15144>, 0x69c4a6 <exec_byte_code+15248>, 0x69c4ee <exec_byte_code+15320>, 0x69c536 <exec_byte_code+15392>, 0x69b313 <exec_byte_code+10749>, 0x69b365 <exec_byte_code+10831>, 0x69c588 <exec_byte_code+15474>, 0x69c5f4 <exec_byte_code+15582>, 0x69c65f <exec_byte_code+15689>, 0x699a52 <exec_byte_code+4412>, 0x699a6f <exec_byte_code+4441>, 0x699adb <exec_byte_code+4549>, 0x699b47 <exec_byte_code+4657>, 0x699bb0 <exec_byte_code+4762>, 0x69a711 <exec_byte_code+7675>, 0x69ac08 <exec_byte_code+8946>, 0x69b4c0 <exec_byte_code+11178>, 0x69c7f6 <exec_byte_code+16096>, 0x69c86b <exec_byte_code+16213>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c901 <exec_byte_code+16363>, 0x69c988 <exec_byte_code+16498>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69cb9c <exec_byte_code+17030> <repeats 64 times>} const_length = 4 bytestr_length = 17 vectorp = 0x946040 <pure+1427552> quitcounter = 1 '\001' stack_items = 4 sa_avail = 16335 sa_count = 10 sa_must_free = false stack_base = 0x7fffffffccf0 stack_lim = 0x7fffffffcd10 top = 0x7fffffffcd00 void_stack_lim = 0x7fffffffcd10 bytestr_data = 0x7fffffffcd10 "p\030\301 \210\302\001\206\v" pc = 0x7fffffffcd1c "\210\301 )\207\320\377\377\377\177" count = 10 result = XIL(0x2fc92d3) #34 0x0000000000644b6f in funcall_lambda (fun=XIL(0x945fdd), nargs=1, arg_vector=0x7fffffffd2a0) at eval.c:2977 size = 6 val = XIL(0x7fffffffd0d8) syms_left = make_number(256) next = XIL(0x1200c0b080) lexenv = XIL(0x7fffffffd0b0) count = 10 i = 0 optional = false rest = false previous_optional_or_rest = false #35 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffd298) at eval.c:2778 fun = XIL(0x945fdd) original_fun = XIL(0xa39590) funcar = XIL(0x589371) numargs = 1 val = XIL(0) count = 9 #36 0x0000000000639907 in Ffuncall_interactively (nargs=2, args=0x7fffffffd298) at callint.c:252 speccount = 8 #37 0x0000000000644337 in funcall_subr (subr=0xb90a00 <Sfuncall_interactively>, numargs=2, args=0x7fffffffd298) at eval.c:2831 #38 0x0000000000643f75 in Ffuncall (nargs=3, args=0x7fffffffd290) at eval.c:2776 fun = XIL(0xb90a05) original_fun = XIL(0x66c0) funcar = XIL(0x645e21) numargs = 2 val = XIL(0x7fffffffd280) count = 7 #39 0x000000000063bde9 in Fcall_interactively (function=XIL(0xa39590), record_flag=XIL(0), keys=XIL(0xca3695)) at callint.c:854 val = XIL(0) args = 0x7fffffffd290 visargs = 0x7fffffffd2a8 specs = XIL(0x80fa7c) filter_specs = XIL(0x80fa7c) teml = XIL(0x7fffffffd108) up_event = XIL(0) enable = XIL(0) sa_avail = 16310 sa_count = 6 sa_must_free = false speccount = 6 next_event = 1 prefix_arg = XIL(0) string = 0x7fffffffd2e0 "P" tem = 0x77842b "" varies = 0x7fffffffd2c0 "" i = 3 nargs = 3 mark = 5760715 arg_from_tty = false key_count = 1 record_then_fail = false save_this_command = XIL(0xa39590) save_last_command = XIL(0x4628d0) save_this_original_command = XIL(0xa39590) save_real_this_command = XIL(0xa39590) #40 0x0000000000644490 in funcall_subr (subr=0xb90a40 <Scall_interactively>, numargs=3, args=0x7fffffffd610) at eval.c:2856 internal_argbuf = {XIL(0xb90a40), XIL(0x7fffffffd528), make_number(1440909), XIL(0xa00c0b080), XIL(0xb90a45), XIL(0x7fffffffd548), XIL(0xb90a40), XIL(0x7fffffffd540)} internal_args = 0x7fffffffd610 #41 0x0000000000643f75 in Ffuncall (nargs=4, args=0x7fffffffd608) at eval.c:2776 fun = XIL(0xb90a45) original_fun = XIL(0xb1b80) funcar = XIL(0xc0b080) numargs = 3 val = XIL(0) count = 5 #42 0x00000000006996f0 in exec_byte_code (bytestr=XIL(0x8aea5c), vector=XIL(0x8aea7d), maxdepth=make_number(13), args_template=make_number(1025), nargs=1, args=0x7fffffffdb40) at bytecode.c:630 op = 3 type = CATCHER targets = {0x69c65f <exec_byte_code+15689>, 0x69c684 <exec_byte_code+15726>, 0x69c686 <exec_byte_code+15728>, 0x69c688 <exec_byte_code+15730>, 0x69c68a <exec_byte_code+15732>, 0x69c68a <exec_byte_code+15732>, 0x69c6ef <exec_byte_code+15833>, 0x69c763 <exec_byte_code+15949>, 0x698e2a <exec_byte_code+1300>, 0x698e2c <exec_byte_code+1302>, 0x698e2e <exec_byte_code+1304>, 0x698e30 <exec_byte_code+1306>, 0x698e32 <exec_byte_code+1308>, 0x698e32 <exec_byte_code+1308>, 0x698e38 <exec_byte_code+1314>, 0x698df9 <exec_byte_code+1251>, 0x6992fe <exec_byte_code+2536>, 0x699300 <exec_byte_code+2538>, 0x699302 <exec_byte_code+2540>, 0x699304 <exec_byte_code+2542>, 0x699306 <exec_byte_code+2544>, 0x699306 <exec_byte_code+2544>, 0x69933b <exec_byte_code+2597>, 0x69930c <exec_byte_code+2550>, 0x69960d <exec_byte_code+3319>, 0x69960f <exec_byte_code+3321>, 0x699611 <exec_byte_code+3323>, 0x699613 <exec_byte_code+3325>, 0x699615 <exec_byte_code+3327>, 0x699615 <exec_byte_code+3327>, 0x6995c7 <exec_byte_code+3249>, 0x6995de <exec_byte_code+3272>, 0x6996bd <exec_byte_code+3495>, 0x6996bf <exec_byte_code+3497>, 0x6996c1 <exec_byte_code+3499>, 0x6996c3 <exec_byte_code+3501>, 0x6996c5 <exec_byte_code+3503>, 0x6996c5 <exec_byte_code+3503>, 0x699677 <exec_byte_code+3425>, 0x69968e <exec_byte_code+3448>, 0x699772 <exec_byte_code+3676>, 0x699774 <exec_byte_code+3678>, 0x699776 <exec_byte_code+3680>, 0x699778 <exec_byte_code+3682>, 0x69977a <exec_byte_code+3684>, 0x69977a <exec_byte_code+3684>, 0x69972c <exec_byte_code+3606>, 0x699743 <exec_byte_code+3629>, 0x699fd1 <exec_byte_code+5819>, 0x699eb7 <exec_byte_code+5537>, 0x699eae <exec_byte_code+5528>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69a202 <exec_byte_code+6380>, 0x69a321 <exec_byte_code+6667>, 0x69a38b <exec_byte_code+6773>, 0x69a3f6 <exec_byte_code+6880>, 0x69a462 <exec_byte_code+6988>, 0x699151 <exec_byte_code+2107>, 0x6991d6 <exec_byte_code+2240>, 0x69a4e3 <exec_byte_code+7117>, 0x699092 <exec_byte_code+1916>, 0x69923e <exec_byte_code+2344>, 0x69a555 <exec_byte_code+7231>, 0x69a5bd <exec_byte_code+7335>, 0x69a605 <exec_byte_code+7407>, 0x69a66d <exec_byte_code+7511>, 0x69a6bf <exec_byte_code+7593>, 0x69a790 <exec_byte_code+7802>, 0x69a7d8 <exec_byte_code+7874>, 0x69a840 <exec_byte_code+7978>, 0x69a8c5 <exec_byte_code+8111>, 0x69a90d <exec_byte_code+8183>, 0x69a955 <exec_byte_code+8255>, 0x69a9bd <exec_byte_code+8359>, 0x69aa25 <exec_byte_code+8463>, 0x69aa8d <exec_byte_code+8567>, 0x69ab12 <exec_byte_code+8700>, 0x69ab64 <exec_byte_code+8782>, 0x69abb6 <exec_byte_code+8864>, 0x69ac87 <exec_byte_code+9073>, 0x69ad01 <exec_byte_code+9195>, 0x69ad7b <exec_byte_code+9317>, 0x69af47 <exec_byte_code+9777>, 0x69afb4 <exec_byte_code+9886>, 0x69b021 <exec_byte_code+9995>, 0x69b08e <exec_byte_code+10104>, 0x69b0fb <exec_byte_code+10213>, 0x69b14d <exec_byte_code+10295>, 0x69b1cb <exec_byte_code+10421>, 0x69b21d <exec_byte_code+10503>, 0x69b26f <exec_byte_code+10585>, 0x69b2c1 <exec_byte_code+10667>, 0x69b3cd <exec_byte_code+10935>, 0x699d31 <exec_byte_code+5147>, 0x69b42b <exec_byte_code+11029>, 0x69b473 <exec_byte_code+11101>, 0x69b53f <exec_byte_code+11305>, 0x69b5a8 <exec_byte_code+11410>, 0x69b606 <exec_byte_code+11504>, 0x69b64e <exec_byte_code+11576>, 0x69b694 <exec_byte_code+11646>, 0x69b6da <exec_byte_code+11716>, 0x69b728 <exec_byte_code+11794>, 0x69c65f <exec_byte_code+15689>, 0x69b780 <exec_byte_code+11882>, 0x69b7c6 <exec_byte_code+11952>, 0x69b80c <exec_byte_code+12022>, 0x69b852 <exec_byte_code+12092>, 0x69b898 <exec_byte_code+12162>, 0x69b8de <exec_byte_code+12232>, 0x699d31 <exec_byte_code+5147>, 0x69c65f <exec_byte_code+15689>, 0x69b926 <exec_byte_code+12304>, 0x69b97b <exec_byte_code+12389>, 0x69b9c3 <exec_byte_code+12461>, 0x69ba0b <exec_byte_code+12533>, 0x69ba73 <exec_byte_code+12637>, 0x69badb <exec_byte_code+12741>, 0x69bb23 <exec_byte_code+12813>, 0x69bc3d <exec_byte_code+13095>, 0x69bca5 <exec_byte_code+13199>, 0x69bd0d <exec_byte_code+13303>, 0x69bd75 <exec_byte_code+13407>, 0x69bdbb <exec_byte_code+13477>, 0x69c65f <exec_byte_code+15689>, 0x699c65 <exec_byte_code+4943>, 0x699829 <exec_byte_code+3859>, 0x699003 <exec_byte_code+1773>, 0x6998d5 <exec_byte_code+4031>, 0x699956 <exec_byte_code+4160>, 0x6999d4 <exec_byte_code+4286>, 0x699c19 <exec_byte_code+4867>, 0x699c2e <exec_byte_code+4888>, 0x699574 <exec_byte_code+3166>, 0x699ce8 <exec_byte_code+5074>, 0x699d68 <exec_byte_code+5202>, 0x699df6 <exec_byte_code+5344>, 0x699e3f <exec_byte_code+5417>, 0x69a01d <exec_byte_code+5895>, 0x69a09a <exec_byte_code+6020>, 0x69a11f <exec_byte_code+6153>, 0x69a17f <exec_byte_code+6249>, 0x6997db <exec_byte_code+3781>, 0x69be03 <exec_byte_code+13549>, 0x69be88 <exec_byte_code+13682>, 0x69bed0 <exec_byte_code+13754>, 0x69bf18 <exec_byte_code+13826>, 0x69bf60 <exec_byte_code+13898>, 0x69bfa8 <exec_byte_code+13970>, 0x69c010 <exec_byte_code+14074>, 0x69c078 <exec_byte_code+14178>, 0x69c0e0 <exec_byte_code+14282>, 0x69c148 <exec_byte_code+14386>, 0x69c2be <exec_byte_code+14760>, 0x69c326 <exec_byte_code+14864>, 0x69c38e <exec_byte_code+14968>, 0x69c3d6 <exec_byte_code+15040>, 0x69c43e <exec_byte_code+15144>, 0x69c4a6 <exec_byte_code+15248>, 0x69c4ee <exec_byte_code+15320>, 0x69c536 <exec_byte_code+15392>, 0x69b313 <exec_byte_code+10749>, 0x69b365 <exec_byte_code+10831>, 0x69c588 <exec_byte_code+15474>, 0x69c5f4 <exec_byte_code+15582>, 0x69c65f <exec_byte_code+15689>, 0x699a52 <exec_byte_code+4412>, 0x699a6f <exec_byte_code+4441>, 0x699adb <exec_byte_code+4549>, 0x699b47 <exec_byte_code+4657>, 0x699bb0 <exec_byte_code+4762>, 0x69a711 <exec_byte_code+7675>, 0x69ac08 <exec_byte_code+8946>, 0x69b4c0 <exec_byte_code+11178>, 0x69c7f6 <exec_byte_code+16096>, 0x69c86b <exec_byte_code+16213>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c901 <exec_byte_code+16363>, 0x69c988 <exec_byte_code+16498>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69c65f <exec_byte_code+15689>, 0x69cb9c <exec_byte_code+17030> <repeats 64 times>} const_length = 25 bytestr_length = 165 vectorp = 0x8aea80 <pure+807584> quitcounter = 1 '\001' stack_items = 14 sa_avail = 16107 sa_count = 5 sa_must_free = false stack_base = 0x7fffffffd5d0 stack_lim = 0x7fffffffd640 top = 0x7fffffffd608 void_stack_lim = 0x7fffffffd640 bytestr_data = 0x7fffffffd640 "\306\020\211?\205\023" pc = 0x7fffffffd6bb "\006\006\071\203\242" count = 5 result = XIL(0) #43 0x0000000000644b6f in funcall_lambda (fun=XIL(0x8aea2d), nargs=1, arg_vector=0x7fffffffdb38) at eval.c:2977 size = 5 val = XIL(0x7fffffffda98) syms_left = make_number(1025) next = XIL(0x1200c0b080) lexenv = make_number(34910567923712) count = 5 i = 0 optional = false rest = false previous_optional_or_rest = false #44 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffdb30) at eval.c:2778 fun = XIL(0x8aea2d) original_fun = XIL(0x3f30) funcar = XIL(0x1) numargs = 1 val = XIL(0x7fffffffdb38) count = 4 #45 0x0000000000643891 in call1 (fn=XIL(0x3f30), arg1=XIL(0xa39590)) at eval.c:2627 #46 0x000000000058a56b in command_loop_1 () at keyboard.c:1482 scount = 3 cmd = XIL(0xa39590) keybuf = {make_number(10), XIL(0x2012e48b3), XIL(0), XIL(0x7a10), XIL(0x10000010f), XIL(0), XIL(0xc0a7a0), XIL(0x7a10), make_number(55834574852), XIL(0xc12a90), XIL(0x7fffffffdbc0), XIL(0), XIL(0x7fffffffdc00), make_number(1644723), make_number(34910567923712), XIL(0xc0b080), XIL(0x580b87), XIL(0), XIL(0x7fffffffdc00), XIL(0x57e6cb), XIL(0), XIL(0xc0b080), XIL(0x7fffffffdc60), XIL(0), XIL(0x7fffffffdc30), XIL(0x57e6cb), XIL(0x5), XIL(0x7a10), XIL(0x7fffffffdc70), XIL(0x640415)} i = 1 prev_modiff = 182 prev_buffer = 0xc9e400 <bss_sbrk_buffer+455584> already_adjusted = false #47 0x000000000063fffe in internal_condition_case (bfun=0x589d5b <command_loop_1>, handlers=XIL(0x5280), hfun=0x5893bf <cmd_error>) at eval.c:1336 val = XIL(0x57e6cb) c = 0x2c80280 #48 0x0000000000589971 in command_loop_2 (ignore=XIL(0)) at keyboard.c:1110 val = XIL(0xc900) #49 0x000000000063f4fd in internal_catch (tag=XIL(0xc900), func=0x589944 <command_loop_2>, arg=XIL(0)) at eval.c:1101 val = XIL(0) c = 0x2c80160 #50 0x000000000058990f in command_loop () at keyboard.c:1089 #51 0x0000000000588ea8 in recursive_edit_1 () at keyboard.c:695 count = 1 val = XIL(0x7fffffffdde0) #52 0x000000000058909d in Frecursive_edit () at keyboard.c:766 count = 0 buffer = XIL(0) #53 0x0000000000586c3c in main (argc=3, argv=0x7fffffffe028) at emacs.c:1717 stack_bottom_variable = 0x2c6c290 do_initial_setlocale = true dumping = false skip_args = 1 no_loadup = false junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x0 original_pwd = 0x0 disable_aslr = false rlim = { rlim_cur = 10022912, rlim_max = 18446744073709551615 } sockfd = -1 module_assertions = true Lisp Backtrace: "file-name-as-directory" (0xffffb7c8) "realpath-truename" (0xffffbb70) "while" (0xffffbe50) "let" (0xffffc070) "progn" (0xffffc1c0) "eval" (0xffffc3f0) "elisp--eval-last-sexp" (0xffffc888) "eval-last-sexp" (0xffffcd08) "eval-print-last-sexp" (0xffffd2a0) "funcall-interactively" (0xffffd298) "call-interactively" (0xffffd610) "command-execute" (0xffffdb38) [-- Attachment #2: Type: text/plain, Size: 1968 bytes --] I have written a dynamic module which provides a function realpath-truename similar to file-truename, but which uses canonicalize_file_name(3) internally and which doesn't respect file name handlers. It is hosted at the following URL: https://gitlab.com/basil-conto/realpath Repeatedly calling realpath-truename on a directory name in an Emacs started with --module-assertions segfaults in a call to file-name-as-directory. The precise recipe I am using is the following: 0. git clone https://gitlab.com/basil-conto/realpath.git 1. cd realpath 2. make 3. cd /path/to/emacs/src 4. gdb emacs 5. set logging on 6. run -Q --module-assertions 7. (progn (module-load "/path/to/realpath.so") (dotimes (_ 1000) (realpath-truename user-emacs-directory))) C-j 9. bt full I attach the corresponding GDB log. I am not confident that the module is written properly, in particular w.r.t. nonlocal exits, but I don't see what, if anything, I am doing wrong, so any help would be greatly appreciated. Thanks, -- Basil In GNU Emacs 26.1.92 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2019-02-25 built on thunk Repository revision: 1dff09739346037a588a3b9290800c09a9b3409a Windowing system distributor 'The X.Org Foundation', version 11.0.12003000 System Description: Debian GNU/Linux buster/sid Configured using: 'configure 'CC=ccache gcc' 'CFLAGS=-O0 -g3 -ggdb -gdwarf-4 -pipe' --config-cache --prefix=/home/blc/.local --program-suffix=26 --enable-checking=yes,glyphs --enable-check-lisp-object-type --with-mailutils --with-x-toolkit=lucid --with-modules --with-file-notification=yes --with-x' Configured features: XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS GLIB NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD LCMS2 Important settings: value of $LANG: en_IE.UTF-8 locale-coding-system: utf-8-unix ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-25 21:00 bug#34655: 26.1.92; Segfault in module with --module-assertions Basil L. Contovounesios @ 2019-02-26 2:59 ` Richard Stallman 2019-02-26 11:16 ` Basil L. Contovounesios 2019-02-26 15:45 ` Eli Zaretskii 1 sibling, 1 reply; 32+ messages in thread From: Richard Stallman @ 2019-02-26 2:59 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I have written a dynamic module which provides a function > realpath-truename The function might be useful, but that is not the right name for it. In the GNU system we do not use "path" to mean a file name. Could you describe in words what job the function does? Then I could suggest a name. -- Dr Richard Stallman President, Free Software Foundation (https://gnu.org, https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-26 2:59 ` Richard Stallman @ 2019-02-26 11:16 ` Basil L. Contovounesios 2019-02-26 15:27 ` Eli Zaretskii 2019-02-27 4:10 ` Richard Stallman 0 siblings, 2 replies; 32+ messages in thread From: Basil L. Contovounesios @ 2019-02-26 11:16 UTC (permalink / raw) To: Richard Stallman; +Cc: 34655 Richard Stallman <rms@gnu.org> writes: > > I have written a dynamic module which provides a function > > realpath-truename > > The function might be useful, but that is not the right name for it. > In the GNU system we do not use "path" to mean a file name. Thanks, I am aware of this. See below for how the name came to be. > Could you describe in words what job the function does? > Then I could suggest a name. Thanks, but just to clarify: I have not written this module with the intention of advertising it for others to use; I don't think anyone would find it of great use. I was motivated to write it to test Emacs' new (at the time) module system, and because, with enough packages installed, file-truename slowed down package-initialize (and thus my emacs-init-time) by a non-negligible amount. I thus overrode file-truename with realpath-truename using advice, with the caveat that realpath-truename does not respect file name handlers (in practice I never needed this). The new package-quickstart feature has made the module largely unnecessary. Either way, I regard it as a personal experiment. Re: the name, I chose 'realpath' because the original implementation was just that: a wrapper around realpath(3). It was only in a later version that I switched to using canonicalize_file_name(3) instead. Perhaps a better name would have been 'truename' or similar, but I don't think this is important enough a matter to justify renaming it now. Do you? The reason I submitted this bug report is because I don't know whether the switch --module-assertions has unveiled an issue in my module or Emacs' module implementation. -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-26 11:16 ` Basil L. Contovounesios @ 2019-02-26 15:27 ` Eli Zaretskii 2019-02-26 18:42 ` Basil L. Contovounesios 2019-02-27 4:10 ` Richard Stallman 1 sibling, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-02-26 15:27 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655, rms > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Date: Tue, 26 Feb 2019 11:16:56 +0000 > Cc: 34655@debbugs.gnu.org > > The reason I submitted this bug report is because I don't know whether > the switch --module-assertions has unveiled an issue in my module or > Emacs' module implementation. So without using --module-assertions the crash doesn't happen, is that what you are saying? ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-26 15:27 ` Eli Zaretskii @ 2019-02-26 18:42 ` Basil L. Contovounesios 0 siblings, 0 replies; 32+ messages in thread From: Basil L. Contovounesios @ 2019-02-26 18:42 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 34655, rms Eli Zaretskii <eliz@gnu.org> writes: >> From: "Basil L. Contovounesios" <contovob@tcd.ie> >> Date: Tue, 26 Feb 2019 11:16:56 +0000 >> Cc: 34655@debbugs.gnu.org >> >> The reason I submitted this bug report is because I don't know whether >> the switch --module-assertions has unveiled an issue in my module or >> Emacs' module implementation. > > So without using --module-assertions the crash doesn't happen, is that > what you are saying? Yes. I can't guarantee the crash doesn't happen without --module-assertions of course, but in my tests it only seems to crop up with the switch (and reliably so). -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-26 11:16 ` Basil L. Contovounesios 2019-02-26 15:27 ` Eli Zaretskii @ 2019-02-27 4:10 ` Richard Stallman 1 sibling, 0 replies; 32+ messages in thread From: Richard Stallman @ 2019-02-27 4:10 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Re: the name, I chose 'realpath' because the original implementation was > just that: a wrapper around realpath(3). It was only in a later version > that I switched to using canonicalize_file_name(3) instead. Perhaps a > better name would have been 'truename' or similar, but I don't think > this is important enough a matter to justify renaming it now. Do you? If you don't think it is worth publicizing, and you don't really want to use it, I won't claim that minor fixes in it are important. A good name might be nonmagic-file-truename -- Dr Richard Stallman President, Free Software Foundation (https://gnu.org, https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-25 21:00 bug#34655: 26.1.92; Segfault in module with --module-assertions Basil L. Contovounesios 2019-02-26 2:59 ` Richard Stallman @ 2019-02-26 15:45 ` Eli Zaretskii 2019-03-17 16:38 ` Basil L. Contovounesios 1 sibling, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-02-26 15:45 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655 > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Date: Mon, 25 Feb 2019 21:00:41 +0000 > > Starting program: /home/blc/.local/src/emacs26/src/emacs -Q --module-assertions > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". > [New Thread 0x7ffff01cb700 (LWP 8299)] > [New Thread 0x7fffef9ac700 (LWP 8300)] > [New Thread 0x7fffef1ab700 (LWP 8301)] > > Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. > re_search_2 (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, > range=18, regs=0x0, stop=18) at regex.c:4354 > 4354 buf_ch = STRING_CHAR_AND_LENGTH (d, buf_charlen); > #0 0x0000000000608594 in re_search_2 > (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, range=18, regs=0x0, stop=18) at regex.c:4354 > buf_charlen = 0 > irange = 18 > lim = 0 > d = 0x0 > buf_ch = 18 > val = 691541629 > string1 = 0x0 > string2 = 0x0 > fastmap = 0xbf5d38 <searchbufs+440> "" > translate = make_number(0) > total_size = 18 > endpos = 18 > anchored_start = 0 '\000' > multibyte = 1 '\001' > #1 0x0000000000607f91 in re_search > (bufp=0xbf5d00 <searchbufs+384>, string=0x0, size=18, startpos=0, range=18, regs=0x0) > at regex.c:4181 > #2 0x00000000005f3fd0 in fast_string_match_internal > (regexp=XIL(0x8c761c), string=XIL(0x3036ec4), table=XIL(0)) at search.c:485 > val = 140737488336288 > bufp = 0xbf5d00 <searchbufs+384> Here's your problem: fast_string_match_internal got a Lisp string=XIL(0x3036ec4), but its data passed to re_search as the 2nd arg is a NULL pointer. You need to find out how this happens, e.g. by setting a watchpoint on string's data inside Ffile_name_as_directory. Or maybe the string is already corrupted there? ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-02-26 15:45 ` Eli Zaretskii @ 2019-03-17 16:38 ` Basil L. Contovounesios 2019-03-17 17:08 ` Eli Zaretskii 0 siblings, 1 reply; 32+ messages in thread From: Basil L. Contovounesios @ 2019-03-17 16:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 34655, Philipp Stephani [-- Attachment #1: gdb.txt --] [-- Type: text/plain, Size: 43910 bytes --] Starting program: /home/blc/.local/src/emacs26/src/emacs -Q --module-assertions [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff07c1700 (LWP 31458)] [New Thread 0x7fffefe12700 (LWP 31459)] [New Thread 0x7fffef481700 (LWP 31460)] Thread 1 "emacs" hit Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:364 364 signal (sig, SIG_DFL); #0 0x0000000000584d53 in terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:364 #1 0x000000000061bfdf in die (msg=0x786cf2 "STRINGP (*p) && SSDATA (*p)", file=0x7869a0 "emacs-module.c", line=984) at alloc.c:7406 #2 0x00000000006854ce in value_to_lisp (v=0x3059c90) at emacs-module.c:984 p = 0x3059c90 values = XIL(0x2fb6243) env = 0x3059b70 environments = XIL(0x2fb6353) vptr = 0x3059c90 optr = 0x3059c90 num_environments = 0 num_values = 3 b = true o = XIL(0x7fffffffb5b0) #3 0x0000000000682ad6 in module_funcall (env=0x3059b70, fun=0x2e52d60, nargs=1, args=0x7fffffffb728) at emacs-module.c:480 i = 0 internal_handler_CONDITION_CASE = 0x2c802a0 internal_cleanup_CONDITION_CASE = 0x2c802a0 internal_handler_CATCHER_ALL = 0x2c7f9c0 internal_cleanup_CATCHER_ALL = 0x2c7f9c0 newargs = 0x7fffffffb5e0 sa_avail = 16368 sa_count = 23 sa_must_free = false nargs1 = 2 result = 0x7fffffffb6a0 #4 0x00007fffee809263 in rp_funcall (env=0x3059b70, value=0x7fffffffb728, name=0x7fffee80a02d "file-name-as-directory", nargs=1, args=0x7fffffffb728) at realpath.c:62 #5 0x00007fffee80951e in Frealpath_truename (env=0x3059b70, nargs=1, args=0x7fffffffb750, data=0x0) at realpath.c:127 file = 0x3059c90 dir = 0x2e3db80 obuf = 0x3059c70 "/home/blc/.emacs.d/" nbuf = 0x3059ce0 "/home/blc/.emacs.d" #6 0x0000000000684eb8 in funcall_module (function=XIL(0x2cd8fc5), nargs=1, arglist=0x7fffffffb990) at emacs-module.c:788 func = 0x2cd8fc0 pub = { size = 140737488336824, private_members = 0x7ffff6c43760, make_global_ref = 0x2c85380, free_global_ref = 0x0, non_local_exit_check = 0x7fffffffb830, non_local_exit_clear = 0x8ec8b95782e18b00, non_local_exit_get = 0x2c85380, non_local_exit_signal = 0x2c85380, non_local_exit_throw = 0x7fffffffb840, make_function = 0xc17f20 <lispsym+52896>, funcall = 0x42, intern = 0xcea0, type_of = 0x7fffffffb820, is_not_nil = 0x57e6cb <builtin_lisp_symbol+48>, eq = 0x7fffffffb840, extract_integer = 0x44e01043390, make_integer = 0x7fffffffb860, extract_float = 0x61f56e <Fsymbol_value+43>, make_float = 0x7fffffffb840, copy_string_contents = 0x438310 <x_figure_window_size+6133>, make_string = 0x7fffffffb860, make_user_ptr = 0x8096c4 <pure+130788>, get_user_ptr = 0x580dca <FRAMEP+29>, set_user_ptr = 0x0, get_user_finalizer = 0x7fffffffb980, set_user_finalizer = 0x642070 <eval_sub+210>, vec_get = 0x7fffffffb890, vec_set = 0x438310 <x_figure_window_size+6133>, vec_size = 0x2d94b15, should_quit = 0x7e4480 <x_redisplay_interface> } priv = { pending_non_local_exit = emacs_funcall_exit_return, non_local_exit_symbol = XIL(0), non_local_exit_data = XIL(0), values = XIL(0xc9a023) } env = 0x3059b70 count = 22 sa_avail = 16376 sa_count = 23 sa_must_free = false args = 0x7fffffffb750 ret = 0x1100463791 #7 0x0000000000644baa in funcall_lambda (fun=XIL(0x2cd8fc5), nargs=1, arg_vector=0x7fffffffb990) at eval.c:2987 val = XIL(0x648c9c) syms_left = XIL(0x7fffffffb990) next = XIL(0x21055d0) lexenv = XIL(0x580de9) count = 22 i = 34624976 optional = false rest = false previous_optional_or_rest = false #8 0x00000000006447f1 in apply_lambda (fun=XIL(0x2cd8fc5), args=XIL(0x1295563), count=21) at eval.c:2913 args_left = XIL(0) i = 1 numargs = 1 arg_vector = 0x7fffffffb990 tem = XIL(0x8096c4) sa_avail = 16376 sa_count = 22 sa_must_free = false #9 0x00000000006429c9 in eval_sub (form=XIL(0x1295573)) at eval.c:2286 fun = XIL(0x2cd8fc5) val = XIL(0x3057534) original_fun = XIL(0x21055d0) original_args = XIL(0x1295563) funcar = XIL(0x2d6f6f1) count = 21 argvals = {XIL(0x7fffffffbae0), XIL(0x1293903), XIL(0x2105600), XIL(0x2d4e000), XIL(0x41f2b0), make_number(0), XIL(0x10), make_number(2)} #10 0x000000000063cef2 in Fprogn (body=XIL(0x129a7d3)) at eval.c:459 form = XIL(0x1295573) val = XIL(0x3057534) #11 0x000000000063cf24 in prog_ignore (body=XIL(0x129a773)) at eval.c:470 #12 0x000000000063f11c in Fwhile (args=XIL(0x129a6c3)) at eval.c:992 test = XIL(0x1293903) body = XIL(0x129a773) #13 0x0000000000642382 in eval_sub (form=XIL(0x129a663)) at eval.c:2193 args_left = XIL(0x129a6c3) numargs = make_number(4) fun = XIL(0xb90f45) val = XIL(0x7fffffffbca0) original_fun = XIL(0xae0a0) original_args = XIL(0x129a6c3) funcar = XIL(0xc0b080) count = 20 argvals = {XIL(0), XIL(0), XIL(0x2e3dad0), XIL(0), XIL(0x7fffffffbde0), XIL(0x684c6c), XIL(0x7fffffffbc80), XIL(0x2e501b4)} #14 0x000000000063cef2 in Fprogn (body=XIL(0)) at eval.c:459 form = XIL(0x129a663) val = XIL(0) #15 0x000000000063f03c in Flet (args=XIL(0x129a5d3)) at eval.c:973 temps = 0x7fffffffbd20 tem = make_number(0) lexenv = XIL(0) elt = XIL(0x1293a03) varlist = XIL(0) count = 18 argnum = 2 sa_avail = 16368 sa_count = 18 sa_must_free = false varlist_len = 2 nvars = 2 #16 0x0000000000642382 in eval_sub (form=XIL(0x129a5c3)) at eval.c:2193 args_left = XIL(0x129a5d3) numargs = make_number(2) fun = XIL(0xb90f05) val = XIL(0xc2a0) original_fun = XIL(0x83a0) original_args = XIL(0x129a5d3) funcar = XIL(0x57e6cb) count = 17 argvals = {XIL(0x2e501b4), XIL(0), make_number(0), XIL(0xc0a7a0), XIL(0x7fffffffbe80), XIL(0xc0b080), XIL(0x7fffffffbf00), XIL(0)} #17 0x000000000063cef2 in Fprogn (body=XIL(0)) at eval.c:459 form = XIL(0x129a5c3) val = XIL(0xc2a0) #18 0x0000000000642382 in eval_sub (form=XIL(0x1299623)) at eval.c:2193 args_left = XIL(0x1299613) numargs = make_number(2) fun = XIL(0xb90bc5) val = XIL(0x1105280) original_fun = XIL(0xa920) original_args = XIL(0x1299613) funcar = make_number(1644217) count = 16 argvals = {XIL(0x7fffffffbfb0), XIL(0xc0a7a0), XIL(0xc9e400), XIL(0), XIL(0x7fffffffbfd0), XIL(0xc12a90), XIL(0x580b87), XIL(0)} #19 0x0000000000641d39 in Feval (form=XIL(0x1299623), lexical=XIL(0)) at eval.c:2061 count = 15 #20 0x0000000000644464 in funcall_subr (subr=0xb911c0 <Seval>, numargs=2, args=0x7fffffffc210) at eval.c:2853 internal_argbuf = {XIL(0xb911c0), XIL(0x7fffffffc0f8), make_number(1440909), XIL(0xa00c0b080), XIL(0xb911c5), XIL(0x7fffffffc118), XIL(0xb911c0), XIL(0x7fffffffc110)} internal_args = 0x7fffffffc210 #21 0x0000000000643f75 in Ffuncall (nargs=3, args=0x7fffffffc208) at eval.c:2776 fun = XIL(0xb911c5) original_fun = XIL(0x53a0) funcar = make_number(1604955) numargs = 2 val = XIL(0x7fffffffc190) count = 14 #22 0x000000000069985f in exec_byte_code (bytestr=XIL(0x94686c), vector=XIL(0x94688d), maxdepth=make_number(16), args_template=make_number(257), nargs=1, args=0x7fffffffc6b0) at bytecode.c:630 op = 2 type = CATCHER targets = {0x69c7ce <exec_byte_code+15689>, 0x69c7f3 <exec_byte_code+15726>, 0x69c7f5 <exec_byte_code+15728>, 0x69c7f7 <exec_byte_code+15730>, 0x69c7f9 <exec_byte_code+15732>, 0x69c7f9 <exec_byte_code+15732>, 0x69c85e <exec_byte_code+15833>, 0x69c8d2 <exec_byte_code+15949>, 0x698f99 <exec_byte_code+1300>, 0x698f9b <exec_byte_code+1302>, 0x698f9d <exec_byte_code+1304>, 0x698f9f <exec_byte_code+1306>, 0x698fa1 <exec_byte_code+1308>, 0x698fa1 <exec_byte_code+1308>, 0x698fa7 <exec_byte_code+1314>, 0x698f68 <exec_byte_code+1251>, 0x69946d <exec_byte_code+2536>, 0x69946f <exec_byte_code+2538>, 0x699471 <exec_byte_code+2540>, 0x699473 <exec_byte_code+2542>, 0x699475 <exec_byte_code+2544>, 0x699475 <exec_byte_code+2544>, 0x6994aa <exec_byte_code+2597>, 0x69947b <exec_byte_code+2550>, 0x69977c <exec_byte_code+3319>, 0x69977e <exec_byte_code+3321>, 0x699780 <exec_byte_code+3323>, 0x699782 <exec_byte_code+3325>, 0x699784 <exec_byte_code+3327>, 0x699784 <exec_byte_code+3327>, 0x699736 <exec_byte_code+3249>, 0x69974d <exec_byte_code+3272>, 0x69982c <exec_byte_code+3495>, 0x69982e <exec_byte_code+3497>, 0x699830 <exec_byte_code+3499>, 0x699832 <exec_byte_code+3501>, 0x699834 <exec_byte_code+3503>, 0x699834 <exec_byte_code+3503>, 0x6997e6 <exec_byte_code+3425>, 0x6997fd <exec_byte_code+3448>, 0x6998e1 <exec_byte_code+3676>, 0x6998e3 <exec_byte_code+3678>, 0x6998e5 <exec_byte_code+3680>, 0x6998e7 <exec_byte_code+3682>, 0x6998e9 <exec_byte_code+3684>, 0x6998e9 <exec_byte_code+3684>, 0x69989b <exec_byte_code+3606>, 0x6998b2 <exec_byte_code+3629>, 0x69a140 <exec_byte_code+5819>, 0x69a026 <exec_byte_code+5537>, 0x69a01d <exec_byte_code+5528>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69a371 <exec_byte_code+6380>, 0x69a490 <exec_byte_code+6667>, 0x69a4fa <exec_byte_code+6773>, 0x69a565 <exec_byte_code+6880>, 0x69a5d1 <exec_byte_code+6988>, 0x6992c0 <exec_byte_code+2107>, 0x699345 <exec_byte_code+2240>, 0x69a652 <exec_byte_code+7117>, 0x699201 <exec_byte_code+1916>, 0x6993ad <exec_byte_code+2344>, 0x69a6c4 <exec_byte_code+7231>, 0x69a72c <exec_byte_code+7335>, 0x69a774 <exec_byte_code+7407>, 0x69a7dc <exec_byte_code+7511>, 0x69a82e <exec_byte_code+7593>, 0x69a8ff <exec_byte_code+7802>, 0x69a947 <exec_byte_code+7874>, 0x69a9af <exec_byte_code+7978>, 0x69aa34 <exec_byte_code+8111>, 0x69aa7c <exec_byte_code+8183>, 0x69aac4 <exec_byte_code+8255>, 0x69ab2c <exec_byte_code+8359>, 0x69ab94 <exec_byte_code+8463>, 0x69abfc <exec_byte_code+8567>, 0x69ac81 <exec_byte_code+8700>, 0x69acd3 <exec_byte_code+8782>, 0x69ad25 <exec_byte_code+8864>, 0x69adf6 <exec_byte_code+9073>, 0x69ae70 <exec_byte_code+9195>, 0x69aeea <exec_byte_code+9317>, 0x69b0b6 <exec_byte_code+9777>, 0x69b123 <exec_byte_code+9886>, 0x69b190 <exec_byte_code+9995>, 0x69b1fd <exec_byte_code+10104>, 0x69b26a <exec_byte_code+10213>, 0x69b2bc <exec_byte_code+10295>, 0x69b33a <exec_byte_code+10421>, 0x69b38c <exec_byte_code+10503>, 0x69b3de <exec_byte_code+10585>, 0x69b430 <exec_byte_code+10667>, 0x69b53c <exec_byte_code+10935>, 0x699ea0 <exec_byte_code+5147>, 0x69b59a <exec_byte_code+11029>, 0x69b5e2 <exec_byte_code+11101>, 0x69b6ae <exec_byte_code+11305>, 0x69b717 <exec_byte_code+11410>, 0x69b775 <exec_byte_code+11504>, 0x69b7bd <exec_byte_code+11576>, 0x69b803 <exec_byte_code+11646>, 0x69b849 <exec_byte_code+11716>, 0x69b897 <exec_byte_code+11794>, 0x69c7ce <exec_byte_code+15689>, 0x69b8ef <exec_byte_code+11882>, 0x69b935 <exec_byte_code+11952>, 0x69b97b <exec_byte_code+12022>, 0x69b9c1 <exec_byte_code+12092>, 0x69ba07 <exec_byte_code+12162>, 0x69ba4d <exec_byte_code+12232>, 0x699ea0 <exec_byte_code+5147>, 0x69c7ce <exec_byte_code+15689>, 0x69ba95 <exec_byte_code+12304>, 0x69baea <exec_byte_code+12389>, 0x69bb32 <exec_byte_code+12461>, 0x69bb7a <exec_byte_code+12533>, 0x69bbe2 <exec_byte_code+12637>, 0x69bc4a <exec_byte_code+12741>, 0x69bc92 <exec_byte_code+12813>, 0x69bdac <exec_byte_code+13095>, 0x69be14 <exec_byte_code+13199>, 0x69be7c <exec_byte_code+13303>, 0x69bee4 <exec_byte_code+13407>, 0x69bf2a <exec_byte_code+13477>, 0x69c7ce <exec_byte_code+15689>, 0x699dd4 <exec_byte_code+4943>, 0x699998 <exec_byte_code+3859>, 0x699172 <exec_byte_code+1773>, 0x699a44 <exec_byte_code+4031>, 0x699ac5 <exec_byte_code+4160>, 0x699b43 <exec_byte_code+4286>, 0x699d88 <exec_byte_code+4867>, 0x699d9d <exec_byte_code+4888>, 0x6996e3 <exec_byte_code+3166>, 0x699e57 <exec_byte_code+5074>, 0x699ed7 <exec_byte_code+5202>, 0x699f65 <exec_byte_code+5344>, 0x699fae <exec_byte_code+5417>, 0x69a18c <exec_byte_code+5895>, 0x69a209 <exec_byte_code+6020>, 0x69a28e <exec_byte_code+6153>, 0x69a2ee <exec_byte_code+6249>, 0x69994a <exec_byte_code+3781>, 0x69bf72 <exec_byte_code+13549>, 0x69bff7 <exec_byte_code+13682>, 0x69c03f <exec_byte_code+13754>, 0x69c087 <exec_byte_code+13826>, 0x69c0cf <exec_byte_code+13898>, 0x69c117 <exec_byte_code+13970>, 0x69c17f <exec_byte_code+14074>, 0x69c1e7 <exec_byte_code+14178>, 0x69c24f <exec_byte_code+14282>, 0x69c2b7 <exec_byte_code+14386>, 0x69c42d <exec_byte_code+14760>, 0x69c495 <exec_byte_code+14864>, 0x69c4fd <exec_byte_code+14968>, 0x69c545 <exec_byte_code+15040>, 0x69c5ad <exec_byte_code+15144>, 0x69c615 <exec_byte_code+15248>, 0x69c65d <exec_byte_code+15320>, 0x69c6a5 <exec_byte_code+15392>, 0x69b482 <exec_byte_code+10749>, 0x69b4d4 <exec_byte_code+10831>, 0x69c6f7 <exec_byte_code+15474>, 0x69c763 <exec_byte_code+15582>, 0x69c7ce <exec_byte_code+15689>, 0x699bc1 <exec_byte_code+4412>, 0x699bde <exec_byte_code+4441>, 0x699c4a <exec_byte_code+4549>, 0x699cb6 <exec_byte_code+4657>, 0x699d1f <exec_byte_code+4762>, 0x69a880 <exec_byte_code+7675>, 0x69ad77 <exec_byte_code+8946>, 0x69b62f <exec_byte_code+11178>, 0x69c965 <exec_byte_code+16096>, 0x69c9da <exec_byte_code+16213>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69ca70 <exec_byte_code+16363>, 0x69caf7 <exec_byte_code+16498>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69cd0b <exec_byte_code+17030> <repeats 64 times>} const_length = 7 bytestr_length = 43 vectorp = 0x946890 <pure+1429680> quitcounter = 1 '\001' stack_items = 17 sa_avail = 16205 sa_count = 14 sa_must_free = false stack_base = 0x7fffffffc1a0 stack_lim = 0x7fffffffc228 top = 0x7fffffffc208 void_stack_lim = 0x7fffffffc228 bytestr_data = 0x7fffffffc228 "\301\001!\211@\001A\211@\001A\211@\001A\001\004\006\a\302\303\304\305 !\b\"\002\203#" pc = 0x7fffffffc243 "\002\203#" count = 14 result = XIL(0) #23 0x0000000000644b6f in funcall_lambda (fun=XIL(0x94683d), nargs=1, arg_vector=0x7fffffffc6a8) at eval.c:2977 size = 5 val = XIL(0x7fffffffc608) syms_left = make_number(257) next = XIL(0x1200c0b080) lexenv = XIL(0x7fffffffc5e0) count = 14 i = 0 optional = false rest = false previous_optional_or_rest = false #24 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffc6a0) at eval.c:2778 fun = XIL(0x94683d) original_fun = XIL(0xa39960) funcar = XIL(0x645e21) numargs = 1 val = XIL(0x7fffffffc680) count = 13 #25 0x000000000069985f in exec_byte_code (bytestr=XIL(0x946b0c), vector=XIL(0x946b2d), maxdepth=make_number(4), args_template=make_number(257), nargs=1, args=0x7fffffffcb30) at bytecode.c:630 op = 1 type = (unknown: 12114688) targets = {0x69c7ce <exec_byte_code+15689>, 0x69c7f3 <exec_byte_code+15726>, 0x69c7f5 <exec_byte_code+15728>, 0x69c7f7 <exec_byte_code+15730>, 0x69c7f9 <exec_byte_code+15732>, 0x69c7f9 <exec_byte_code+15732>, 0x69c85e <exec_byte_code+15833>, 0x69c8d2 <exec_byte_code+15949>, 0x698f99 <exec_byte_code+1300>, 0x698f9b <exec_byte_code+1302>, 0x698f9d <exec_byte_code+1304>, 0x698f9f <exec_byte_code+1306>, 0x698fa1 <exec_byte_code+1308>, 0x698fa1 <exec_byte_code+1308>, 0x698fa7 <exec_byte_code+1314>, 0x698f68 <exec_byte_code+1251>, 0x69946d <exec_byte_code+2536>, 0x69946f <exec_byte_code+2538>, 0x699471 <exec_byte_code+2540>, 0x699473 <exec_byte_code+2542>, 0x699475 <exec_byte_code+2544>, 0x699475 <exec_byte_code+2544>, 0x6994aa <exec_byte_code+2597>, 0x69947b <exec_byte_code+2550>, 0x69977c <exec_byte_code+3319>, 0x69977e <exec_byte_code+3321>, 0x699780 <exec_byte_code+3323>, 0x699782 <exec_byte_code+3325>, 0x699784 <exec_byte_code+3327>, 0x699784 <exec_byte_code+3327>, 0x699736 <exec_byte_code+3249>, 0x69974d <exec_byte_code+3272>, 0x69982c <exec_byte_code+3495>, 0x69982e <exec_byte_code+3497>, 0x699830 <exec_byte_code+3499>, 0x699832 <exec_byte_code+3501>, 0x699834 <exec_byte_code+3503>, 0x699834 <exec_byte_code+3503>, 0x6997e6 <exec_byte_code+3425>, 0x6997fd <exec_byte_code+3448>, 0x6998e1 <exec_byte_code+3676>, 0x6998e3 <exec_byte_code+3678>, 0x6998e5 <exec_byte_code+3680>, 0x6998e7 <exec_byte_code+3682>, 0x6998e9 <exec_byte_code+3684>, 0x6998e9 <exec_byte_code+3684>, 0x69989b <exec_byte_code+3606>, 0x6998b2 <exec_byte_code+3629>, 0x69a140 <exec_byte_code+5819>, 0x69a026 <exec_byte_code+5537>, 0x69a01d <exec_byte_code+5528>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69a371 <exec_byte_code+6380>, 0x69a490 <exec_byte_code+6667>, 0x69a4fa <exec_byte_code+6773>, 0x69a565 <exec_byte_code+6880>, 0x69a5d1 <exec_byte_code+6988>, 0x6992c0 <exec_byte_code+2107>, 0x699345 <exec_byte_code+2240>, 0x69a652 <exec_byte_code+7117>, 0x699201 <exec_byte_code+1916>, 0x6993ad <exec_byte_code+2344>, 0x69a6c4 <exec_byte_code+7231>, 0x69a72c <exec_byte_code+7335>, 0x69a774 <exec_byte_code+7407>, 0x69a7dc <exec_byte_code+7511>, 0x69a82e <exec_byte_code+7593>, 0x69a8ff <exec_byte_code+7802>, 0x69a947 <exec_byte_code+7874>, 0x69a9af <exec_byte_code+7978>, 0x69aa34 <exec_byte_code+8111>, 0x69aa7c <exec_byte_code+8183>, 0x69aac4 <exec_byte_code+8255>, 0x69ab2c <exec_byte_code+8359>, 0x69ab94 <exec_byte_code+8463>, 0x69abfc <exec_byte_code+8567>, 0x69ac81 <exec_byte_code+8700>, 0x69acd3 <exec_byte_code+8782>, 0x69ad25 <exec_byte_code+8864>, 0x69adf6 <exec_byte_code+9073>, 0x69ae70 <exec_byte_code+9195>, 0x69aeea <exec_byte_code+9317>, 0x69b0b6 <exec_byte_code+9777>, 0x69b123 <exec_byte_code+9886>, 0x69b190 <exec_byte_code+9995>, 0x69b1fd <exec_byte_code+10104>, 0x69b26a <exec_byte_code+10213>, 0x69b2bc <exec_byte_code+10295>, 0x69b33a <exec_byte_code+10421>, 0x69b38c <exec_byte_code+10503>, 0x69b3de <exec_byte_code+10585>, 0x69b430 <exec_byte_code+10667>, 0x69b53c <exec_byte_code+10935>, 0x699ea0 <exec_byte_code+5147>, 0x69b59a <exec_byte_code+11029>, 0x69b5e2 <exec_byte_code+11101>, 0x69b6ae <exec_byte_code+11305>, 0x69b717 <exec_byte_code+11410>, 0x69b775 <exec_byte_code+11504>, 0x69b7bd <exec_byte_code+11576>, 0x69b803 <exec_byte_code+11646>, 0x69b849 <exec_byte_code+11716>, 0x69b897 <exec_byte_code+11794>, 0x69c7ce <exec_byte_code+15689>, 0x69b8ef <exec_byte_code+11882>, 0x69b935 <exec_byte_code+11952>, 0x69b97b <exec_byte_code+12022>, 0x69b9c1 <exec_byte_code+12092>, 0x69ba07 <exec_byte_code+12162>, 0x69ba4d <exec_byte_code+12232>, 0x699ea0 <exec_byte_code+5147>, 0x69c7ce <exec_byte_code+15689>, 0x69ba95 <exec_byte_code+12304>, 0x69baea <exec_byte_code+12389>, 0x69bb32 <exec_byte_code+12461>, 0x69bb7a <exec_byte_code+12533>, 0x69bbe2 <exec_byte_code+12637>, 0x69bc4a <exec_byte_code+12741>, 0x69bc92 <exec_byte_code+12813>, 0x69bdac <exec_byte_code+13095>, 0x69be14 <exec_byte_code+13199>, 0x69be7c <exec_byte_code+13303>, 0x69bee4 <exec_byte_code+13407>, 0x69bf2a <exec_byte_code+13477>, 0x69c7ce <exec_byte_code+15689>, 0x699dd4 <exec_byte_code+4943>, 0x699998 <exec_byte_code+3859>, 0x699172 <exec_byte_code+1773>, 0x699a44 <exec_byte_code+4031>, 0x699ac5 <exec_byte_code+4160>, 0x699b43 <exec_byte_code+4286>, 0x699d88 <exec_byte_code+4867>, 0x699d9d <exec_byte_code+4888>, 0x6996e3 <exec_byte_code+3166>, 0x699e57 <exec_byte_code+5074>, 0x699ed7 <exec_byte_code+5202>, 0x699f65 <exec_byte_code+5344>, 0x699fae <exec_byte_code+5417>, 0x69a18c <exec_byte_code+5895>, 0x69a209 <exec_byte_code+6020>, 0x69a28e <exec_byte_code+6153>, 0x69a2ee <exec_byte_code+6249>, 0x69994a <exec_byte_code+3781>, 0x69bf72 <exec_byte_code+13549>, 0x69bff7 <exec_byte_code+13682>, 0x69c03f <exec_byte_code+13754>, 0x69c087 <exec_byte_code+13826>, 0x69c0cf <exec_byte_code+13898>, 0x69c117 <exec_byte_code+13970>, 0x69c17f <exec_byte_code+14074>, 0x69c1e7 <exec_byte_code+14178>, 0x69c24f <exec_byte_code+14282>, 0x69c2b7 <exec_byte_code+14386>, 0x69c42d <exec_byte_code+14760>, 0x69c495 <exec_byte_code+14864>, 0x69c4fd <exec_byte_code+14968>, 0x69c545 <exec_byte_code+15040>, 0x69c5ad <exec_byte_code+15144>, 0x69c615 <exec_byte_code+15248>, 0x69c65d <exec_byte_code+15320>, 0x69c6a5 <exec_byte_code+15392>, 0x69b482 <exec_byte_code+10749>, 0x69b4d4 <exec_byte_code+10831>, 0x69c6f7 <exec_byte_code+15474>, 0x69c763 <exec_byte_code+15582>, 0x69c7ce <exec_byte_code+15689>, 0x699bc1 <exec_byte_code+4412>, 0x699bde <exec_byte_code+4441>, 0x699c4a <exec_byte_code+4549>, 0x699cb6 <exec_byte_code+4657>, 0x699d1f <exec_byte_code+4762>, 0x69a880 <exec_byte_code+7675>, 0x69ad77 <exec_byte_code+8946>, 0x69b62f <exec_byte_code+11178>, 0x69c965 <exec_byte_code+16096>, 0x69c9da <exec_byte_code+16213>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69ca70 <exec_byte_code+16363>, 0x69caf7 <exec_byte_code+16498>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69cd0b <exec_byte_code+17030> <repeats 64 times>} const_length = 4 bytestr_length = 29 vectorp = 0x946b30 <pure+1430352> quitcounter = 1 '\001' stack_items = 5 sa_avail = 16315 sa_count = 12 sa_must_free = false stack_base = 0x7fffffffc690 stack_lim = 0x7fffffffc6b8 top = 0x7fffffffc6a0 void_stack_lim = 0x7fffffffc6b8 bytestr_data = 0x7fffffffc6b8 "\b\204\b" pc = 0x7fffffffc6c5 "\n)B\211A\t=\204\032" count = 12 result = XIL(0x7fffffffc950) #26 0x0000000000644b6f in funcall_lambda (fun=XIL(0x946acd), nargs=1, arg_vector=0x7fffffffcb28) at eval.c:2977 size = 6 val = XIL(0x7fffffffca88) syms_left = make_number(257) next = XIL(0x1200c0b080) lexenv = make_number(1440909) count = 12 i = 0 optional = false rest = false previous_optional_or_rest = false #27 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffcb20) at eval.c:2778 fun = XIL(0x946acd) original_fun = XIL(0x4dd0a0) funcar = XIL(0xc0b080) numargs = 1 val = XIL(0xc2a0) count = 11 #28 0x000000000069985f in exec_byte_code (bytestr=XIL(0x94602c), vector=XIL(0x94604d), maxdepth=make_number(3), args_template=make_number(256), nargs=1, args=0x7fffffffd0c8) at bytecode.c:630 op = 1 type = (unknown: 12133568) targets = {0x69c7ce <exec_byte_code+15689>, 0x69c7f3 <exec_byte_code+15726>, 0x69c7f5 <exec_byte_code+15728>, 0x69c7f7 <exec_byte_code+15730>, 0x69c7f9 <exec_byte_code+15732>, 0x69c7f9 <exec_byte_code+15732>, 0x69c85e <exec_byte_code+15833>, 0x69c8d2 <exec_byte_code+15949>, 0x698f99 <exec_byte_code+1300>, 0x698f9b <exec_byte_code+1302>, 0x698f9d <exec_byte_code+1304>, 0x698f9f <exec_byte_code+1306>, 0x698fa1 <exec_byte_code+1308>, 0x698fa1 <exec_byte_code+1308>, 0x698fa7 <exec_byte_code+1314>, 0x698f68 <exec_byte_code+1251>, 0x69946d <exec_byte_code+2536>, 0x69946f <exec_byte_code+2538>, 0x699471 <exec_byte_code+2540>, 0x699473 <exec_byte_code+2542>, 0x699475 <exec_byte_code+2544>, 0x699475 <exec_byte_code+2544>, 0x6994aa <exec_byte_code+2597>, 0x69947b <exec_byte_code+2550>, 0x69977c <exec_byte_code+3319>, 0x69977e <exec_byte_code+3321>, 0x699780 <exec_byte_code+3323>, 0x699782 <exec_byte_code+3325>, 0x699784 <exec_byte_code+3327>, 0x699784 <exec_byte_code+3327>, 0x699736 <exec_byte_code+3249>, 0x69974d <exec_byte_code+3272>, 0x69982c <exec_byte_code+3495>, 0x69982e <exec_byte_code+3497>, 0x699830 <exec_byte_code+3499>, 0x699832 <exec_byte_code+3501>, 0x699834 <exec_byte_code+3503>, 0x699834 <exec_byte_code+3503>, 0x6997e6 <exec_byte_code+3425>, 0x6997fd <exec_byte_code+3448>, 0x6998e1 <exec_byte_code+3676>, 0x6998e3 <exec_byte_code+3678>, 0x6998e5 <exec_byte_code+3680>, 0x6998e7 <exec_byte_code+3682>, 0x6998e9 <exec_byte_code+3684>, 0x6998e9 <exec_byte_code+3684>, 0x69989b <exec_byte_code+3606>, 0x6998b2 <exec_byte_code+3629>, 0x69a140 <exec_byte_code+5819>, 0x69a026 <exec_byte_code+5537>, 0x69a01d <exec_byte_code+5528>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69a371 <exec_byte_code+6380>, 0x69a490 <exec_byte_code+6667>, 0x69a4fa <exec_byte_code+6773>, 0x69a565 <exec_byte_code+6880>, 0x69a5d1 <exec_byte_code+6988>, 0x6992c0 <exec_byte_code+2107>, 0x699345 <exec_byte_code+2240>, 0x69a652 <exec_byte_code+7117>, 0x699201 <exec_byte_code+1916>, 0x6993ad <exec_byte_code+2344>, 0x69a6c4 <exec_byte_code+7231>, 0x69a72c <exec_byte_code+7335>, 0x69a774 <exec_byte_code+7407>, 0x69a7dc <exec_byte_code+7511>, 0x69a82e <exec_byte_code+7593>, 0x69a8ff <exec_byte_code+7802>, 0x69a947 <exec_byte_code+7874>, 0x69a9af <exec_byte_code+7978>, 0x69aa34 <exec_byte_code+8111>, 0x69aa7c <exec_byte_code+8183>, 0x69aac4 <exec_byte_code+8255>, 0x69ab2c <exec_byte_code+8359>, 0x69ab94 <exec_byte_code+8463>, 0x69abfc <exec_byte_code+8567>, 0x69ac81 <exec_byte_code+8700>, 0x69acd3 <exec_byte_code+8782>, 0x69ad25 <exec_byte_code+8864>, 0x69adf6 <exec_byte_code+9073>, 0x69ae70 <exec_byte_code+9195>, 0x69aeea <exec_byte_code+9317>, 0x69b0b6 <exec_byte_code+9777>, 0x69b123 <exec_byte_code+9886>, 0x69b190 <exec_byte_code+9995>, 0x69b1fd <exec_byte_code+10104>, 0x69b26a <exec_byte_code+10213>, 0x69b2bc <exec_byte_code+10295>, 0x69b33a <exec_byte_code+10421>, 0x69b38c <exec_byte_code+10503>, 0x69b3de <exec_byte_code+10585>, 0x69b430 <exec_byte_code+10667>, 0x69b53c <exec_byte_code+10935>, 0x699ea0 <exec_byte_code+5147>, 0x69b59a <exec_byte_code+11029>, 0x69b5e2 <exec_byte_code+11101>, 0x69b6ae <exec_byte_code+11305>, 0x69b717 <exec_byte_code+11410>, 0x69b775 <exec_byte_code+11504>, 0x69b7bd <exec_byte_code+11576>, 0x69b803 <exec_byte_code+11646>, 0x69b849 <exec_byte_code+11716>, 0x69b897 <exec_byte_code+11794>, 0x69c7ce <exec_byte_code+15689>, 0x69b8ef <exec_byte_code+11882>, 0x69b935 <exec_byte_code+11952>, 0x69b97b <exec_byte_code+12022>, 0x69b9c1 <exec_byte_code+12092>, 0x69ba07 <exec_byte_code+12162>, 0x69ba4d <exec_byte_code+12232>, 0x699ea0 <exec_byte_code+5147>, 0x69c7ce <exec_byte_code+15689>, 0x69ba95 <exec_byte_code+12304>, 0x69baea <exec_byte_code+12389>, 0x69bb32 <exec_byte_code+12461>, 0x69bb7a <exec_byte_code+12533>, 0x69bbe2 <exec_byte_code+12637>, 0x69bc4a <exec_byte_code+12741>, 0x69bc92 <exec_byte_code+12813>, 0x69bdac <exec_byte_code+13095>, 0x69be14 <exec_byte_code+13199>, 0x69be7c <exec_byte_code+13303>, 0x69bee4 <exec_byte_code+13407>, 0x69bf2a <exec_byte_code+13477>, 0x69c7ce <exec_byte_code+15689>, 0x699dd4 <exec_byte_code+4943>, 0x699998 <exec_byte_code+3859>, 0x699172 <exec_byte_code+1773>, 0x699a44 <exec_byte_code+4031>, 0x699ac5 <exec_byte_code+4160>, 0x699b43 <exec_byte_code+4286>, 0x699d88 <exec_byte_code+4867>, 0x699d9d <exec_byte_code+4888>, 0x6996e3 <exec_byte_code+3166>, 0x699e57 <exec_byte_code+5074>, 0x699ed7 <exec_byte_code+5202>, 0x699f65 <exec_byte_code+5344>, 0x699fae <exec_byte_code+5417>, 0x69a18c <exec_byte_code+5895>, 0x69a209 <exec_byte_code+6020>, 0x69a28e <exec_byte_code+6153>, 0x69a2ee <exec_byte_code+6249>, 0x69994a <exec_byte_code+3781>, 0x69bf72 <exec_byte_code+13549>, 0x69bff7 <exec_byte_code+13682>, 0x69c03f <exec_byte_code+13754>, 0x69c087 <exec_byte_code+13826>, 0x69c0cf <exec_byte_code+13898>, 0x69c117 <exec_byte_code+13970>, 0x69c17f <exec_byte_code+14074>, 0x69c1e7 <exec_byte_code+14178>, 0x69c24f <exec_byte_code+14282>, 0x69c2b7 <exec_byte_code+14386>, 0x69c42d <exec_byte_code+14760>, 0x69c495 <exec_byte_code+14864>, 0x69c4fd <exec_byte_code+14968>, 0x69c545 <exec_byte_code+15040>, 0x69c5ad <exec_byte_code+15144>, 0x69c615 <exec_byte_code+15248>, 0x69c65d <exec_byte_code+15320>, 0x69c6a5 <exec_byte_code+15392>, 0x69b482 <exec_byte_code+10749>, 0x69b4d4 <exec_byte_code+10831>, 0x69c6f7 <exec_byte_code+15474>, 0x69c763 <exec_byte_code+15582>, 0x69c7ce <exec_byte_code+15689>, 0x699bc1 <exec_byte_code+4412>, 0x699bde <exec_byte_code+4441>, 0x699c4a <exec_byte_code+4549>, 0x699cb6 <exec_byte_code+4657>, 0x699d1f <exec_byte_code+4762>, 0x69a880 <exec_byte_code+7675>, 0x69ad77 <exec_byte_code+8946>, 0x69b62f <exec_byte_code+11178>, 0x69c965 <exec_byte_code+16096>, 0x69c9da <exec_byte_code+16213>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69ca70 <exec_byte_code+16363>, 0x69caf7 <exec_byte_code+16498>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69cd0b <exec_byte_code+17030> <repeats 64 times>} const_length = 4 bytestr_length = 17 vectorp = 0x946050 <pure+1427568> quitcounter = 1 '\001' stack_items = 4 sa_avail = 16335 sa_count = 10 sa_must_free = false stack_base = 0x7fffffffcb10 stack_lim = 0x7fffffffcb30 top = 0x7fffffffcb20 void_stack_lim = 0x7fffffffcb30 bytestr_data = 0x7fffffffcb30 "p\030\301 \210\302\001\206\v" pc = 0x7fffffffcb3c "\210\301 )\207\316\377\377\377\177" count = 10 result = XIL(0x128ca33) #29 0x0000000000644b6f in funcall_lambda (fun=XIL(0x945fed), nargs=1, arg_vector=0x7fffffffd0c0) at eval.c:2977 size = 6 val = XIL(0x7fffffffcef8) syms_left = make_number(256) next = XIL(0x1200c0b080) lexenv = XIL(0x7fffffffced0) count = 10 i = 0 optional = false rest = false previous_optional_or_rest = false #30 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffd0b8) at eval.c:2778 fun = XIL(0x945fed) original_fun = XIL(0xa39590) funcar = XIL(0x589371) numargs = 1 val = XIL(0) count = 9 #31 0x0000000000639907 in Ffuncall_interactively (nargs=2, args=0x7fffffffd0b8) at callint.c:252 speccount = 8 #32 0x0000000000644337 in funcall_subr (subr=0xb90a00 <Sfuncall_interactively>, numargs=2, args=0x7fffffffd0b8) at eval.c:2831 #33 0x0000000000643f75 in Ffuncall (nargs=3, args=0x7fffffffd0b0) at eval.c:2776 fun = XIL(0xb90a05) original_fun = XIL(0x66c0) funcar = XIL(0x645e21) numargs = 2 val = XIL(0x7fffffffd0a0) count = 7 #34 0x000000000063bde9 in Fcall_interactively (function=XIL(0xa39590), record_flag=XIL(0), keys=XIL(0xca3695)) at callint.c:854 val = XIL(0) args = 0x7fffffffd0b0 visargs = 0x7fffffffd0c8 specs = XIL(0x80fa7c) filter_specs = XIL(0x80fa7c) teml = XIL(0x7fffffffcf28) up_event = XIL(0) enable = XIL(0) sa_avail = 16310 sa_count = 6 sa_must_free = false speccount = 6 next_event = 1 prefix_arg = XIL(0) string = 0x7fffffffd100 "P" tem = 0x77842b "" varies = 0x7fffffffd0e0 "" i = 3 nargs = 3 mark = 5760715 arg_from_tty = false key_count = 1 record_then_fail = false save_this_command = XIL(0xa39590) save_last_command = XIL(0x4627b0) save_this_original_command = XIL(0xa39590) save_real_this_command = XIL(0xa39590) #35 0x0000000000644490 in funcall_subr (subr=0xb90a40 <Scall_interactively>, numargs=3, args=0x7fffffffd430) at eval.c:2856 internal_argbuf = {XIL(0xb90a40), XIL(0x7fffffffd348), make_number(1440909), XIL(0xa00c0b080), XIL(0xb90a45), XIL(0x7fffffffd368), XIL(0xb90a40), XIL(0x7fffffffd360)} internal_args = 0x7fffffffd430 #36 0x0000000000643f75 in Ffuncall (nargs=4, args=0x7fffffffd428) at eval.c:2776 fun = XIL(0xb90a45) original_fun = XIL(0xb1b80) funcar = XIL(0xc0b080) numargs = 3 val = XIL(0) count = 5 #37 0x000000000069985f in exec_byte_code (bytestr=XIL(0x8aea6c), vector=XIL(0x8aea8d), maxdepth=make_number(13), args_template=make_number(1025), nargs=1, args=0x7fffffffd960) at bytecode.c:630 op = 3 type = CATCHER targets = {0x69c7ce <exec_byte_code+15689>, 0x69c7f3 <exec_byte_code+15726>, 0x69c7f5 <exec_byte_code+15728>, 0x69c7f7 <exec_byte_code+15730>, 0x69c7f9 <exec_byte_code+15732>, 0x69c7f9 <exec_byte_code+15732>, 0x69c85e <exec_byte_code+15833>, 0x69c8d2 <exec_byte_code+15949>, 0x698f99 <exec_byte_code+1300>, 0x698f9b <exec_byte_code+1302>, 0x698f9d <exec_byte_code+1304>, 0x698f9f <exec_byte_code+1306>, 0x698fa1 <exec_byte_code+1308>, 0x698fa1 <exec_byte_code+1308>, 0x698fa7 <exec_byte_code+1314>, 0x698f68 <exec_byte_code+1251>, 0x69946d <exec_byte_code+2536>, 0x69946f <exec_byte_code+2538>, 0x699471 <exec_byte_code+2540>, 0x699473 <exec_byte_code+2542>, 0x699475 <exec_byte_code+2544>, 0x699475 <exec_byte_code+2544>, 0x6994aa <exec_byte_code+2597>, 0x69947b <exec_byte_code+2550>, 0x69977c <exec_byte_code+3319>, 0x69977e <exec_byte_code+3321>, 0x699780 <exec_byte_code+3323>, 0x699782 <exec_byte_code+3325>, 0x699784 <exec_byte_code+3327>, 0x699784 <exec_byte_code+3327>, 0x699736 <exec_byte_code+3249>, 0x69974d <exec_byte_code+3272>, 0x69982c <exec_byte_code+3495>, 0x69982e <exec_byte_code+3497>, 0x699830 <exec_byte_code+3499>, 0x699832 <exec_byte_code+3501>, 0x699834 <exec_byte_code+3503>, 0x699834 <exec_byte_code+3503>, 0x6997e6 <exec_byte_code+3425>, 0x6997fd <exec_byte_code+3448>, 0x6998e1 <exec_byte_code+3676>, 0x6998e3 <exec_byte_code+3678>, 0x6998e5 <exec_byte_code+3680>, 0x6998e7 <exec_byte_code+3682>, 0x6998e9 <exec_byte_code+3684>, 0x6998e9 <exec_byte_code+3684>, 0x69989b <exec_byte_code+3606>, 0x6998b2 <exec_byte_code+3629>, 0x69a140 <exec_byte_code+5819>, 0x69a026 <exec_byte_code+5537>, 0x69a01d <exec_byte_code+5528>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69a371 <exec_byte_code+6380>, 0x69a490 <exec_byte_code+6667>, 0x69a4fa <exec_byte_code+6773>, 0x69a565 <exec_byte_code+6880>, 0x69a5d1 <exec_byte_code+6988>, 0x6992c0 <exec_byte_code+2107>, 0x699345 <exec_byte_code+2240>, 0x69a652 <exec_byte_code+7117>, 0x699201 <exec_byte_code+1916>, 0x6993ad <exec_byte_code+2344>, 0x69a6c4 <exec_byte_code+7231>, 0x69a72c <exec_byte_code+7335>, 0x69a774 <exec_byte_code+7407>, 0x69a7dc <exec_byte_code+7511>, 0x69a82e <exec_byte_code+7593>, 0x69a8ff <exec_byte_code+7802>, 0x69a947 <exec_byte_code+7874>, 0x69a9af <exec_byte_code+7978>, 0x69aa34 <exec_byte_code+8111>, 0x69aa7c <exec_byte_code+8183>, 0x69aac4 <exec_byte_code+8255>, 0x69ab2c <exec_byte_code+8359>, 0x69ab94 <exec_byte_code+8463>, 0x69abfc <exec_byte_code+8567>, 0x69ac81 <exec_byte_code+8700>, 0x69acd3 <exec_byte_code+8782>, 0x69ad25 <exec_byte_code+8864>, 0x69adf6 <exec_byte_code+9073>, 0x69ae70 <exec_byte_code+9195>, 0x69aeea <exec_byte_code+9317>, 0x69b0b6 <exec_byte_code+9777>, 0x69b123 <exec_byte_code+9886>, 0x69b190 <exec_byte_code+9995>, 0x69b1fd <exec_byte_code+10104>, 0x69b26a <exec_byte_code+10213>, 0x69b2bc <exec_byte_code+10295>, 0x69b33a <exec_byte_code+10421>, 0x69b38c <exec_byte_code+10503>, 0x69b3de <exec_byte_code+10585>, 0x69b430 <exec_byte_code+10667>, 0x69b53c <exec_byte_code+10935>, 0x699ea0 <exec_byte_code+5147>, 0x69b59a <exec_byte_code+11029>, 0x69b5e2 <exec_byte_code+11101>, 0x69b6ae <exec_byte_code+11305>, 0x69b717 <exec_byte_code+11410>, 0x69b775 <exec_byte_code+11504>, 0x69b7bd <exec_byte_code+11576>, 0x69b803 <exec_byte_code+11646>, 0x69b849 <exec_byte_code+11716>, 0x69b897 <exec_byte_code+11794>, 0x69c7ce <exec_byte_code+15689>, 0x69b8ef <exec_byte_code+11882>, 0x69b935 <exec_byte_code+11952>, 0x69b97b <exec_byte_code+12022>, 0x69b9c1 <exec_byte_code+12092>, 0x69ba07 <exec_byte_code+12162>, 0x69ba4d <exec_byte_code+12232>, 0x699ea0 <exec_byte_code+5147>, 0x69c7ce <exec_byte_code+15689>, 0x69ba95 <exec_byte_code+12304>, 0x69baea <exec_byte_code+12389>, 0x69bb32 <exec_byte_code+12461>, 0x69bb7a <exec_byte_code+12533>, 0x69bbe2 <exec_byte_code+12637>, 0x69bc4a <exec_byte_code+12741>, 0x69bc92 <exec_byte_code+12813>, 0x69bdac <exec_byte_code+13095>, 0x69be14 <exec_byte_code+13199>, 0x69be7c <exec_byte_code+13303>, 0x69bee4 <exec_byte_code+13407>, 0x69bf2a <exec_byte_code+13477>, 0x69c7ce <exec_byte_code+15689>, 0x699dd4 <exec_byte_code+4943>, 0x699998 <exec_byte_code+3859>, 0x699172 <exec_byte_code+1773>, 0x699a44 <exec_byte_code+4031>, 0x699ac5 <exec_byte_code+4160>, 0x699b43 <exec_byte_code+4286>, 0x699d88 <exec_byte_code+4867>, 0x699d9d <exec_byte_code+4888>, 0x6996e3 <exec_byte_code+3166>, 0x699e57 <exec_byte_code+5074>, 0x699ed7 <exec_byte_code+5202>, 0x699f65 <exec_byte_code+5344>, 0x699fae <exec_byte_code+5417>, 0x69a18c <exec_byte_code+5895>, 0x69a209 <exec_byte_code+6020>, 0x69a28e <exec_byte_code+6153>, 0x69a2ee <exec_byte_code+6249>, 0x69994a <exec_byte_code+3781>, 0x69bf72 <exec_byte_code+13549>, 0x69bff7 <exec_byte_code+13682>, 0x69c03f <exec_byte_code+13754>, 0x69c087 <exec_byte_code+13826>, 0x69c0cf <exec_byte_code+13898>, 0x69c117 <exec_byte_code+13970>, 0x69c17f <exec_byte_code+14074>, 0x69c1e7 <exec_byte_code+14178>, 0x69c24f <exec_byte_code+14282>, 0x69c2b7 <exec_byte_code+14386>, 0x69c42d <exec_byte_code+14760>, 0x69c495 <exec_byte_code+14864>, 0x69c4fd <exec_byte_code+14968>, 0x69c545 <exec_byte_code+15040>, 0x69c5ad <exec_byte_code+15144>, 0x69c615 <exec_byte_code+15248>, 0x69c65d <exec_byte_code+15320>, 0x69c6a5 <exec_byte_code+15392>, 0x69b482 <exec_byte_code+10749>, 0x69b4d4 <exec_byte_code+10831>, 0x69c6f7 <exec_byte_code+15474>, 0x69c763 <exec_byte_code+15582>, 0x69c7ce <exec_byte_code+15689>, 0x699bc1 <exec_byte_code+4412>, 0x699bde <exec_byte_code+4441>, 0x699c4a <exec_byte_code+4549>, 0x699cb6 <exec_byte_code+4657>, 0x699d1f <exec_byte_code+4762>, 0x69a880 <exec_byte_code+7675>, 0x69ad77 <exec_byte_code+8946>, 0x69b62f <exec_byte_code+11178>, 0x69c965 <exec_byte_code+16096>, 0x69c9da <exec_byte_code+16213>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69ca70 <exec_byte_code+16363>, 0x69caf7 <exec_byte_code+16498>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69c7ce <exec_byte_code+15689>, 0x69cd0b <exec_byte_code+17030> <repeats 64 times>} const_length = 25 bytestr_length = 165 vectorp = 0x8aea90 <pure+807600> quitcounter = 1 '\001' stack_items = 14 sa_avail = 16107 sa_count = 5 sa_must_free = false stack_base = 0x7fffffffd3f0 stack_lim = 0x7fffffffd460 top = 0x7fffffffd428 void_stack_lim = 0x7fffffffd460 bytestr_data = 0x7fffffffd460 "\306\020\211?\205\023" pc = 0x7fffffffd4db "\006\006\071\203\242" count = 5 result = XIL(0) #38 0x0000000000644b6f in funcall_lambda (fun=XIL(0x8aea3d), nargs=1, arg_vector=0x7fffffffd958) at eval.c:2977 size = 5 val = XIL(0x7fffffffd8b8) syms_left = make_number(1025) next = XIL(0x1200c0b080) lexenv = make_number(34910567923712) count = 5 i = 0 optional = false rest = false previous_optional_or_rest = false #39 0x0000000000643fb9 in Ffuncall (nargs=2, args=0x7fffffffd950) at eval.c:2778 fun = XIL(0x8aea3d) original_fun = XIL(0x3f30) funcar = XIL(0x1) numargs = 1 val = XIL(0x7fffffffd958) count = 4 #40 0x0000000000643891 in call1 (fn=XIL(0x3f30), arg1=XIL(0xa39590)) at eval.c:2627 #41 0x000000000058a56b in command_loop_1 () at keyboard.c:1482 scount = 3 cmd = XIL(0xa39590) keybuf = {make_number(10), XIL(0x2012e48b3), XIL(0), XIL(0x7a10), XIL(0x10000010f), XIL(0), XIL(0xc0a7a0), XIL(0x7a10), make_number(55834574852), XIL(0xc12a90), XIL(0x7fffffffd9e0), XIL(0), XIL(0x7fffffffda20), make_number(1644723), make_number(34910567923712), XIL(0xc0b080), XIL(0x580b87), XIL(0), XIL(0x7fffffffda20), XIL(0x57e6cb), XIL(0), XIL(0xc0b080), XIL(0x7fffffffda80), XIL(0), XIL(0x7fffffffda50), XIL(0x57e6cb), XIL(0x5), XIL(0x7a10), XIL(0x7fffffffda90), XIL(0x640415)} i = 1 prev_modiff = 18 prev_buffer = 0xc9e400 <bss_sbrk_buffer+455584> already_adjusted = false #42 0x000000000063fffe in internal_condition_case (bfun=0x589d5b <command_loop_1>, handlers=XIL(0x5280), hfun=0x5893bf <cmd_error>) at eval.c:1336 val = XIL(0x57e6cb) c = 0x2c80180 #43 0x0000000000589971 in command_loop_2 (ignore=XIL(0)) at keyboard.c:1110 val = XIL(0xc900) #44 0x000000000063f4fd in internal_catch (tag=XIL(0xc900), func=0x589944 <command_loop_2>, arg=XIL(0)) at eval.c:1101 val = XIL(0) c = 0x2c80060 #45 0x000000000058990f in command_loop () at keyboard.c:1089 #46 0x0000000000588ea8 in recursive_edit_1 () at keyboard.c:695 count = 1 val = XIL(0x7fffffffdc00) #47 0x000000000058909d in Frecursive_edit () at keyboard.c:766 count = 0 buffer = XIL(0) #48 0x0000000000586c3c in main (argc=3, argv=0x7fffffffde48) at emacs.c:1717 stack_bottom_variable = 0x2c6c290 do_initial_setlocale = true dumping = false skip_args = 1 no_loadup = false junk = 0x0 dname_arg = 0x0 ch_to_dir = 0x0 original_pwd = 0x0 disable_aslr = false rlim = { rlim_cur = 10022912, rlim_max = 18446744073709551615 } sockfd = -1 module_assertions = true Lisp Backtrace: "realpath-truename" (0xffffb990) "while" (0xffffbc70) "let" (0xffffbe90) "progn" (0xffffbfe0) "eval" (0xffffc210) "elisp--eval-last-sexp" (0xffffc6a8) "eval-last-sexp" (0xffffcb28) "eval-print-last-sexp" (0xffffd0c0) "funcall-interactively" (0xffffd0b8) "call-interactively" (0xffffd430) "command-execute" (0xffffd958) #2 0x00000000006854ce in value_to_lisp (v=0x3059c90) at emacs-module.c:984 984 eassert (STRINGP (*p) && SSDATA (*p)); $1 = (Lisp_Object *) 0x3059c90 Lisp_String $2 = (struct Lisp_String *) 0x3057690 0 quit [-- Attachment #2: Type: text/plain, Size: 2399 bytes --] [CCing Philipp as the author of module assertions.] Eli Zaretskii <eliz@gnu.org> writes: >> From: "Basil L. Contovounesios" <contovob@tcd.ie> >> Date: Mon, 25 Feb 2019 21:00:41 +0000 >> >> Starting program: /home/blc/.local/src/emacs26/src/emacs -Q --module-assertions >> [Thread debugging using libthread_db enabled] >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". >> [New Thread 0x7ffff01cb700 (LWP 8299)] >> [New Thread 0x7fffef9ac700 (LWP 8300)] >> [New Thread 0x7fffef1ab700 (LWP 8301)] >> >> Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. >> re_search_2 (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, >> range=18, regs=0x0, stop=18) at regex.c:4354 >> 4354 buf_ch = STRING_CHAR_AND_LENGTH (d, buf_charlen); >> #0 0x0000000000608594 in re_search_2 >> (bufp=0xbf5d00 <searchbufs+384>, str1=0x0, size1=0, str2=0x0, size2=18, startpos=0, range=18, regs=0x0, stop=18) at regex.c:4354 >> buf_charlen = 0 >> irange = 18 >> lim = 0 >> d = 0x0 >> buf_ch = 18 >> val = 691541629 >> string1 = 0x0 >> string2 = 0x0 >> fastmap = 0xbf5d38 <searchbufs+440> "" >> translate = make_number(0) >> total_size = 18 >> endpos = 18 >> anchored_start = 0 '\000' >> multibyte = 1 '\001' >> #1 0x0000000000607f91 in re_search >> (bufp=0xbf5d00 <searchbufs+384>, string=0x0, size=18, startpos=0, range=18, regs=0x0) >> at regex.c:4181 >> #2 0x00000000005f3fd0 in fast_string_match_internal >> (regexp=XIL(0x8c761c), string=XIL(0x3036ec4), table=XIL(0)) at search.c:485 >> val = 140737488336288 >> bufp = 0xbf5d00 <searchbufs+384> > > Here's your problem: fast_string_match_internal got a Lisp > string=XIL(0x3036ec4), but its data passed to re_search as the 2nd arg > is a NULL pointer. You need to find out how this happens, e.g. by > setting a watchpoint on string's data inside Ffile_name_as_directory. > Or maybe the string is already corrupted there? The file name string is already corrupted when Ffile_name_as_directory is called; see below. First, I rewrote the dynamic module[1] to add nonlocal exit checks after almost every call to the module API. [1]: https://gitlab.com/basil-conto/realpath I also added the following assertions to src/emacs-module.c: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: module-asserts.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] diff --git a/src/emacs-module.c b/src/emacs-module.c index 0abfd3f6f1..4f2b0ecd4b 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -458,6 +458,8 @@ module_make_function (emacs_env *env, ptrdiff_t min_arity, ptrdiff_t max_arity, return lisp_to_value (env, result); } +static bool my_check = false; + static emacs_value module_funcall (emacs_env *env, emacs_value fun, ptrdiff_t nargs, emacs_value args[]) @@ -473,6 +475,7 @@ module_funcall (emacs_env *env, emacs_value fun, ptrdiff_t nargs, xsignal0 (Qoverflow_error); SAFE_ALLOCA_LISP (newargs, nargs1); newargs[0] = value_to_lisp (fun); + my_check = EQ (newargs[0], Qfile_name_as_directory); for (ptrdiff_t i = 0; i < nargs; i++) newargs[1 + i] = value_to_lisp (args[i]); emacs_value result = lisp_to_value (env, Ffuncall (nargs1, newargs)); @@ -581,8 +584,10 @@ module_make_string (emacs_env *env, const char *str, ptrdiff_t length) /* FIXME: AUTO_STRING_WITH_LEN requires STR to be null-terminated, but we shouldn't require that. */ AUTO_STRING_WITH_LEN (lstr, str, length); - return lisp_to_value (env, - code_convert_string_norecord (lstr, Qutf_8, false)); + Lisp_Object lisp = code_convert_string_norecord (lstr, Qutf_8, false); + eassert (STRINGP (lisp) && SSDATA (lisp)); + my_check = true; + return lisp_to_value (env, lisp); } static emacs_value @@ -955,6 +960,8 @@ value_to_lisp_bits (emacs_value v) static Lisp_Object value_to_lisp (emacs_value v) { + bool b = my_check; + my_check = false; if (module_assertions) { /* Check the liveness of the value by iterating over all live @@ -972,7 +979,11 @@ value_to_lisp (emacs_value v) { Lisp_Object *p = XSAVE_POINTER (XCAR (values), 0); if (p == optr) - return *p; + { + if (b) + eassert (STRINGP (*p) && SSDATA (*p)); + return *p; + } ++num_values; } ++num_environments; @@ -1008,6 +1019,8 @@ lisp_to_value_bits (Lisp_Object o) static emacs_value lisp_to_value (emacs_env *env, Lisp_Object o) { + bool b = my_check; + my_check = false; if (module_assertions) { /* Add the new value to the list of values allocated from this @@ -1020,6 +1033,11 @@ lisp_to_value (emacs_env *env, Lisp_Object o) ATTRIBUTE_MAY_ALIAS emacs_value ret = vptr; struct emacs_env_private *priv = env->private_members; priv->values = Fcons (make_save_ptr (ret), priv->values); + if (b) + { + eassert (STRINGP (o) && SSDATA (o)); + eassert (STRINGP (*optr) && SSDATA (*optr)); + } return ret; } [-- Attachment #4: Type: text/plain, Size: 890 bytes --] These reveal that value_to_lisp eventually returns a corrupted string, but I don't know why. I've seen comments in src/fileio.c referring to string-relocation during GC; could this be at play here? Either way, do you have any suggestions on how to proceed? Here's the full recipe again, now with debugging symbols for the module: 0. git clone https://gitlab.com/basil-conto/realpath.git 1. cd realpath 2. make DEBUG=1 3. cd /path/to/emacs/src 4. gdb emacs 5. set logging on 6. r -Q --module-assertions 7. (progn (module-load "/path/to/realpath.so") (dotimes (_ 1000) (realpath-truename user-emacs-directory))) C-j [The loop usually trips the assertions on its first run, but if it doesn't, just try again once or twice.] 8. bt full 9. f 2 10. p p 11. pr [#<INVALID_LISP_OBJECT 0x03059c90>] 12. xpr I attach the resulting GDB log. Thanks, -- Basil ^ permalink raw reply related [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-17 16:38 ` Basil L. Contovounesios @ 2019-03-17 17:08 ` Eli Zaretskii 2019-03-17 23:52 ` Basil L. Contovounesios 0 siblings, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-17 17:08 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655, p.stephani2 > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Cc: <34655@debbugs.gnu.org>, Philipp Stephani <p.stephani2@gmail.com> > Date: Sun, 17 Mar 2019 16:38:58 +0000 > > These reveal that value_to_lisp eventually returns a corrupted string, > but I don't know why. Did you try to identify the code which causes the corruption, i.e. the data is valid before that code runs, and invalid after that? If not, can you try? The way to do that is by painstakingly stepping through the code while examining the relevant data, possibly with help of watchpoints and displays set up by the GDB "display" command. > I've seen comments in src/fileio.c referring to string-relocation > during GC; could this be at play here? It could be, if your module code holds onto C pointers to Lisp string data while Emacs runs parts of the interpreter which could GC. Does that happen anywhere in your code or in the code involved in module-assertions? > Either way, do you have any suggestions on how to proceed? See above. I tried at the time to reproduce your problem, and failed. But I did that on Windows, where I needed to replace the non-existent realpath by an equivalent function, so it's not a faithful reproduction. I will see if I can find time to look at this on a GNU machine, unless someone beats me to it. > 8. bt full > 9. f 2 > 10. p p > 11. pr [#<INVALID_LISP_OBJECT 0x03059c90>] > 12. xpr Why did you expect 'p' to be a valid Lisp object? It's actually a pointer to a Lisp object, i.e. try (gdb) p *p (gdb) xpr ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-17 17:08 ` Eli Zaretskii @ 2019-03-17 23:52 ` Basil L. Contovounesios 2019-03-18 16:21 ` Eli Zaretskii 0 siblings, 1 reply; 32+ messages in thread From: Basil L. Contovounesios @ 2019-03-17 23:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 34655, p.stephani2 Eli Zaretskii <eliz@gnu.org> writes: >> From: "Basil L. Contovounesios" <contovob@tcd.ie> >> Cc: <34655@debbugs.gnu.org>, Philipp Stephani <p.stephani2@gmail.com> >> Date: Sun, 17 Mar 2019 16:38:58 +0000 >> >> These reveal that value_to_lisp eventually returns a corrupted string, >> but I don't know why. > > Did you try to identify the code which causes the corruption, i.e. the > data is valid before that code runs, and invalid after that? If not, > can you try? The way to do that is by painstakingly stepping through > the code while examining the relevant data, possibly with help of > watchpoints and displays set up by the GDB "display" command. The patch adding assertions to emacs-module.c narrows the problematic code to lines 123--127 of the dynamic module[1]: if (rp_lisp_string (env, &file, nbuf) && rp_funcall (env, &dir, "directory-name-p", 1, &dir) && env->is_not_nil (env, dir)) /* Return directory name when given one à la Ffile_truename. */ rp_funcall (env, &file, "file-name-as-directory", 1, &file); [1]: https://gitlab.com/basil-conto/realpath/blob/master/realpath.c#L123-127 On line 123, 'file' is set to an Emacs string created from the C string 'nbuf' ('rp_lisp_string' wraps 'module_make_string' along with a nonlocal exit check, and similarly 'rp_funcall' wraps 'module_funcall'). On line 127, 'file' is passed to 'file-name-as-directory'. The assertions added to 'module_make_string' and 'lisp_to_value' never fail, suggesting the string returned by them is fine (though the assertions in 'lisp_to_value' only target intermediate Lisp_Objects, not the returned emacs_value). The assertion added to 'value_to_lisp' via 'module_funcall', OTOH, does fail. I'll see if I can step through this, though I'm not yet sure how I'll distinguish the problematic call to the module function from the hundreds of unproblematic ones before it. There's probably a way to teach GDB how to inspect emacs_values which I'm not yet familiar with. >> I've seen comments in src/fileio.c referring to string-relocation >> during GC; could this be at play here? > > It could be, if your module code holds onto C pointers to Lisp string > data while Emacs runs parts of the interpreter which could GC. Does > that happen anywhere in your code or in the code involved in > module-assertions? I can't speak for emacs-module.c (I haven't yet understood how Vmodule_environments and its save pointers work), but the only exchange between C and Lisp strings in my code is via the module API, i.e. module_make_string and module_copy_string_contents. I would hope the API and its opaque emacs_value type make it difficult for such issues to arise. >> Either way, do you have any suggestions on how to proceed? > > See above. > > I tried at the time to reproduce your problem, and failed. But I did > that on Windows, where I needed to replace the non-existent realpath > by an equivalent function, so it's not a faithful reproduction. I > will see if I can find time to look at this on a GNU machine, unless > someone beats me to it. Replacing 'canonicalize_file_name' with 'strdup' still reproduces the issue for me. Perhaps increasing the number of calls to realpath-truename from 1000 to 5000 will also help. >> 8. bt full >> 9. f 2 >> 10. p p >> 11. pr [#<INVALID_LISP_OBJECT 0x03059c90>] >> 12. xpr > > Why did you expect 'p' to be a valid Lisp object? It's actually a > pointer to a Lisp object, i.e. try > > (gdb) p *p > (gdb) xpr Oops, that was a thinko. The only difference is GDB reports XIL(...) instead of (Lisp_Object *), though. Thank you for your help, I'll report more as time allows. -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-17 23:52 ` Basil L. Contovounesios @ 2019-03-18 16:21 ` Eli Zaretskii 2019-03-18 16:58 ` Basil L. Contovounesios 0 siblings, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-18 16:21 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655, p.stephani2 > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Cc: <34655@debbugs.gnu.org>, <p.stephani2@gmail.com> > Date: Sun, 17 Mar 2019 23:52:55 +0000 > > > I tried at the time to reproduce your problem, and failed. But I did > > that on Windows, where I needed to replace the non-existent realpath > > by an equivalent function, so it's not a faithful reproduction. I > > will see if I can find time to look at this on a GNU machine, unless > > someone beats me to it. > > Replacing 'canonicalize_file_name' with 'strdup' still reproduces the > issue for me. Perhaps increasing the number of calls to > realpath-truename from 1000 to 5000 will also help. Right, the strdup part did that for me. (My previous attempt also used strdup as part of the replacement, but still failed to reproduce. Memory corruption bugs are frequently weird that way.) So I modified your recipe slightly, like this: (progn (module-load "/path/to/realpath.so") (setq garbage-collection-messages t) (dotimes (i 5000) (message "%d" i) (realpath-truename user-emacs-directory))) put it on a file named rp.el, and then ran it under GDB: (gdb) r -batch --module-assertions -l ./rp.el Here's what I see: [...] 3077 3078 3079 3080 Garbage collecting... Garbage collecting...done Thread 1 received signal SIGSEGV, Segmentation fault. 0x011e9918 in rpl_re_search_2 (bufp=0x17c0260 <searchbufs+4736>, str1=0x0, size1=0, str2=0x0, size2=20, startpos=0, range=20, regs=0x0, stop=20) at regex-emacs.c:3322 3322 buf_ch = STRING_CHAR_AND_LENGTH (d, buf_charlen) Looks like it indeed crashes after a GC, and on my system needs more than 3000 iterations. So let's run it with a breakpoint at the beginning of GC: (gdb) break alloc.c:6044 Breakpoint 3 at 0x11fa1bb: file alloc.c, line 6044. (gdb) r -batch --module-assertions -l ./rp.el [...] 3080 Thread 1 hit Breakpoint 3, garbage_collect_1 (gcst=0x82bb84) at alloc.c:6044 6044 record_in_backtrace (QAutomatic_GC, 0, 0); The backtrace at this point: (gdb) bt #0 garbage_collect_1 (gcst=0x82bb84) at alloc.c:6044 #1 0x011fa88e in garbage_collect () at alloc.c:6241 #2 0x01149adc in maybe_gc () at lisp.h:5028 #3 0x0123b012 in Ffuncall (nargs=2, args=0x82bcb0) at eval.c:2829 #4 0x0128c3cf in module_funcall (env=0x6122730, fun=0x6122868, nargs=1, args=0x82bd50) at emacs-module.c:483 #5 0x62d8136f in rp_funcall (env=0x6122730, value=0x82bd50, name=0x62d83060 "directory-name-p", nargs=1, args=0x82bd50) at realpath.c:62 #6 0x62d815cc in Frealpath_truename (env=0x6122730, nargs=1, args=0x82bd90, data=0x0) at realpath.c:124 [...] Lisp Backtrace: "directory-name-p" (0x82bcb8) "realpath-truename" (0x82bf80) "while" (0x82c2c8) "let" (0x82c538) "eval-buffer" (0x82cab0) "load-with-code-conversion" (0x82d0f0) "load" (0x82d9b8) "command-line-1" (0x82e3d0) "command-line" (0x82efe8) "normal-top-level" (0x82f690) As you see, the call to Ffuncall is the one that triggers GC from time to time. What happens with our 'file' at this point? (gdb) fr 6 (gdb) p file $1 = (emacs_value) 0x6122848 (gdb) p *file $2 = <incomplete type> (gdb) p *(Lisp_Object *)file $3 = XIL(0x8000000006121ed0) (gdb) xtype Lisp_String (gdb) xstring $4 = (struct Lisp_String *) 0x6121ed0 "d:/usr/eli/.emacs.d/" Still valid. Now let's see who thrashes it: (gdb) p *$4 $5 = { u = { s = { size = 20, size_byte = 20, intervals = 0x0, data = 0x611e9fc "d:/usr/eli/.emacs.d/" }, next = 0x14, gcaligned = 20 '\024' } } (gdb) watch -l $4->u.s.data Hardware watchpoint 4: -location $4->u.s.data (gdb) c Continuing. Garbage collecting... Thread 1 hit Hardware watchpoint 4: -location $4->u.s.data Old value = (unsigned char *) 0x611e9fc "\024" New value = (unsigned char *) 0x0 sweep_strings () at alloc.c:2163 2163 NEXT_FREE_LISP_STRING (s) = string_free_list; (gdb) list 2158 /* Reset the strings's `data' member so that we 2159 know it's free. */ 2160 s->u.s.data = NULL; 2161 2162 /* Put the string on the free-list. */ 2163 NEXT_FREE_LISP_STRING (s) = string_free_list; 2164 string_free_list = ptr_bounds_clip (s, sizeof *s); 2165 ++nfree; 2166 } 2167 } Bingo! This is sweep_strings freeing our string, because it evidently doesn't think it's a Lisp object that is being still referenced. The culprit is this fragment from emacs-module.c, which is called each time you receive a Lisp object from Emacs which you want to use in your module: /* Convert O to an emacs_value. Allocate storage if needed; this can signal if memory is exhausted. Must be an injective function. */ static emacs_value lisp_to_value (emacs_env *env, Lisp_Object o) { if (module_assertions) { /* Add the new value to the list of values allocated from this environment. The value is actually a pointer to the Lisp_Object cast to emacs_value. We make a copy of the object on the free store to guarantee unique addresses. */ ATTRIBUTE_MAY_ALIAS Lisp_Object *optr = xmalloc (sizeof o); *optr = o; void *vptr = optr; ATTRIBUTE_MAY_ALIAS emacs_value ret = vptr; struct emacs_env_private *priv = env->private_members; priv->values = Fcons (make_mint_ptr (ret), priv->values); return ret; } What this does is make a copy of each Lisp object you get from Emacs, store that copy in memory allocated off the heap, and hand your module a pointer to the copy instead of the original object. So when you call, e.g., directory-name-p, an Emacs function, it gets that copy of the object. But memory allocation by xmalloc doesn't record the allocated memory in the red-black tree we maintain for the purposes of detecting Lisp objects referenced by C stack-based variables. So when GC comes to examine the C stack, it doesn't consider the variable 'file' in your module as being a pointer to a live Lisp object, and so it doesn't mark it. Then the sweep phase of GC recycles your Lisp object, which in this case involves setting the string's data to a NULL pointer. The patch to fix this is below; it simply marks these copied values by hand, thus preventing them from being GCed. It ran successfully with even 50,000 iterations. Philipp, any comments/objections? --- src/emacs-module.c~0 2019-02-25 10:18:35.000000000 +0200 +++ src/emacs-module.c 2019-03-18 08:33:00.564476000 +0200 @@ -1133,6 +1133,15 @@ mark_modules (void) mark_object (priv->non_local_exit_symbol); mark_object (priv->non_local_exit_data); mark_object (priv->values); + if (module_assertions) + { + for (Lisp_Object values = priv->values; + CONSP (values); values = XCDR (values)) + { + Lisp_Object *p = xmint_pointer (XCAR (values)); + mark_object (*p); + } + } } } ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-18 16:21 ` Eli Zaretskii @ 2019-03-18 16:58 ` Basil L. Contovounesios 2019-03-18 17:53 ` Eli Zaretskii 0 siblings, 1 reply; 32+ messages in thread From: Basil L. Contovounesios @ 2019-03-18 16:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 34655, p.stephani2 Eli Zaretskii <eliz@gnu.org> writes: > The patch to fix this is below; it simply marks these copied values by > hand, thus preventing them from being GCed. It ran successfully with > even 50,000 iterations. I can confirm that your patch fixes the issue. I am very grateful not only for your looking into this, but also for taking the time to explain the whole process; it has been enlightening and would have taken me a lot of time to figure out alone. Thanks, -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-18 16:58 ` Basil L. Contovounesios @ 2019-03-18 17:53 ` Eli Zaretskii 2019-03-21 16:11 ` Philipp Stephani 0 siblings, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-18 17:53 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655, p.stephani2 > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Cc: <34655@debbugs.gnu.org>, <p.stephani2@gmail.com> > Date: Mon, 18 Mar 2019 16:58:35 +0000 > > Eli Zaretskii <eliz@gnu.org> writes: > > > The patch to fix this is below; it simply marks these copied values by > > hand, thus preventing them from being GCed. It ran successfully with > > even 50,000 iterations. > > I can confirm that your patch fixes the issue. Great, thanks for testing. > I am very grateful not only for your looking into this, but also for > taking the time to explain the whole process; it has been enlightening > and would have taken me a lot of time to figure out alone. You are welcome. I will wait for a few days to give Philipp and others a chance to comment, and push then if no one comes up with objections. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-18 17:53 ` Eli Zaretskii @ 2019-03-21 16:11 ` Philipp Stephani 2019-03-21 17:00 ` Eli Zaretskii 0 siblings, 1 reply; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 16:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655 Am Mo., 18. März 2019 um 18:53 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > From: "Basil L. Contovounesios" <contovob@tcd.ie> > > Cc: <34655@debbugs.gnu.org>, <p.stephani2@gmail.com> > > Date: Mon, 18 Mar 2019 16:58:35 +0000 > > > > Eli Zaretskii <eliz@gnu.org> writes: > > > > > The patch to fix this is below; it simply marks these copied values by > > > hand, thus preventing them from being GCed. It ran successfully with > > > even 50,000 iterations. > > > > I can confirm that your patch fixes the issue. > > Great, thanks for testing. > > > I am very grateful not only for your looking into this, but also for > > taking the time to explain the whole process; it has been enlightening > > and would have taken me a lot of time to figure out alone. > > You are welcome. > > I will wait for a few days to give Philipp and others a chance to > comment, and push then if no one comes up with objections. I haven't checked everything in detail, but my impression is that this is rather another instance of bug#31238. Fixing this only when module assertions are enabled will probably not fix anything, but rather mask issues. Reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a is still the right approach here. Can you please hold off a bit? I've almost completed the revert, but haven't pushed it yet. Once that's in we can check whether it also fixes this issue. Thanks! ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 16:11 ` Philipp Stephani @ 2019-03-21 17:00 ` Eli Zaretskii 2019-03-21 18:28 ` Philipp Stephani 0 siblings, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 17:00 UTC (permalink / raw) To: Philipp Stephani, Stefan Monnier; +Cc: contovob, 34655 > From: Philipp Stephani <p.stephani2@gmail.com> > Date: Thu, 21 Mar 2019 17:11:41 +0100 > Cc: "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > I haven't checked everything in detail, but my impression is that this > is rather another instance of bug#31238. Fixing this only when module > assertions are enabled will probably not fix anything, but rather mask > issues. Reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a is > still the right approach here. Can you please hold off a bit? I've > almost completed the revert, but haven't pushed it yet. Once that's in > we can check whether it also fixes this issue. I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. I'm not sure we should revert that; we could instead add GC protection for those parts that need it. And the list consed by module-assertions certainly is one of those. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 17:00 ` Eli Zaretskii @ 2019-03-21 18:28 ` Philipp Stephani 2019-03-21 19:23 ` Philipp Stephani 2019-03-21 19:27 ` Eli Zaretskii 0 siblings, 2 replies; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 18:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier Am Do., 21. März 2019 um 18:00 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > From: Philipp Stephani <p.stephani2@gmail.com> > > Date: Thu, 21 Mar 2019 17:11:41 +0100 > > Cc: "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > > > I haven't checked everything in detail, but my impression is that this > > is rather another instance of bug#31238. Fixing this only when module > > assertions are enabled will probably not fix anything, but rather mask > > issues. Reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a is > > still the right approach here. Can you please hold off a bit? I've > > almost completed the revert, but haven't pushed it yet. Once that's in > > we can check whether it also fixes this issue. > > I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. > > I'm not sure we should revert that; we could instead add GC protection > for those parts that need it. Yes, that's what reverting that commit does :-) We need to mark the objects in all cases, not just when module assertions are enabled. Note that both the designer of the module API (Daniel) and I as one of its main implementers disagree with commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. I'm happy to discuss alternatives, but for now we should revert it and discuss the alternatives *before* implementing them. I've already confirmed that reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes bug#31238, and I can try it with this bug as well. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 18:28 ` Philipp Stephani @ 2019-03-21 19:23 ` Philipp Stephani 2019-03-21 19:34 ` Eli Zaretskii 2019-03-21 21:29 ` Basil L. Contovounesios 2019-03-21 19:27 ` Eli Zaretskii 1 sibling, 2 replies; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 19:23 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier Am Do., 21. März 2019 um 19:28 Uhr schrieb Philipp Stephani <p.stephani2@gmail.com>: > > Am Do., 21. März 2019 um 18:00 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > > > From: Philipp Stephani <p.stephani2@gmail.com> > > > Date: Thu, 21 Mar 2019 17:11:41 +0100 > > > Cc: "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > > > > > I haven't checked everything in detail, but my impression is that this > > > is rather another instance of bug#31238. Fixing this only when module > > > assertions are enabled will probably not fix anything, but rather mask > > > issues. Reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a is > > > still the right approach here. Can you please hold off a bit? I've > > > almost completed the revert, but haven't pushed it yet. Once that's in > > > we can check whether it also fixes this issue. > > > > I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. > > > > I'm not sure we should revert that; we could instead add GC protection > > for those parts that need it. > > Yes, that's what reverting that commit does :-) > We need to mark the objects in all cases, not just when module > assertions are enabled. > Note that both the designer of the module API (Daniel) and I as one of > its main implementers disagree with commit > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. I'm happy to discuss > alternatives, but for now we should revert it and discuss the > alternatives *before* implementing them. I've already confirmed that > reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes > bug#31238, and I can try it with this bug as well. I wasn't able to reproduce bug#34655 myself (these things tend to be rather flaky), but I've now reverted commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a, and at least bug#31238 is now consistently fixed (for me at least). Basil, can you check whether you can still reproduce bug#34655 with the current master? Thanks! ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:23 ` Philipp Stephani @ 2019-03-21 19:34 ` Eli Zaretskii 2019-03-21 21:29 ` Basil L. Contovounesios 1 sibling, 0 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 19:34 UTC (permalink / raw) To: Philipp Stephani; +Cc: contovob, 34655, monnier > From: Philipp Stephani <p.stephani2@gmail.com> > Date: Thu, 21 Mar 2019 20:23:30 +0100 > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > I wasn't able to reproduce bug#34655 myself (these things tend to be > rather flaky), but I've now reverted commit > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a And I've just reverted the revert. I'm sorry, but you cannot apply rules unilaterally: if you think it's not OK to make changes without waiting for consensus, please adhere to the same principles when you want to make your own changes. Let's wait for this discussion to run to completion, before we are doing any more changes in this area. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:23 ` Philipp Stephani 2019-03-21 19:34 ` Eli Zaretskii @ 2019-03-21 21:29 ` Basil L. Contovounesios 2019-03-22 7:11 ` Eli Zaretskii 1 sibling, 1 reply; 32+ messages in thread From: Basil L. Contovounesios @ 2019-03-21 21:29 UTC (permalink / raw) To: Philipp Stephani; +Cc: 34655, Stefan Monnier Philipp Stephani <p.stephani2@gmail.com> writes: > Am Do., 21. März 2019 um 19:28 Uhr schrieb Philipp Stephani > <p.stephani2@gmail.com>: >> >> Am Do., 21. März 2019 um 18:00 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: >> > >> > > From: Philipp Stephani <p.stephani2@gmail.com> >> > > Date: Thu, 21 Mar 2019 17:11:41 +0100 >> > > Cc: "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org >> > > >> > > I haven't checked everything in detail, but my impression is that this >> > > is rather another instance of bug#31238. Fixing this only when module >> > > assertions are enabled will probably not fix anything, but rather mask >> > > issues. Reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a is >> > > still the right approach here. Can you please hold off a bit? I've >> > > almost completed the revert, but haven't pushed it yet. Once that's in >> > > we can check whether it also fixes this issue. >> > >> > I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. >> > >> > I'm not sure we should revert that; we could instead add GC protection >> > for those parts that need it. >> >> Yes, that's what reverting that commit does :-) >> We need to mark the objects in all cases, not just when module >> assertions are enabled. >> Note that both the designer of the module API (Daniel) and I as one of >> its main implementers disagree with commit >> 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. I'm happy to discuss >> alternatives, but for now we should revert it and discuss the >> alternatives *before* implementing them. I've already confirmed that >> reverting commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes >> bug#31238, and I can try it with this bug as well. > > I wasn't able to reproduce bug#34655 myself (these things tend to be > rather flaky), but I've now reverted commit > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a, and at least bug#31238 is > now consistently fixed (for me at least). Basil, can you check whether > you can still reproduce bug#34655 with the current master? FWIW, I cannot reproduce bug#34655 after reverting Stefan's commit. Thanks, -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 21:29 ` Basil L. Contovounesios @ 2019-03-22 7:11 ` Eli Zaretskii 0 siblings, 0 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-22 7:11 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: 34655, p.stephani2, monnier > From: "Basil L. Contovounesios" <contovob@tcd.ie> > Cc: Eli Zaretskii <eliz@gnu.org>, Stefan Monnier <monnier@iro.umontreal.ca>, 34655@debbugs.gnu.org > Date: Thu, 21 Mar 2019 21:29:14 +0000 > > FWIW, I cannot reproduce bug#34655 after reverting Stefan's commit. Great, thanks for testing. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 18:28 ` Philipp Stephani 2019-03-21 19:23 ` Philipp Stephani @ 2019-03-21 19:27 ` Eli Zaretskii 2019-03-21 19:37 ` Philipp Stephani 2019-03-22 0:56 ` Stefan Monnier 1 sibling, 2 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 19:27 UTC (permalink / raw) To: Philipp Stephani; +Cc: contovob, 34655, monnier > > I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. > > > > I'm not sure we should revert that; we could instead add GC protection > > for those parts that need it. > > Yes, that's what reverting that commit does :-) AFAIU, it does much more. Stefan intended for the conservative stack marking to do the job, so maybe there's a little more that should be done to get there. Or maybe Stefan didn't consider some important factor(s). In either case, I'd like to hear his POV on this before we decide how to proceed. > We need to mark the objects in all cases, not just when module > assertions are enabled. If we get stack marking to work, we won't need to mark objects explicitly. > Note that both the designer of the module API (Daniel) and I as one of > its main implementers disagree with commit > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. OK, but I think Stefan's opinion is not less important. > I've already confirmed that reverting commit > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes bug#31238, and I can > try it with this bug as well. Please do, it's important to know that, I think. Thanks. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:27 ` Eli Zaretskii @ 2019-03-21 19:37 ` Philipp Stephani 2019-03-21 19:50 ` Eli Zaretskii 2019-03-21 21:31 ` Basil L. Contovounesios 2019-03-22 0:56 ` Stefan Monnier 1 sibling, 2 replies; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 19:37 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier Am Do., 21. März 2019 um 20:27 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > > I will CC Stefan, who committed 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. > > > > > > I'm not sure we should revert that; we could instead add GC protection > > > for those parts that need it. > > > > Yes, that's what reverting that commit does :-) > > AFAIU, it does much more. Stefan intended for the conservative stack > marking to do the job, so maybe there's a little more that should be > done to get there. Or maybe Stefan didn't consider some important > factor(s). In either case, I'd like to hear his POV on this before we > decide how to proceed. Let's go back to the known good state first, and then discuss how to go from there. > > > We need to mark the objects in all cases, not just when module > > assertions are enabled. > > If we get stack marking to work, we won't need to mark objects > explicitly. We can't get stack marking to work, even theoretically. A module is free to do emacs_value x = ...; uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; (garbage-collect) emacs_value z = (emacs_value) (y ^ 0x123456u); ... use z ... During the garbage collection, x isn't on the stack anywhere, and the garbage collector couldn't possibly find it. Or: emacs_value x = ...; emacs_value *y = malloc (sizeof emacs_value); *y = x; ... stop using x... (garbage-collect) ...use *y ... Again, during garbage collection x is no longer on the stack. We can only use stack scanning in Emacs because we control the Emacs source code and can make sure these patterns don't occur. Module code is completely arbitrary. > > > Note that both the designer of the module API (Daniel) and I as one of > > its main implementers disagree with commit > > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. > > OK, but I think Stefan's opinion is not less important. I value his opinion, but again: let's make the thing work first, and then discuss options. > > > I've already confirmed that reverting commit > > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes bug#31238, and I can > > try it with this bug as well. > > Please do, it's important to know that, I think. Basil, could you check that with the revert your code now works? Thanks! ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:37 ` Philipp Stephani @ 2019-03-21 19:50 ` Eli Zaretskii 2019-03-21 20:01 ` Philipp Stephani 2019-03-21 21:31 ` Basil L. Contovounesios 1 sibling, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 19:50 UTC (permalink / raw) To: Philipp Stephani; +Cc: contovob, 34655, monnier > From: Philipp Stephani <p.stephani2@gmail.com> > Date: Thu, 21 Mar 2019 20:37:24 +0100 > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > Let's go back to the known good state first, and then discuss how to > go from there. I don't see why that is better than discuss first and then go to where we decide to go. It's not like Emacs 27 will be released any time soon, so there's no rush. > We can't get stack marking to work, even theoretically. > > A module is free to do > > emacs_value x = ...; > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; > (garbage-collect) > emacs_value z = (emacs_value) (y ^ 0x123456u); > ... use z ... > > During the garbage collection, x isn't on the stack anywhere Why do you think x isn't on the stack in this case? Moreover, emacs_value is actually a pointer to a Lisp object, so this object is also somewhere on the stack, right? > emacs_value x = ...; > emacs_value *y = malloc (sizeof emacs_value); > *y = x; > ... stop using x... > (garbage-collect) > ...use *y ... > > Again, during garbage collection x is no longer on the stack. Why do you think it isn't on the stack? > We can only use stack scanning in Emacs because we control the Emacs > source code Actually, we do nothing special about stack-based values in our sources, except avoiding undefined behavior. > > OK, but I think Stefan's opinion is not less important. > > I value his opinion, but again: let's make the thing work first, and > then discuss options. Fixing one bug doesn't necessarily mean things now "work"; there's always one more bug. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:50 ` Eli Zaretskii @ 2019-03-21 20:01 ` Philipp Stephani 2019-03-21 20:14 ` Eli Zaretskii 0 siblings, 1 reply; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 20:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier Am Do., 21. März 2019 um 20:50 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > From: Philipp Stephani <p.stephani2@gmail.com> > > Date: Thu, 21 Mar 2019 20:37:24 +0100 > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > > > Let's go back to the known good state first, and then discuss how to > > go from there. > > I don't see why that is better than discuss first and then go to where > we decide to go. It's not like Emacs 27 will be released any time > soon, so there's no rush. For one, it becomes harder and harder to revert commits the older they get. Also such discussions tend to turn into endless debates about the "perfect" solution until one side gives up, without improving anything. I strongly prefer fixing actual bugs that affect users in practice and then discussing (or not discussing) the gold-plating steps later. > > > We can't get stack marking to work, even theoretically. > > > > A module is free to do > > > > emacs_value x = ...; > > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; > > (garbage-collect) > > emacs_value z = (emacs_value) (y ^ 0x123456u); > > ... use z ... > > > > During the garbage collection, x isn't on the stack anywhere > > Why do you think x isn't on the stack in this case? Because the compiler reused the stack slot for something else? Because the module is written in a language that doesn't use the stack in a way that the garbage collector expects? There's no reason to assume modules have any form of C-compatible stack layout. > > Moreover, emacs_value is actually a pointer to a Lisp object, so this > object is also somewhere on the stack, right? > > > emacs_value x = ...; > > emacs_value *y = malloc (sizeof emacs_value); > > *y = x; > > ... stop using x... > > (garbage-collect) > > ...use *y ... > > > > Again, during garbage collection x is no longer on the stack. > > Why do you think it isn't on the stack? Same as above. > > > We can only use stack scanning in Emacs because we control the Emacs > > source code > > Actually, we do nothing special about stack-based values in our > sources, except avoiding undefined behavior. (Stack scanning is undefined behavior, but that's not the point.) We do something very specific with the stack: we make sure that Lisp_Objects are never manipulated in a way similar to the above, and we use the C language. > > > > OK, but I think Stefan's opinion is not less important. > > > > I value his opinion, but again: let's make the thing work first, and > > then discuss options. > > Fixing one bug doesn't necessarily mean things now "work"; there's > always one more bug. That might be theoretically true, but shouldn't impact decisions until that bug is actually found. All regression tests still pass after reverting the commit. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 20:01 ` Philipp Stephani @ 2019-03-21 20:14 ` Eli Zaretskii 2019-03-21 20:26 ` Philipp Stephani 0 siblings, 1 reply; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 20:14 UTC (permalink / raw) To: Philipp Stephani; +Cc: contovob, 34655, monnier > From: Philipp Stephani <p.stephani2@gmail.com> > Date: Thu, 21 Mar 2019 21:01:43 +0100 > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org, > Daniel Colascione <dancol@dancol.org> > > Am Do., 21. März 2019 um 20:50 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > > > From: Philipp Stephani <p.stephani2@gmail.com> > > > Date: Thu, 21 Mar 2019 20:37:24 +0100 > > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > > > > > Let's go back to the known good state first, and then discuss how to > > > go from there. > > > > I don't see why that is better than discuss first and then go to where > > we decide to go. It's not like Emacs 27 will be released any time > > soon, so there's no rush. > > For one, it becomes harder and harder to revert commits the older they > get. Also such discussions tend to turn into endless debates about the > "perfect" solution until one side gives up, without improving > anything. I strongly prefer fixing actual bugs that affect users in > practice and then discussing (or not discussing) the gold-plating > steps later. I also prefer fixing bugs (which is why I spent several hours looking into Basil's crash, when no one else was replying to that bug report), but this is a community project, so we should discuss first and act later. Especially when controversial issues are involved. > > > We can't get stack marking to work, even theoretically. > > > > > > A module is free to do > > > > > > emacs_value x = ...; > > > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; > > > (garbage-collect) > > > emacs_value z = (emacs_value) (y ^ 0x123456u); > > > ... use z ... > > > > > > During the garbage collection, x isn't on the stack anywhere > > > > Why do you think x isn't on the stack in this case? > > Because the compiler reused the stack slot for something else? How can it? You are using the same pointer later. Garbage collection cannot happen unless you call an Emacs function, such as Ffuncall. Calling a function means that even if the pointer to a Lisp object was in a register, it will be put on the stack when calling Emacs. > Because the module is written in a language that doesn't use the stack > in a way that the garbage collector expects? Which language is that, and how can it use the emacs-module machinery? > > Moreover, emacs_value is actually a pointer to a Lisp object, so this > > object is also somewhere on the stack, right? No answer? > We do something very specific with the stack: we make sure that > Lisp_Objects are never manipulated in a way similar to the above, and > we use the C language. If worse comes to worst, we can request module writers to adhere to the same discipline. We already request them to do/not to do quite a few extraordinary things. > All regression tests still pass after reverting the commit. Didn't they also pass before? ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 20:14 ` Eli Zaretskii @ 2019-03-21 20:26 ` Philipp Stephani 2019-03-21 20:44 ` Eli Zaretskii 2019-03-21 20:48 ` Daniel Colascione 0 siblings, 2 replies; 32+ messages in thread From: Philipp Stephani @ 2019-03-21 20:26 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier Am Do., 21. März 2019 um 21:14 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > From: Philipp Stephani <p.stephani2@gmail.com> > > Date: Thu, 21 Mar 2019 21:01:43 +0100 > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org, > > Daniel Colascione <dancol@dancol.org> > > > > Am Do., 21. März 2019 um 20:50 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: > > > > > > > From: Philipp Stephani <p.stephani2@gmail.com> > > > > Date: Thu, 21 Mar 2019 20:37:24 +0100 > > > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org > > > > > > > > Let's go back to the known good state first, and then discuss how to > > > > go from there. > > > > > > I don't see why that is better than discuss first and then go to where > > > we decide to go. It's not like Emacs 27 will be released any time > > > soon, so there's no rush. > > > > For one, it becomes harder and harder to revert commits the older they > > get. Also such discussions tend to turn into endless debates about the > > "perfect" solution until one side gives up, without improving > > anything. I strongly prefer fixing actual bugs that affect users in > > practice and then discussing (or not discussing) the gold-plating > > steps later. > > I also prefer fixing bugs (which is why I spent several hours looking > into Basil's crash, when no one else was replying to that bug report), > but this is a community project, so we should discuss first and act > later. Especially when controversial issues are involved. Well, as you can see, these discussions seem to lead nowhere, and both bug#34655 and bug#31238 remain unfixed. > > > > > We can't get stack marking to work, even theoretically. > > > > > > > > A module is free to do > > > > > > > > emacs_value x = ...; > > > > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; > > > > (garbage-collect) > > > > emacs_value z = (emacs_value) (y ^ 0x123456u); > > > > ... use z ... > > > > > > > > During the garbage collection, x isn't on the stack anywhere > > > > > > Why do you think x isn't on the stack in this case? > > > > Because the compiler reused the stack slot for something else? > > How can it? You are using the same pointer later. Assume I don't use x later, and only y is on the stack during GC. > Garbage collection > cannot happen unless you call an Emacs function, such as Ffuncall. > Calling a function means that even if the pointer to a Lisp object was > in a register, it will be put on the stack when calling Emacs. No matter whether y here is in a register or on the stack, it's not a Lisp_Value, so the GC can't find it. > > > Because the module is written in a language that doesn't use the stack > > in a way that the garbage collector expects? > > Which language is that, and how can it use the emacs-module machinery? Go, for example. It uses green threads with its own stack management and calling conventions. The GC couldn't ever find such a stack. > > > > Moreover, emacs_value is actually a pointer to a Lisp object, so this > > > object is also somewhere on the stack, right? > > No answer? An emacs_value in the current implementation *is* a Lisp_Object cast to emacs_value. If the emacs_value is not on the stack, then there's no way to find the Lisp_Object. > > > We do something very specific with the stack: we make sure that > > Lisp_Objects are never manipulated in a way similar to the above, and > > we use the C language. > > If worse comes to worst, we can request module writers to adhere to > the same discipline. We already request them to do/not to do quite a > few extraordinary things. No we can't. Modules can contain arbitrary code and call arbitrary libraries, which we can't ever control. We need to work with everything that provides a C-compatible interface. > > > All regression tests still pass after reverting the commit. > > Didn't they also pass before? Yes, but the reproduction steps in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=31238 didn't. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 20:26 ` Philipp Stephani @ 2019-03-21 20:44 ` Eli Zaretskii 2019-03-21 20:48 ` Daniel Colascione 1 sibling, 0 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-21 20:44 UTC (permalink / raw) To: Philipp Stephani; +Cc: contovob, 34655, monnier > From: Philipp Stephani <p.stephani2@gmail.com> > Date: Thu, 21 Mar 2019 21:26:25 +0100 > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org, > Daniel Colascione <dancol@dancol.org> > > > I also prefer fixing bugs (which is why I spent several hours looking > > into Basil's crash, when no one else was replying to that bug report), > > but this is a community project, so we should discuss first and act > > later. Especially when controversial issues are involved. > > Well, as you can see, these discussions seem to lead nowhere, and both > bug#34655 and bug#31238 remain unfixed. We have been talking about this just a few minutes, so please don't exaggerate. And bug#34655 could be fixed days ago, it isn't yet because I wanted to hear your opinion, and you asked me to hold off the changes. > > > > Why do you think x isn't on the stack in this case? > > > > > > Because the compiler reused the stack slot for something else? > > > > How can it? You are using the same pointer later. > > Assume I don't use x later, and only y is on the stack during GC. If you don't use x, it can be GC'ed. > > Garbage collection > > cannot happen unless you call an Emacs function, such as Ffuncall. > > Calling a function means that even if the pointer to a Lisp object was > > in a register, it will be put on the stack when calling Emacs. > > No matter whether y here is in a register or on the stack, it's not a > Lisp_Value, so the GC can't find it. But x is. And there's the original Lisp object too, somewhere on the stack. > > > Because the module is written in a language that doesn't use the stack > > > in a way that the garbage collector expects? > > > > Which language is that, and how can it use the emacs-module machinery? > > Go, for example. It uses green threads with its own stack management > and calling conventions. The GC couldn't ever find such a stack. So you are saying that Emacs modules cannot be written in Go? > > > > Moreover, emacs_value is actually a pointer to a Lisp object, so this > > > > object is also somewhere on the stack, right? > > > > No answer? > > An emacs_value in the current implementation *is* a Lisp_Object cast > to emacs_value. Under module-assertions, it's a pointer to a (copy of a) Lisp object. > > If worse comes to worst, we can request module writers to adhere to > > the same discipline. We already request them to do/not to do quite a > > few extraordinary things. > > No we can't. Modules can contain arbitrary code and call arbitrary > libraries, which we can't ever control. We need to work with > everything that provides a C-compatible interface. Emacs modules are written to work with Emacs, so surely we can request them to observe certain rules, especially if they don't want to crash Emacs. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 20:26 ` Philipp Stephani 2019-03-21 20:44 ` Eli Zaretskii @ 2019-03-21 20:48 ` Daniel Colascione 2019-03-22 8:17 ` Eli Zaretskii 1 sibling, 1 reply; 32+ messages in thread From: Daniel Colascione @ 2019-03-21 20:48 UTC (permalink / raw) To: Philipp Stephani; +Cc: Basil L. Contovounesios, 34655, Stefan Monnier > Am Do., 21. März 2019 um 21:14 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: >> >> > From: Philipp Stephani <p.stephani2@gmail.com> >> > Date: Thu, 21 Mar 2019 21:01:43 +0100 >> > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. >> Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org, >> > Daniel Colascione <dancol@dancol.org> >> > >> > Am Do., 21. März 2019 um 20:50 Uhr schrieb Eli Zaretskii >> <eliz@gnu.org>: >> > > >> > > > From: Philipp Stephani <p.stephani2@gmail.com> >> > > > Date: Thu, 21 Mar 2019 20:37:24 +0100 >> > > > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. >> Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org >> > > > >> > > > Let's go back to the known good state first, and then discuss how >> to >> > > > go from there. >> > > >> > > I don't see why that is better than discuss first and then go to >> where >> > > we decide to go. It's not like Emacs 27 will be released any time >> > > soon, so there's no rush. >> > >> > For one, it becomes harder and harder to revert commits the older they >> > get. Also such discussions tend to turn into endless debates about the >> > "perfect" solution until one side gives up, without improving >> > anything. I strongly prefer fixing actual bugs that affect users in >> > practice and then discussing (or not discussing) the gold-plating >> > steps later. >> >> I also prefer fixing bugs (which is why I spent several hours looking >> into Basil's crash, when no one else was replying to that bug report), >> but this is a community project, so we should discuss first and act >> later. Especially when controversial issues are involved. > > Well, as you can see, these discussions seem to lead nowhere, and both > bug#34655 and bug#31238 remain unfixed. > >> >> > > > We can't get stack marking to work, even theoretically. >> > > > >> > > > A module is free to do >> > > > >> > > > emacs_value x = ...; >> > > > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u; >> > > > (garbage-collect) >> > > > emacs_value z = (emacs_value) (y ^ 0x123456u); >> > > > ... use z ... >> > > > >> > > > During the garbage collection, x isn't on the stack anywhere >> > > >> > > Why do you think x isn't on the stack in this case? >> > >> > Because the compiler reused the stack slot for something else? >> >> How can it? You are using the same pointer later. > > Assume I don't use x later, and only y is on the stack during GC. > >> Garbage collection >> cannot happen unless you call an Emacs function, such as Ffuncall. >> Calling a function means that even if the pointer to a Lisp object was >> in a register, it will be put on the stack when calling Emacs. > > No matter whether y here is in a register or on the stack, it's not a > Lisp_Value, so the GC can't find it. > >> >> > Because the module is written in a language that doesn't use the stack >> > in a way that the garbage collector expects? >> >> Which language is that, and how can it use the emacs-module machinery? > > Go, for example. It uses green threads with its own stack management > and calling conventions. The GC couldn't ever find such a stack. > >> >> > > Moreover, emacs_value is actually a pointer to a Lisp object, so >> this >> > > object is also somewhere on the stack, right? >> >> No answer? > > An emacs_value in the current implementation *is* a Lisp_Object cast > to emacs_value. If the emacs_value is not on the stack, then there's > no way to find the Lisp_Object. > >> >> > We do something very specific with the stack: we make sure that >> > Lisp_Objects are never manipulated in a way similar to the above, and >> > we use the C language. >> >> If worse comes to worst, we can request module writers to adhere to >> the same discipline. We already request them to do/not to do quite a >> few extraordinary things. > > No we can't. Modules can contain arbitrary code and call arbitrary > libraries, which we can't ever control. We need to work with > everything that provides a C-compatible interface. Modules can contain arbitrary code, but they don't have to do arbitrary things with that code. Right now, the contract between modules and Emacs is something like "any value that, I, Emacs, can't find on an Emacs-findable thread is fair game for memory reclaimation." In practice, that works okay most of the time, but if we have to deal with environments that can't guarantee that Emacs values remain on the C stack, we can extend the contract with something like "I, module, am handing you, Emacs, an array of emacs_values, and in addition to my stack, you should check this array before considering a value dead" --- that is, we could just provide a way for a module to associate a bunch of additional GC roots with a given context. Then something like Go could stick any temporary Emacs values in this array. Or we could just have these environments create permanent references. ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 20:48 ` Daniel Colascione @ 2019-03-22 8:17 ` Eli Zaretskii 0 siblings, 0 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-22 8:17 UTC (permalink / raw) To: Daniel Colascione; +Cc: contovob, 34655, p.stephani2, monnier > Date: Thu, 21 Mar 2019 13:48:28 -0700 > From: "Daniel Colascione" <dancol@dancol.org> > Cc: "Eli Zaretskii" <eliz@gnu.org>, > "Stefan Monnier" <monnier@iro.umontreal.ca>, > "Basil L. Contovounesios" <contovob@tcd.ie>, > 34655@debbugs.gnu.org, > "Daniel Colascione" <dancol@dancol.org> > > > No we can't. Modules can contain arbitrary code and call arbitrary > > libraries, which we can't ever control. We need to work with > > everything that provides a C-compatible interface. > > Modules can contain arbitrary code, but they don't have to do arbitrary > things with that code. Right now, the contract between modules and Emacs > is something like "any value that, I, Emacs, can't find on an > Emacs-findable thread is fair game for memory reclaimation." In practice, > that works okay most of the time, but if we have to deal with environments > that can't guarantee that Emacs values remain on the C stack, we can > extend the contract with something like "I, module, am handing you, Emacs, > an array of emacs_values, and in addition to my stack, you should check > this array before considering a value dead" --- that is, we could just > provide a way for a module to associate a bunch of additional GC roots > with a given context. Then something like Go could stick any temporary > Emacs values in this array. > > Or we could just have these environments create permanent references. OK, thanks. What are your opinions regarding usability of stack marking for emacs_value variables used by modules? ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:37 ` Philipp Stephani 2019-03-21 19:50 ` Eli Zaretskii @ 2019-03-21 21:31 ` Basil L. Contovounesios 1 sibling, 0 replies; 32+ messages in thread From: Basil L. Contovounesios @ 2019-03-21 21:31 UTC (permalink / raw) To: Philipp Stephani; +Cc: 34655, Stefan Monnier Philipp Stephani <p.stephani2@gmail.com> writes: > Am Do., 21. März 2019 um 20:27 Uhr schrieb Eli Zaretskii <eliz@gnu.org>: >> >> > I've already confirmed that reverting commit >> > 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a fixes bug#31238, and I can >> > try it with this bug as well. >> >> Please do, it's important to know that, I think. > > Basil, could you check that with the revert your code now works? Thanks! The revert indeed makes bug#34655 go away. Thanks, -- Basil ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-21 19:27 ` Eli Zaretskii 2019-03-21 19:37 ` Philipp Stephani @ 2019-03-22 0:56 ` Stefan Monnier 2019-03-22 8:16 ` Eli Zaretskii 1 sibling, 1 reply; 32+ messages in thread From: Stefan Monnier @ 2019-03-22 0:56 UTC (permalink / raw) To: Eli Zaretskii; +Cc: contovob, 34655, Philipp Stephani > OK, but I think Stefan's opinion is not less important. I think the module API is already so completely different from what I'd like it to be that it's OK to revert my change here. Stefan ^ permalink raw reply [flat|nested] 32+ messages in thread
* bug#34655: 26.1.92; Segfault in module with --module-assertions 2019-03-22 0:56 ` Stefan Monnier @ 2019-03-22 8:16 ` Eli Zaretskii 0 siblings, 0 replies; 32+ messages in thread From: Eli Zaretskii @ 2019-03-22 8:16 UTC (permalink / raw) To: Stefan Monnier; +Cc: contovob, 34655, p.stephani2 merge 31238 34655 close 34655 thanks > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: Philipp Stephani <p.stephani2@gmail.com>, contovob@tcd.ie, 34655@debbugs.gnu.org > Date: Thu, 21 Mar 2019 20:56:17 -0400 > > > OK, but I think Stefan's opinion is not less important. > > I think the module API is already so completely different from what I'd > like it to be that it's OK to revert my change here. OK, so I reverted my revert, and I'm marking this bug done. Thanks. ^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2019-03-22 8:17 UTC | newest] Thread overview: 32+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-02-25 21:00 bug#34655: 26.1.92; Segfault in module with --module-assertions Basil L. Contovounesios 2019-02-26 2:59 ` Richard Stallman 2019-02-26 11:16 ` Basil L. Contovounesios 2019-02-26 15:27 ` Eli Zaretskii 2019-02-26 18:42 ` Basil L. Contovounesios 2019-02-27 4:10 ` Richard Stallman 2019-02-26 15:45 ` Eli Zaretskii 2019-03-17 16:38 ` Basil L. Contovounesios 2019-03-17 17:08 ` Eli Zaretskii 2019-03-17 23:52 ` Basil L. Contovounesios 2019-03-18 16:21 ` Eli Zaretskii 2019-03-18 16:58 ` Basil L. Contovounesios 2019-03-18 17:53 ` Eli Zaretskii 2019-03-21 16:11 ` Philipp Stephani 2019-03-21 17:00 ` Eli Zaretskii 2019-03-21 18:28 ` Philipp Stephani 2019-03-21 19:23 ` Philipp Stephani 2019-03-21 19:34 ` Eli Zaretskii 2019-03-21 21:29 ` Basil L. Contovounesios 2019-03-22 7:11 ` Eli Zaretskii 2019-03-21 19:27 ` Eli Zaretskii 2019-03-21 19:37 ` Philipp Stephani 2019-03-21 19:50 ` Eli Zaretskii 2019-03-21 20:01 ` Philipp Stephani 2019-03-21 20:14 ` Eli Zaretskii 2019-03-21 20:26 ` Philipp Stephani 2019-03-21 20:44 ` Eli Zaretskii 2019-03-21 20:48 ` Daniel Colascione 2019-03-22 8:17 ` Eli Zaretskii 2019-03-21 21:31 ` Basil L. Contovounesios 2019-03-22 0:56 ` Stefan Monnier 2019-03-22 8:16 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).