* [22.1.90]: Point before start of properties @ 2008-02-08 16:35 Marshall, Simon 2008-02-10 3:26 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 37+ messages in thread From: Marshall, Simon @ 2008-02-08 16:35 UTC (permalink / raw) To: emacs-pretest-bug During pretesting before 22.1 I reported a problem whereby occasionally I would see the minibuffer message "Error in menu-bar-update-hook: (error Point before start of properties)" and the hook would be left with a value of nil. (See "Error in menu-bar-update-hook: (error Point before start of properties)" from July 2006.) At the time I had a go at tracking it down but without any success, and it continues to bite me every so often to this day. So, occasionally, I have to do M-x msb-mode twice to turn msb-mode off and then back on again. I was hoping the pretest version might magically have a fix for it, but unfortunately not. I figured I would have another go at debugging it and found that it seems suspiciously easy to reproduce. All I have to do is this: (gdb) b intervals.c:794 Breakpoint 1 at 0x195d90: file intervals.c, line 794. (gdb) r -Q Then in emacs do C-x C-f ~/.../src/intervals.c RET and bang: Breakpoint 1, update_interval (i=0x8b1af4, pos=1771) at intervals.c:794 794 error ("Point before start of properties"); (gdb) If I don't set the breakpoint before I run emacs, but visit the file and only then in gdb put the breakpoint on and continue, I can trigger this error just by scrolling the window with the scrollbar. It seems too easy to trigger this error, so I am not sure I am really seeing the same problem that occasionally results in menu-bar-update-hook being set to nil. Is the triggering of this error normal in certain circumstances? If not, is the above enough for someone to take a look at it? Otherwise, is there anything I can do to track down the problem for menu-bar-update-hook? Simon. In GNU Emacs 22.1.90.1 (sparc-sun-solaris2.8, Motif Version 2.1.0) of 2008-01-31 on risksun2 Windowing system distributor `Hummingbird Ltd.', version 11.0.100015 configured using `configure '--x-includes=/usr/openwin/include:/usr/dt/include:/usr/local/include:/u sr/local/X11/include' '--x-libraries=/usr/openwin/lib:/usr/dt/lib:/usr/local/lib:/usr/local/X1 1/lib' '--with-x-toolkit=motif'' Misys and Misys International Banking Systems is a trading name for Misys International Banking Systems Limited which is registered in England and Wales under company registration number 00971479 and with its registered office address at Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. THIS E-MAIL DOES NOT CONSTITUTE THE COMMENCEMENT OF LEGAL RELATIONS BETWEEN YOU AND MISYS INTERNATIONAL BANKING SYSTEMS LIMITED. PLEASE REFER TO THE EXECUTED CONTRACT BETWEEN YOU AND THE RELEVANT MEMBER OF THE MISYS GROUP FOR THE IDENTITY OF THE CONTRACTING PARTY WITH WHICH YOU ARE DEALING. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-08 16:35 [22.1.90]: Point before start of properties Marshall, Simon @ 2008-02-10 3:26 ` Stefan Monnier 2008-02-10 15:22 ` Chong Yidong 2008-02-10 18:42 ` Richard Stallman 2 siblings, 0 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-10 3:26 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug > (gdb) b intervals.c:794 > Breakpoint 1 at 0x195d90: file intervals.c, line 794. > (gdb) r -Q > Then in emacs do C-x C-f ~/.../src/intervals.c RET and bang: > Breakpoint 1, update_interval (i=0x8b1af4, pos=1771) at intervals.c:794 > 794 error ("Point before start of properties"); > (gdb) Sorry, can't reproduce it here, Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-08 16:35 [22.1.90]: Point before start of properties Marshall, Simon 2008-02-10 3:26 ` Stefan Monnier @ 2008-02-10 15:22 ` Chong Yidong 2008-02-12 17:52 ` Marshall, Simon 2008-02-10 18:42 ` Richard Stallman 2 siblings, 1 reply; 37+ messages in thread From: Chong Yidong @ 2008-02-10 15:22 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug "Marshall, Simon" <Simon.Marshall@misys.com> writes: > (gdb) b intervals.c:794 > Breakpoint 1 at 0x195d90: file intervals.c, line 794. > (gdb) r -Q > > Then in emacs do C-x C-f ~/.../src/intervals.c RET and bang: > > Breakpoint 1, update_interval (i=0x8b1af4, pos=1771) at intervals.c:794 > 794 error ("Point before start of properties"); > (gdb) I can't reproduce this. It might be a Sparc-only issue; does it happen to you on other platforms? ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-10 15:22 ` Chong Yidong @ 2008-02-12 17:52 ` Marshall, Simon 2008-02-12 18:32 ` Stefan Monnier 0 siblings, 1 reply; 37+ messages in thread From: Marshall, Simon @ 2008-02-12 17:52 UTC (permalink / raw) To: Chong Yidong; +Cc: emacs-pretest-bug > > (gdb) b intervals.c:794 > > Breakpoint 1 at 0x195d90: file intervals.c, line 794. > > (gdb) r -Q > > > > Then in emacs do C-x C-f ~/.../src/intervals.c RET and bang: > > > > Breakpoint 1, update_interval (i=0x8b1af4, pos=1771) at intervals.c:794 > > 794 error ("Point before start of properties"); > > (gdb) > > I can't reproduce this. It might be a Sparc-only issue; does it > happen to you on other platforms? Hmm. You're right, I can't reproduce it on RHEL-5 with its gcc-4.1.2, even when I disable as much as I can to make it like a configuration that I know fails on solaris (--with-x-toolkit=lucid --without-xaw3d --without-xpm --without-jpeg --without-tiff --without-gif --without-png --without-toolkit-scroll-bars) On solaris: I can reproduce it (ie, it breaks on the call to error as above) with lucid and motif scrollbars (tried with gcc-4.1.2) I can reproduce it with gcc-4.1.2 (-g and -g -O2) and gcc-4.2.3 (-g -O and -g -O2). I cannot reproduce it with gcc-4.2.3 (-g) and CC-5.7 (-g). It suggests that it might be a gcc optimisation bug, but any idea as to why it should be solaris-specific? Any ideas as to how to investigate this? I tried #undefing GNU_MALLOC and/or HAVE_ALLOCA, but I can still reproduce it. Simon. "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-12 17:52 ` Marshall, Simon @ 2008-02-12 18:32 ` Stefan Monnier 2008-02-13 10:13 ` Marshall, Simon 0 siblings, 1 reply; 37+ messages in thread From: Stefan Monnier @ 2008-02-12 18:32 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong > I can reproduce it (ie, it breaks on the call to error as above) with > lucid and motif scrollbars (tried with gcc-4.1.2) > I can reproduce it with gcc-4.1.2 (-g and -g -O2) and gcc-4.2.3 (-g -O > and -g -O2). > I cannot reproduce it with gcc-4.2.3 (-g) and CC-5.7 (-g). So, adding -O (or -O2) to gcc-4.2.3 triggers the problem, and switching to gcc-4.1.2 triggers it as well? It does sound like it may be a compiler bug, but [putting on my compiler writer hat] it's still at least as likely that the bug is in our code and just isn't triggered in more common circumstances (e.g. a missing `volatile' or something like that, maybe?). First thing: try to reproduce the problem with -DENABLE_CHECKING. This may help us catch the problem at some earlier poin in the execution (it's a long shot, but you never know). Then try to narrow down the problematic source file: compile all files with "gcc-4.2.3 -g" except for one (e.g. intervals.c) and see if you con still reproduce the problem. If you can, recompile intervals.c with "gcc-4.2.3 -g" to double check that the problem then disappears. If that's not that file, then use binary search to figure out which file is causing trouble. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-12 18:32 ` Stefan Monnier @ 2008-02-13 10:13 ` Marshall, Simon 2008-02-18 19:52 ` Stefan Monnier 0 siblings, 1 reply; 37+ messages in thread From: Marshall, Simon @ 2008-02-13 10:13 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Chong Yidong > So, adding -O (or -O2) to gcc-4.2.3 triggers the problem, and > switching to gcc-4.1.2 triggers it as well? Yes. Btw, I didn't mention before that gcc gives me lots of warnings of the form "dispnew.c:3061: warning: incompatible implicit declaration of built-in function 'alloca'". (That is the reason why I tried undefing GNU_MALLOC and HAVE_ALLOCA, though IIRC I could not get rid of the warnings and made no difference to the problem of calling error at intervals.c:794.) Could this be relevant? > First thing: try to reproduce the problem with -DENABLE_CHECKING. > This may help us catch the problem at some earlier poin in > the execution (it's a long shot, but you never know). With make CFLAGS="-g -O -DENABLE_CHECKING=1 -DSYSTEM_PURESIZE_EXTRA=1300000", I do not get any earlier abort if I do "C-x C-f intervals.c RET", ie, it reaches the call to error at intervals.c:794 as before. However, I do get an earlier abort if I do "C-x C-f int TAB" to complete the file name intervals.c: % ~/slash/usr/local/bin/gdb ./emacs GNU gdb 6.7.1 Copyright (C) 2007 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "sparc-sun-solaris2.8"... SIGINT is used by the debugger. Are you sure you want to change it? (y or n) [answered Y; input not from terminal] DISPLAY = dtp020071.misys-risk.com:0.0 TERM = xterm Breakpoint 1 at 0x116a20: file emacs.c, line 432. Breakpoint 2 at 0x13b930: file sysdep.c, line 1384. (gdb) b intervals.c:794 Breakpoint 3 at 0x1edc48: file intervals.c, line 794. (gdb) r -Q Starting program: /homedev/marshals/ftp/emacs-22.2-pretests/gcc-4.2.3-g-O/src/emacs -Q warning: Temporarily disabling breakpoints for unloaded shared library "/usr/lib/ld.so.1" Breakpoint 4 at 0xeea10: file xterm.c, line 7866. In the emacs frame I did "C-x C-f int TAB" and got: Breakpoint 1, abort () at emacs.c:432 432 kill (getpid (), SIGABRT); (gdb) where #0 abort () at emacs.c:432 #1 0x0017ec8c in die (msg=0x256d88 "non-interval", file=0x256d98 "intervals.c", line=162) at alloc.c:6338 #2 0x001ebc30 in intervals_equal (i0=<value optimized out>, i1=0xffbecebc) at intervals.c:162 #3 0x001eea08 in offset_intervals (buffer=<value optimized out>, start=12, length=54) at intervals.c:1049 #4 0x0014c560 in insert_from_string_1 (string=<value optimized out>, pos=0, pos_byte=0, nchars=54, nbytes=54, inherit=0, before_markers=0) at insdel.c:1172 #5 0x0014c7ac in insert_from_string (string=8626576, pos=0, pos_byte=0, length=54, length_byte=54, inherit=0) at insdel.c:1068 #6 0x0019449c in general_insert_function (insert_func=0x14cc1c <insert>, insert_from_string_func=0x14c730 <insert_from_string>, inherit=0, nargs=1, args=<value optimized out>) at editfns.c:2178 #7 0x00194578 in Finsert (nargs=1, args=0xffbed124) at editfns.c:2222 #8 0x001534c8 in do_completion () at minibuf.c:2029 #9 0x001538d0 in Fminibuffer_complete () at minibuf.c:2152 #10 0x0019efac in Ffuncall (nargs=1, args=<value optimized out>) at eval.c:2990 #11 0x0019b988 in Fcall_interactively (function=5493857, record_flag=5318657, keys=5382148) at callint.c:861 #12 0x0011bfb0 in Fcommand_execute (cmd=5493857, record_flag=5318657, keys=5318657, special=<value optimized out>) at keyboard.c:10053 #13 0x001312a0 in command_loop_1 () at keyboard.c:1876 #14 0x0019d3e8 in internal_condition_case (bfun=0x12f430 <command_loop_1>, handlers=5386913, hfun=0x12632c <cmd_error>) at eval.c:1484 #15 0x00125534 in command_loop_2 () at keyboard.c:1330 #16 0x0019d4c4 in internal_catch (tag=5413513, func=0x125508 <command_loop_2>, arg=5318657) at eval.c:1224 #17 0x0012611c in command_loop () at keyboard.c:1297 #18 0x001264d4 in recursive_edit_1 () at keyboard.c:1007 #19 0x00154810 in read_minibuf (map=5303197, initial=8448995, prompt=2727747, backup_n=<value optimized out>, expflag=0, histvar=5467833, histpos=0, defalt=8448995, allow_props=0, inherit_input_method=0) at minibuf.c:751 #20 0x0015508c in Fcompleting_read (prompt=2727747, collection=<value optimized out>, predicate=<value optimized out>, require_match=5318657, initial_input=<value optimized out>, hist=5467833, def=8448995, inherit_input_method=5318657) at minibuf.c:1807 #21 0x00158d68 in Fread_file_name (prompt=2727747, dir=8448995, default_filename=8448995, mustmatch=5318657, initial=<value optimized out>, predicate=5467401) at fileio.c:6414 #22 0x0019f1b0 in Ffuncall (nargs=-4269544, args=<value optimized out>) at eval.c:3012 #23 0x001d3e5c in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=7) at bytecode.c:679 #24 0x0019eabc in funcall_lambda (fun=2727260, nargs=2, arg_vector=0xffbedbc8) at eval.c:3180 #25 0x0019eba0 in apply_lambda (fun=2727260, args=5318657, eval_flag=1) at eval.c:3104 #26 0x0019e468 in Feval (form=<value optimized out>) at eval.c:2366 #27 0x0019a568 in Fcall_interactively (function=5663633, record_flag=5318657, keys=5382148) at callint.c:379 #28 0x0011bfb0 in Fcommand_execute (cmd=5663633, record_flag=5318657, keys=5318657, special=<value optimized out>) at keyboard.c:10053 #29 0x001312a0 in command_loop_1 () at keyboard.c:1876 #30 0x0019d3e8 in internal_condition_case (bfun=0x12f430 <command_loop_1>, handlers=5386913, hfun=0x12632c <cmd_error>) at eval.c:1484 #31 0x00125534 in command_loop_2 () at keyboard.c:1330 #32 0x0019d4c4 in internal_catch (tag=5377025, func=0x125508 <command_loop_2>, arg=5318657) at eval.c:1224 #33 0x001260d8 in command_loop () at keyboard.c:1309 #34 0x001264d4 in recursive_edit_1 () at keyboard.c:1007 #35 0x00126790 in Frecursive_edit () at keyboard.c:1068 #36 0x00118224 in main (argc=2, argv=0xffbee404) at emacs.c:1770 Lisp Backtrace: "minibuffer-complete" (0x503c00) "call-interactively" (0x53d461) "read-file-name" (0x299f43) "find-file-read-args" (0x299f43) "call-interactively" (0x566b91) (gdb) up #1 0x0017ec8c in die (msg=0x256d88 "non-interval", file=0x256d98 "intervals.c", line=162) at alloc.c:6338 6338 abort (); (gdb) up #2 0x001ebc30 in intervals_equal (i0=<value optimized out>, i1=0xffbecebc) at intervals.c:162 162 if (DEFAULT_INTERVAL_P (i0) || DEFAULT_INTERVAL_P (i1)) (gdb) print i0 $3 = <value optimized out> (gdb) print i1 $4 = (INTERVAL) 0xffbecebc (gdb) print *i1 $5 = { total_length = 2055860, position = 5244928, left = 0x8, right = 0x84afb3, up = { interval = 0x80ebe3, obj = 8448995 }, up_obj = 0, gcmarkbit = 0, write_protect = 0, visible = 0, front_sticky = 0, rear_sticky = 0, plist = 5318657 } (gdb) up #3 0x001eea08 in offset_intervals (buffer=<value optimized out>, start=12, length=54) at intervals.c:1049 1049 else if (! intervals_equal (prev, &newi)) (gdb) print prev No symbol "prev" in current context. (gdb) print newi No symbol "newi" in current context. (gdb) I can understand not being able to see i0 in intervals_equal, but I don't understand not being able to see prev and newi in the caller. I tried to reproduce this with CFLAGS="-g -DENABLE_CHECKING=1 -DSYSTEM_PURESIZE_EXTRA=1300000", ie, no optimisation, but could not reproduce the abort (or call of error). > Then try to narrow down the problematic source file: compile all files > with "gcc-4.2.3 -g" except for one (e.g. intervals.c) and see > if you con still reproduce the problem. If you can, recompile intervals.c with > "gcc-4.2.3 -g" to double check that the problem then disappears. > If that's not that file, then use binary search to figure out > which file is causing trouble. Blimey. Compiling intervals.c with CFLAGS="-g -O -DENABLE_CHECKING=1 -DSYSTEM_PURESIZE_EXTRA=1300000" (everything else the same except for no -O) results in an emacs that triggers the abort as soon as I type C-x C-f: Emacs fatal error: intervals.c:162: non-interval Breakpoint 1, abort () at emacs.c:432 432 kill (getpid (), SIGABRT); (gdb) where #0 abort () at emacs.c:432 #1 0x00313618 in die (msg=0x4a3d80 "non-interval", file=0x4a3d90 "intervals.c", line=162) at alloc.c:6338 #2 0x003f52f4 in intervals_equal (i0=<value optimized out>, i1=0xffbecf2c) at intervals.c:162 #3 0x003f8040 in offset_intervals (buffer=<value optimized out>, start=12, length=42) at intervals.c:1049 #4 0x00290e3c in insert_from_string_1 (string=10872851, pos=0, pos_byte=0, nchars=42, nbytes=42, inherit=0, before_markers=0) at insdel.c:1172 #5 0x0029060c in insert_from_string (string=10872851, pos=0, pos_byte=0, length=42, length_byte=42, inherit=0) at insdel.c:1068 #6 0x0033371c in general_insert_function (insert_func=0x28fadc <insert>, insert_from_string_func=0x290558 <insert_from_string>, inherit=0, nargs=1, args=0xffbed2e8) at editfns.c:2178 #7 0x003337c4 in Finsert (nargs=1, args=0x40020000) at editfns.c:2222 #8 0x0029d40c in read_minibuf (map=7719821, initial=10872851, prompt=5143059, backup_n=0, expflag=0, histvar=7881401, histpos=0, defalt=10872851, allow_props=0, inherit_input_method=0) at minibuf.c:730 #9 0x002a2c38 in Fcompleting_read (prompt=5143059, collection=7884305, predicate=10872851, require_match=7735297, initial_input=10872851, hist=7881401, def=10872851, inherit_input_method=7735297) at minibuf.c:1807 #10 0x002bf2a0 in Fread_file_name (prompt=5143059, dir=10872851, default_filename=10872851, mustmatch=7735297, initial=7735297, predicate=7735297) at fileio.c:6414 #11 0x0034ee70 in Ffuncall (nargs=5, args=0xffbed5d0) at eval.c:3012 #12 0x003c4fa4 in Fbyte_code (bytestr=5142611, vector=5142692, maxdepth=40) at bytecode.c:679 #13 0x0034fec0 in funcall_lambda (fun=5142572, nargs=2, arg_vector=0xffbed8d0) at eval.c:3180 #14 0x0034f59c in apply_lambda (fun=5142572, args=5143053, eval_flag=1) at eval.c:3104 #15 0x0034bf60 in Feval (form=5143045) at eval.c:2366 #16 0x00340a2c in Fcall_interactively (function=8060817, record_flag=7735297, keys=7798788) at callint.c:379 #17 0x00251c34 in Fcommand_execute (cmd=8060817, record_flag=7735297, keys=7735297, special=7735297) at keyboard.c:10053 #18 0x0022a448 in command_loop_1 () at keyboard.c:1876 #19 0x003481d0 in internal_condition_case (bfun=0x225be4 <command_loop_1>, handlers=7803553, hfun=0x224bac <cmd_error>) at eval.c:1484 #20 0x002254b4 in command_loop_2 () at keyboard.c:1330 #21 0x00347808 in internal_catch (tag=7793665, func=0x225488 <command_loop_2>, arg=7735297) at eval.c:1224 #22 0x00225428 in command_loop () at keyboard.c:1309 #23 0x00224108 in recursive_edit_1 () at keyboard.c:1007 #24 0x00224790 in Frecursive_edit () at keyboard.c:1068 #25 0x002213e0 in main (argc=2, argv=0xffbee444) at emacs.c:1770 Lisp Backtrace: "read-file-name" (0x4e7a13) "find-file-read-args" (0x4e7a13) "call-interactively" (0x7aff91) (gdb) Do you think these ENABLE_CHECKING aborts are genuine? Could there be a problem with the definition of NULL_INTERVAL_P (I see its definition has changed)? Compiling everything with CFLAGS="-g -O" results in error being called at intervals.c:794 on C-x C-f intervals.c RET, as described before. Recompiling intervals.c with CFLAGS="-g" results in error not being called. Compiling everything with CFLAGS="-g" results in error not being called. Recompiling intervals.c with CFLAGS="-g -0" results in error being called. So, ENABLE_CHECKING not withstanding, it appears to be a problem with the optimisation of intervals.c itself. Any other thoughts? Thanks, Simon. "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-13 10:13 ` Marshall, Simon @ 2008-02-18 19:52 ` Stefan Monnier 2008-02-19 10:37 ` Marshall, Simon [not found] ` <6EE216E1AA959543A555C60FF34FB76702B2DB02@maileube01.misys.global.ad> 0 siblings, 2 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-18 19:52 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong >> So, adding -O (or -O2) to gcc-4.2.3 triggers the problem, and >> switching to gcc-4.1.2 triggers it as well? > Yes. Btw, I didn't mention before that gcc gives me lots of warnings of > the form "dispnew.c:3061: warning: incompatible implicit declaration of > built-in function 'alloca'". (That is the reason why I tried undefing > GNU_MALLOC and HAVE_ALLOCA, though IIRC I could not get rid of the > warnings and made no difference to the problem of calling error at > intervals.c:794.) Could this be relevant? Any warning outside of intervals.c seem unlikely to be a good source of the problem. Do you ever get any kind of warning when compiling intervals.c? Also you said that the problem could be triggered with gcc-4.1.2 even without optimization, is that really true? If so, can you try again with gcc-4.1.2 and no optimizations, to get better debug info? Another thing: do you know if your compilation uses USE_LSB_TAG or not? Is it a 64bit or 32bit memory model? Have you tried to compile it with -DUSE_LISP_UNION_TYPE just to see if it hides the problem (or give some compilation warning at least)? > I can understand not being able to see i0 in intervals_equal, but I > don't understand not being able to see prev and newi in the caller. I > tried to reproduce this with CFLAGS="-g -DENABLE_CHECKING=1 > -DSYSTEM_PURESIZE_EXTRA=1300000", ie, no optimisation, but could not > reproduce the abort (or call of error). The fact that you don't get the assertion failure when compiling without optimizations indicates that this assertion failure is unlikely to be a fluke, tho the "CHECK (!INT_LISPLIKE (i)" thingy is fishy. The fields of the i1 interval don't seem to be valid (0x8 can't be a left pointer, the right point seems to be misaligned (maybe it's actually a string and the up_obj bit should be set), total_length and position could only make sense in a buffer of at least 5-6MB). Then again, we have no idea if we're really looking at i1 and its contents. > Do you think these ENABLE_CHECKING aborts are genuine? Maybe. > Could there be a problem with the definition of NULL_INTERVAL_P (I see > its definition has changed)? The INT_LISPLIKE thingy is fishy. I suspect that it may misfire (the "struct interval" may have size 28, so intervals pointers may not all be aligned on multiples of 8, which implies that an interval pointer may have the same tag bits as a buffer). > So, ENABLE_CHECKING not withstanding, it appears to be a problem with > the optimisation of intervals.c itself. > Any other thoughts? Not really. If you can reproduce it without optimizations, then you may be able to track it down more precisely and figure out if it's a compiler bug or an Emacs bug. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-18 19:52 ` Stefan Monnier @ 2008-02-19 10:37 ` Marshall, Simon 2008-02-19 16:00 ` Stefan Monnier [not found] ` <6EE216E1AA959543A555C60FF34FB76702B2DB02@maileube01.misys.global.ad> 1 sibling, 1 reply; 37+ messages in thread From: Marshall, Simon @ 2008-02-19 10:37 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Chong Yidong > > Yes. Btw, I didn't mention before that gcc gives me lots of warnings of > > the form "dispnew.c:3061: warning: incompatible implicit declaration of > > built-in function 'alloca'". (That is the reason why I tried undefing > > GNU_MALLOC and HAVE_ALLOCA, though IIRC I could not get rid of the > > warnings and made no difference to the problem of calling error at > > intervals.c:794.) Could this be relevant? > > Any warning outside of intervals.c seem unlikely to be a good source of > the problem. Do you ever get any kind of warning when compiling > intervals.c? No. > Also you said that the problem could be triggered with gcc-4.1.2 even > without optimization, is that really true? If so, can you try again > with gcc-4.1.2 and no optimizations, to get better debug info? Ah, I did say that didn't I. A typo I think. (I cannot reproduce it without optimisation, though I have since installed 4.2.3 over the top of 4.1.2. I tried to reproduce it today with CC=sparc-sun-solaris2.8-gcc-4.1.2, and I could with CFLAGS="-g -O" and "-g -O2", but not with CFLAGS="-g". Apologies for that.) > Another thing: do you know if your compilation uses USE_LSB_TAG or not? > Is it a 64bit or 32bit memory model? > Have you tried to compile it with -DUSE_LISP_UNION_TYPE just to see if > it hides the problem (or give some compilation warning at least)? I'm guessing it's 32bit. With CFLAGS="-g -O2 -DUSE_LISP_UNION_TYPE", there were no suspicious compiler warnings (non at all for intervals.c) and it still hit the intervals.c:794 breakpoint. > > I can understand not being able to see i0 in intervals_equal, but I > > don't understand not being able to see prev and newi in the caller. I > > tried to reproduce this with CFLAGS="-g -DENABLE_CHECKING=1 > > -DSYSTEM_PURESIZE_EXTRA=1300000", ie, no optimisation, but could not > > reproduce the abort (or call of error). > > The fact that you don't get the assertion failure when compiling without > optimizations indicates that this assertion failure is unlikely to > be a fluke, tho the "CHECK (!INT_LISPLIKE (i)" thingy is fishy. > > The fields of the i1 interval don't seem to be valid (0x8 can't be > a left pointer, the right point seems to be misaligned (maybe it's > actually a string and the up_obj bit should be set), total_length and > position could only make sense in a buffer of at least 5-6MB). > Then again, we have no idea if we're really looking at i1 and > its contents. > > > Do you think these ENABLE_CHECKING aborts are genuine? > > Maybe. > > > Could there be a problem with the definition of NULL_INTERVAL_P (I see > > its definition has changed)? > > The INT_LISPLIKE thingy is fishy. I suspect that it may misfire (the > "struct interval" may have size 28, so intervals pointers may not all be > aligned on multiples of 8, which implies that an interval pointer may > have the same tag bits as a buffer). > > > So, ENABLE_CHECKING not withstanding, it appears to be a problem with > > the optimisation of intervals.c itself. > > Any other thoughts? > > Not really. If you can reproduce it without optimizations, > then you may > be able to track it down more precisely and figure out if it's > a compiler bug or an Emacs bug. Thanks for the suggestions and the careful reading of my report. Is there anything else you think I could try, eg, to deal with the size of struct interval? I can confirm that it is 28, though it is 28 with or without optimisation. I tried padding it to 32 by adding a dummy int to it, but it still hit the breakpoint with optimisation. I don't like the thought of trying to break up intervals.c, to binary search for a particular problem function, so any other suggestions are welcome. Simon. "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-19 10:37 ` Marshall, Simon @ 2008-02-19 16:00 ` Stefan Monnier 2008-02-19 17:23 ` Marshall, Simon 0 siblings, 1 reply; 37+ messages in thread From: Stefan Monnier @ 2008-02-19 16:00 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong > Ah, I did say that didn't I. A typo I think. (I cannot reproduce it > without optimisation, though I have since installed 4.2.3 over the top > of 4.1.2. I tried to reproduce it today with > CC=sparc-sun-solaris2.8-gcc-4.1.2, and I could with CFLAGS="-g -O" and > "-g -O2", but not with CFLAGS="-g". Apologies for that.) Too bad. > Thanks for the suggestions and the careful reading of my report. Is > there anything else you think I could try, eg, to deal with the size of > struct interval? I can confirm that it is 28, though it is 28 with or > without optimisation. I tried padding it to 32 by adding a dummy int to > it, but it still hit the breakpoint with optimisation. Yes, as I said, the assertion failure is probably not a fluke, altough the check itself is a bit fishy. > I don't like the thought of trying to break up intervals.c, to binary > search for a particular problem function, so any other suggestions are > welcome. No idea, sorry, Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-19 16:00 ` Stefan Monnier @ 2008-02-19 17:23 ` Marshall, Simon 2008-02-19 17:31 ` David Kastrup 2008-02-19 21:59 ` Stefan Monnier 0 siblings, 2 replies; 37+ messages in thread From: Marshall, Simon @ 2008-02-19 17:23 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Chong Yidong > > Thanks for the suggestions and the careful reading of my report. Is > > there anything else you think I could try, eg, to deal with the size of > > struct interval? I can confirm that it is 28, though it is 28 with or > > without optimisation. I tried padding it to 32 by adding a dummy int to > > it, but it still hit the breakpoint with optimisation. > > Yes, as I said, the assertion failure is probably not a fluke, altough > the check itself is a bit fishy. OK, together with another suggestion, I rebuilt emacs with CFLAGS="-g -O1 -fno-unit-at-a-time -DENABLE_CHECKING". This time I am able to get better debug info than before. Breakpoint 2 at 0x13d8e0: file sysdep.c, line 1384. (gdb) r -Q Starting program: /homedev/marshals/ftp/emacs-22.2-pretests/gcc-4.2.3-g-O2/src/emacs -Q warning: Temporarily disabling breakpoints for unloaded shared library "/usr/lib/ld.so.1" Breakpoint 3 at 0xf26ac: file xterm.c, line 7866. C-x C-f i ; first letter of "intervals.c" is necessary to provoke abort Emacs fatal error: intervals.c:159: non-interval Breakpoint 1, abort () at emacs.c:432 432 kill (getpid (), SIGABRT); (gdb) up 2 #2 0x001eca58 in intervals_equal (i0=0x956588, i1=0xffbed22c) at intervals.c:162 162 if (DEFAULT_INTERVAL_P (i0) || DEFAULT_INTERVAL_P (i1)) (gdb) p *i0 $1 = { total_length = 57, position = 12, left = 0x95656c, right = 0x0, up = { interval = 0x79d404, obj = 7984132 }, up_obj = 1, gcmarkbit = 0, write_protect = 0, visible = 0, front_sticky = 0, rear_sticky = 0, plist = 4028417 } (gdb) p *i1 $2 = { total_length = 1171396, position = 4028417, left = 0x0, right = 0x1, up = { interval = 0x1, obj = 1 }, up_obj = 1, gcmarkbit = 1, write_protect = 1, visible = 1, front_sticky = 1, rear_sticky = 1, plist = 4028417 } It seems that i0 does point to a valid interval, but i1 does not look good. Has it been GCed? Is there anything that will output a buffer's/string's property tree? Sorry to ask again, but if this is a good place to go digging, what should I go digging for? (gdb) where #0 abort () at emacs.c:432 #1 0x001879ec in die (msg=0x259328 "non-interval", file=0x2592e0 "intervals.c", line=159) at alloc.c:6338 #2 0x001eca58 in intervals_equal (i0=0x956588, i1=0xffbed22c) at intervals.c:162 #3 0x001ee6e8 in adjust_intervals_for_insertion (tree=0x956588, position=57, length=1) at intervals.c:1049 #4 0x001efa0c in offset_intervals (buffer=0x79d400, start=57, length=1) at intervals.c:1472 #5 0x0014c494 in insert_1_both (string=0xffbed414 "i=x\001", nchars=1, nbytes=1, inherit=1, prepare=1, before_markers=0) at insdel.c:1037 #6 0x0014c064 in insert_and_inherit (string=0xffbed414 "i=x\001", nbytes=1) at insdel.c:771 #7 0x001660c4 in internal_self_insert (c=105, noautofill=0) at cmds.c:516 #8 0x0011d0b8 in command_loop_1 () at keyboard.c:1840 #9 0x0019fcfc in internal_condition_case (bfun=0x11b30c <command_loop_1>, handlers=4096673, hfun=0x11ab24 <cmd_error>) at eval.c:1484 #10 0x0011af50 in command_loop_2 () at keyboard.c:1330 #11 0x0019f7a8 in internal_catch (tag=4120201, func=0x11af24 <command_loop_2>, arg=4028417) at eval.c:1224 #12 0x0011af10 in command_loop () at keyboard.c:1297 #13 0x0011a614 in recursive_edit_1 () at keyboard.c:1007 #14 0x0015269c in read_minibuf (map=4012941, initial=7575955, prompt=2738499, backup_n=<value optimized out>, expflag=0, histvar=4170425, histpos=0, defalt=7575955, allow_props=0, inherit_input_method=0) at minibuf.c:751 #15 0x00154a4c in Fcompleting_read (prompt=2738499, collection=<value optimized out>, predicate=<value optimized out>, require_match=4028417, initial_input=<value optimized out>, hist=4170425, def=7575955, inherit_input_method=4028417) at minibuf.c:1807 #16 0x00161d34 in Fread_file_name (prompt=2738499, dir=7575955, default_filename=7575955, mustmatch=4028417, initial=<value optimized out>, predicate=4169993) at fileio.c:6414 #17 0x001a2618 in Ffuncall (nargs=-4269488, args=<value optimized out>) at eval.c:3012 #18 0x001d6460 in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=7) at bytecode.c:679 #19 0x001a2c70 in funcall_lambda (fun=2738012, nargs=2, arg_vector=0xffbedc00) at eval.c:3180 #20 0x001a2908 in apply_lambda (fun=2738012, args=4028417, eval_flag=1) at eval.c:3104 #21 0x001a1704 in Feval (form=<value optimized out>) at eval.c:2366 #22 0x0019c7c0 in Fcall_interactively (function=4349841, record_flag=4028417, keys=4091908) at callint.c:379 #23 0x0012ff58 in Fcommand_execute (cmd=4349841, record_flag=4028417, keys=4028417, special=<value optimized out>) at keyboard.c:10053 #24 0x0011d17c in command_loop_1 () at keyboard.c:1876 #25 0x0019fcfc in internal_condition_case (bfun=0x11b30c <command_loop_1>, handlers=4096673, hfun=0x11ab24 <cmd_error>) at eval.c:1484 #26 0x0011af50 in command_loop_2 () at keyboard.c:1330 #27 0x0019f7a8 in internal_catch (tag=4086785, func=0x11af24 <command_loop_2>, arg=4028417) at eval.c:1224 #28 0x0011aecc in command_loop () at keyboard.c:1309 #29 0x0011a614 in recursive_edit_1 () at keyboard.c:1007 #30 0x0011a908 in Frecursive_edit () at keyboard.c:1068 #31 0x00119040 in main (argc=2, argv=0xffbee43c) at emacs.c:1770 Lisp Backtrace: "read-file-name" (0x29c943) "find-file-read-args" (0x29c943) "call-interactively" (0x425f91) (gdb) "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-19 17:23 ` Marshall, Simon @ 2008-02-19 17:31 ` David Kastrup 2008-02-20 9:44 ` Marshall, Simon 2008-02-19 21:59 ` Stefan Monnier 1 sibling, 1 reply; 37+ messages in thread From: David Kastrup @ 2008-02-19 17:31 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong, Stefan Monnier "Marshall, Simon" <Simon.Marshall@misys.com> writes: >> > Thanks for the suggestions and the careful reading of my report. Is >> > there anything else you think I could try, eg, to deal with the size > of >> > struct interval? I can confirm that it is 28, though it is 28 with > or >> > without optimisation. I tried padding it to 32 by adding a dummy > int to >> > it, but it still hit the breakpoint with optimisation. >> >> Yes, as I said, the assertion failure is probably not a fluke, altough >> the check itself is a bit fishy. > > OK, together with another suggestion, I rebuilt emacs with CFLAGS="-g > -O1 -fno-unit-at-a-time -DENABLE_CHECKING". This time I am able to get > better debug info than before. DEBUG tells you ** When you are trying to analyze failed assertions, it will be essential to compile Emacs either completely without optimizations or at least (when using GCC) with the -fno-crossjumping option. Failure to do so may make the compiler recycle the same abort call for all assertions in a given function, rendering the stack backtrace useless for identifying the specific failed assertion. -- David Kastrup ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-19 17:31 ` David Kastrup @ 2008-02-20 9:44 ` Marshall, Simon 0 siblings, 0 replies; 37+ messages in thread From: Marshall, Simon @ 2008-02-20 9:44 UTC (permalink / raw) To: David Kastrup; +Cc: emacs-pretest-bug, Chong Yidong, Stefan Monnier > > OK, together with another suggestion, I rebuilt emacs with CFLAGS="-g > > -O1 -fno-unit-at-a-time -DENABLE_CHECKING". This time I am able to get > > better debug info than before. > > ** When you are trying to analyze failed assertions, it will be > essential to compile Emacs either completely without optimizations or > at least (when using GCC) with the -fno-crossjumping option. Failure > to do so may make the compiler recycle the same abort call for all > assertions in a given function, rendering the stack backtrace useless > for identifying the specific failed assertion. Unfortunately I cannot reproduce the original problem without optimisation, but I'll use -fno-crossjumping in future. "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-19 17:23 ` Marshall, Simon 2008-02-19 17:31 ` David Kastrup @ 2008-02-19 21:59 ` Stefan Monnier 2008-02-20 11:31 ` Marshall, Simon 1 sibling, 1 reply; 37+ messages in thread From: Stefan Monnier @ 2008-02-19 21:59 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong >> > Thanks for the suggestions and the careful reading of my report. Is >> > there anything else you think I could try, eg, to deal with the size of >> > struct interval? I can confirm that it is 28, though it is 28 with or >> > without optimisation. I tried padding it to 32 by adding a dummy int to >> > it, but it still hit the breakpoint with optimisation. >> >> Yes, as I said, the assertion failure is probably not a fluke, altough >> the check itself is a bit fishy. Actually, now I think it may very well be a fluke: the `i1' that looks so odd is actually stack allocated (so it may indeed be on a mult-of-4 even if you pad it to 32bytes) and is not fully initialized (because intervals_equal only looks at the `plist' field) so it may very well look like a buffer. > It seems that i0 does point to a valid interval, but i1 does not look > good. Has it been GCed? As explained (sorry for not noticing this earlier), i1 is stack-allocated and not fully initialized, which is why it looks like garbage. That's completely normal, we're wasting our time here. Better go back to your actual "point before start of properties" error. I've removed the INT_LISPLIKE check. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [22.1.90]: Point before start of properties 2008-02-19 21:59 ` Stefan Monnier @ 2008-02-20 11:31 ` Marshall, Simon 2008-02-20 17:17 ` Stefan Monnier 0 siblings, 1 reply; 37+ messages in thread From: Marshall, Simon @ 2008-02-20 11:31 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Chong Yidong > As explained (sorry for not noticing this earlier), i1 is > stack-allocated and not fully initialized, which is why it looks > like garbage. That's completely normal, we're wasting our time here. > Better go back to your actual "point before start of properties" error. > I've removed the INT_LISPLIKE check. Ok, thanks for the explanation. Going back to without -DENABLE_CHECKING, I've split up intervals.c. Luckily, just moving update_interval into a new file intervals2.c was enough. Building all with CFLAGS="-g -O1 -fno-unit-at-a-time -fno-crossjumping -Wno-pointer-sign" allows me to reproduce the error call. Building just intervals2.c with -O0 rather than -O1 will not reproduce the error call. With optimisation, when I stop, I see: (gdb) b intervals2.c:34 Breakpoint 3 at 0x197c6c: file intervals2.c, line 34. (gdb) r -Q Starting program: /homedev/marshals/ftp/emacs-22.2-pretests/gcc-4.2.3-g-O1/src/emacs -Q warning: Temporarily disabling breakpoints for unloaded shared library "/usr/lib/ld.so.1" Breakpoint 4 at 0xc7580: file xterm.c, line 7866. C-x C-f intervals.c RET Breakpoint 3, update_interval (i=0x95eaf4, pos=1771) at intervals2.c:34 34 error ("Point before start of properties"); (gdb) p *i $1 = { total_length = 36, position = 1782, left = 0x95eb10, right = 0x95e950, up = { interval = 0x95e934, obj = 9824564 }, up_obj = 0, gcmarkbit = 0, write_protect = 0, visible = 0, front_sticky = 0, rear_sticky = 0, plist = 9842845 } Note that the condition that allows the call of error in: else if (NULL_PARENT (i)) error ("Point before start of properties"); Expands to: else if (((i)->up_obj || (i)->up.interval == 0)) error ("Point before start of properties"); Yet the condition should be false: (gdb) p (((i)->up_obj || (i)->up.interval == 0)) $2 = 0 I guess it's perfectly possible that this is not due to miscompiled code (as I reported on gcc's bugzilla), since I guess what gdb is reporting may not be accurate either. Does this sound reasonable? Any thoughts? It seems i's "up" interval is valid: (gdb) p *i->up.interval $3 = { total_length = 94, position = 1817, left = 0x95eaf4, right = 0x95e988, up = { interval = 0x95e9dc, obj = 9824732 }, up_obj = 0, gcmarkbit = 0, write_protect = 0, visible = 0, front_sticky = 0, rear_sticky = 0, plist = 9845373 } The backtrace might be illuminating - at least insomuch you might have an idea what I could look at. Is there something I can use to dump the entire interval tree? Perhaps I could use that to see when a bogus interval arises. Or perhaps the fact that it appears to happen from fontification-functions might help. Or scare. (gdb) where #0 update_interval (i=0x95daf4, pos=1771) at intervals2.c:34 #1 0x00172668 in update_syntax_table (charpos=1771, count=-1, init=0, object=<value optimized out>) at syntax.c:180 #2 0x00139a98 in re_match_2_internal (bufp=0x465fb0, string1=0x0, size1=0, string2=0x96e7b0 "/* Code for doing intervals.\n Copyright (C) 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2004,\n", ' ' <repeats 17 times>, "2005, 2006, 2007, 2008 Free Software Foundation, Inc.\n\nThis file is part of GNU Em"..., size2=1806, pos=1770, regs=0x45aeb0, stop=1806) at regex.c:6087 #3 0x001350c4 in re_search_2 (bufp=0x465fb0, str1=0x96e7b0 "/* Code for doing intervals.\n Copyright (C) 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2004,\n", ' ' <repeats 17 times>, "2005, 2006, 2007, 2008 Free Software Foundation, Inc.\n\nThis file is part of GNU Em"..., size1=1806, str2=0x9811f0 "", size2=0, startpos=1770, range=-1770, regs=0x45aeb0, stop=1806) at regex.c:4434 #4 0x0012aa00 in search_buffer (string=<value optimized out>, pos=1807, pos_byte=1807, lim=1, lim_byte=1, n=-1, RE=1, trt=4675585, inverse_trt=4675585, posix=0) at search.c:1144 #5 0x0012a42c in search_command (string=2502667, bound=4675585, noerror=4779993, count=<value optimized out>, direction=<value optimized out>, RE=1, posix=0) at search.c:978 #6 0x0012cd44 in Fre_search_backward (regexp=2502667, bound=4675585, noerror=4779993, count=8) at search.c:2231 #7 0x00156b10 in Ffuncall (nargs=5, args=<value optimized out>) at eval.c:3003 #8 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=86) at bytecode.c:679 #9 0x00157094 in funcall_lambda (fun=2502404, nargs=1, arg_vector=0xffbeaa14) at eval.c:3180 #10 0x00156bf4 in Ffuncall (nargs=2, args=<value optimized out>) at eval.c:3039 #11 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=23) at bytecode.c:679 #12 0x00157094 in funcall_lambda (fun=2502228, nargs=0, arg_vector=0xffbeabc4) at eval.c:3180 #13 0x00156bf4 in Ffuncall (nargs=1, args=<value optimized out>) at eval.c:3039 #14 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=51) at bytecode.c:679 #15 0x00157094 in funcall_lambda (fun=8848228, nargs=1, arg_vector=0xffbead74) at eval.c:3180 #16 0x00156bf4 in Ffuncall (nargs=2, args=<value optimized out>) at eval.c:3039 #17 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=204) at bytecode.c:679 #18 0x00157094 in funcall_lambda (fun=7471364, nargs=0, arg_vector=0xffbeaf34) at eval.c:3180 #19 0x00156bf4 in Ffuncall (nargs=1, args=<value optimized out>) at eval.c:3039 #20 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=16) at bytecode.c:679 #21 0x00157094 in funcall_lambda (fun=8824484, nargs=0, arg_vector=0xffbeb0e4) at eval.c:3180 #22 0x00156bf4 in Ffuncall (nargs=1, args=<value optimized out>) at eval.c:3039 #23 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=214) at bytecode.c:679 #24 0x00157094 in funcall_lambda (fun=8835844, nargs=3, arg_vector=0xffbeb2bc) at eval.c:3180 #25 0x00156bf4 in Ffuncall (nargs=4, args=<value optimized out>) at eval.c:3039 #26 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=62) at bytecode.c:679 #27 0x00157094 in funcall_lambda (fun=7119588, nargs=2, arg_vector=0xffbeb47c) at eval.c:3180 #28 0x00156bf4 in Ffuncall (nargs=3, args=<value optimized out>) at eval.c:3039 #29 0x001824bc in Fbyte_code (bytestr=<value optimized out>, ---Type <return> to continue, or q <return> to quit--- vector=<value optimized out>, maxdepth=0) at bytecode.c:679 #30 0x00157094 in funcall_lambda (fun=7088452, nargs=4, arg_vector=0xffbeb64c) at eval.c:3180 #31 0x00156bf4 in Ffuncall (nargs=5, args=<value optimized out>) at eval.c:3039 #32 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=56) at bytecode.c:679 #33 0x00157094 in funcall_lambda (fun=7120292, nargs=1, arg_vector=0xffbeb824) at eval.c:3180 #34 0x00156bf4 in Ffuncall (nargs=2, args=<value optimized out>) at eval.c:3039 #35 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=96) at bytecode.c:679 #36 0x00157094 in funcall_lambda (fun=2425052, nargs=3, arg_vector=0xffbeb9f4) at eval.c:3180 #37 0x00156bf4 in Ffuncall (nargs=4, args=<value optimized out>) at eval.c:3039 #38 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=137) at bytecode.c:679 #39 0x00157094 in funcall_lambda (fun=2421692, nargs=3, arg_vector=0xffbebbb4) at eval.c:3180 #40 0x00156bf4 in Ffuncall (nargs=4, args=<value optimized out>) at eval.c:3039 #41 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=32) at bytecode.c:679 #42 0x00157094 in funcall_lambda (fun=2420508, nargs=2, arg_vector=0xffbebee0) at eval.c:3180 #43 0x00156bf4 in Ffuncall (nargs=3, args=<value optimized out>) at eval.c:3039 #44 0x00156504 in run_hook_with_args (nargs=3, args=0xffbebedc, cond=to_completion) at eval.c:2652 #45 0x0015635c in Frun_hook_with_args (nargs=3, args=0xffbebedc) at eval.c:2540 #46 0x00156a00 in Ffuncall (nargs=4, args=<value optimized out>) at eval.c:2974 #47 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=32) at bytecode.c:679 #48 0x00155e58 in Feval (form=<value optimized out>) at eval.c:2330 #49 0x001549b0 in internal_lisp_condition_case (var=5069401, bodyform=2435885, handlers=2435957) at eval.c:1429 #50 0x00182dcc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=135) at bytecode.c:869 #51 0x00157094 in funcall_lambda (fun=2435508, nargs=2, arg_vector=0xffbec2ec) at eval.c:3180 #52 0x00156bf4 in Ffuncall (nargs=3, args=<value optimized out>) at eval.c:3039 #53 0x001824bc in Fbyte_code (bytestr=<value optimized out>, vector=<value optimized out>, maxdepth=20) at bytecode.c:679 #54 0x00157094 in funcall_lambda (fun=2435204, nargs=1, arg_vector=0xffbec60c) at eval.c:3180 #55 0x00156bf4 in Ffuncall (nargs=2, args=<value optimized out>) at eval.c:3039 #56 0x00154d4c in internal_condition_case_2 (bfun=0x15679c <Ffuncall>, nargs=2, args=0xffbec608, handlers=4675633, hfun=0x5b110 <safe_eval_handler>) at eval.c:1583 #57 0x0005b220 in safe_call (nargs=2, args=0xffbec608) at xdisp.c:2341 #58 0x0005b24c in safe_call1 (fn=7476585, arg=12728) at xdisp.c:2361 #59 0x0005c7d4 in handle_fontified_prop (it=<value optimized out>) at xdisp.c:3296 #60 0x0005c1b4 in handle_stop (it=0xffbec8d8) at xdisp.c:3047 #61 0x00061120 in next_element_from_buffer (it=0xffbec8d8) at xdisp.c:6320 #62 0x00060214 in get_next_display_element (it=0xffbec8d8) at xdisp.c:5578 #63 0x00071a9c in display_line (it=0xffbec8d8) at xdisp.c:16066 #64 0x0006d6b8 in try_window (window=<value optimized out>, pos= {charpos = 7969796, bytepos = 7969792}, check_margins=1) at xdisp.c:13645 #65 0x0006c898 in redisplay_window (window=7969796, just_this_one_p=0) at xdisp.c:13266 #66 0x00069a28 in redisplay_window_0 (window=7969796) at xdisp.c:11871 #67 0x00154c10 in internal_condition_case_1 (bfun=0x699fc <redisplay_window_0>, arg=7969796, handlers=4659037, hfun=0x699dc <redisplay_window_error>) at eval.c:1532 #68 0x000699c0 in redisplay_windows (window=7969796) at xdisp.c:11850 ---Type <return> to continue, or q <return> to quit--- #69 0x00068e44 in redisplay_internal (preserve_echo_area=<value optimized out>) at xdisp.c:11410 #70 0x000674f0 in redisplay () at xdisp.c:10626 #71 0x000ec6a0 in read_char (commandflag=1, nmaps=2, maps=0xffbedd40, prev_event=4675585, used_mouse_menu=0xffbede00, end_time=0x0) at keyboard.c:2675 #72 0x000f5aa0 in read_key_sequence (keybuf=0xffbedef0, bufsize=30, prompt=4675585, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9152 #73 0x000ea1a0 in command_loop_1 () at keyboard.c:1621 #74 0x00154adc in internal_condition_case (bfun=0xe9e10 <command_loop_1>, handlers=4743841, hfun=0xe96d8 <cmd_error>) at eval.c:1484 #75 0x000e9acc in command_loop_2 () at keyboard.c:1330 #76 0x00154588 in internal_catch (tag=4733953, func=0xe9aa0 <command_loop_2>, arg=4675585) at eval.c:1224 #77 0x000e9a48 in command_loop () at keyboard.c:1309 #78 0x000e9418 in recursive_edit_1 () at keyboard.c:1007 #79 0x000e9584 in Frecursive_edit () at keyboard.c:1068 #80 0x000e82a4 in main (argc=2, argv=0xffbee43c) at emacs.c:1770 Lisp Backtrace: "re-search-backward" (0x26300b) "beginning-of-defun-raw" (0x475801) "beginning-of-defun" (0x475801) "c-get-fallback-start-pos" (0x3878) "c-parse-state" (0x3fc) "c-at-toplevel-p" (0x140) "c-font-lock-declarators" (0x41f8) 0x6ca2e4 PVEC_COMPILED "c-find-decl-spots" (0x41f8) "c-font-lock-declarations" (0x41f8) "font-lock-fontify-keywords-region" (0x31b8) "font-lock-default-fontify-region" (0x31b8) "font-lock-fontify-region" (0x31b8) "run-hook-with-args" (0x6d5fc1) "byte-code" (0x252b3b) "jit-lock-fontify-now" (0x31b8) "jit-lock-function" (0x31b8) (gdb) "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-20 11:31 ` Marshall, Simon @ 2008-02-20 17:17 ` Stefan Monnier 2008-02-20 19:40 ` Eli Zaretskii 2008-02-21 22:27 ` Richard Stallman 0 siblings, 2 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-20 17:17 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, Chong Yidong >> As explained (sorry for not noticing this earlier), i1 is >> stack-allocated and not fully initialized, which is why it looks >> like garbage. That's completely normal, we're wasting our time here. >> Better go back to your actual "point before start of properties" > error. >> I've removed the INT_LISPLIKE check. > Luckily, just moving > update_interval into a new file intervals2.c was enough. Building all > with CFLAGS="-g -O1 -fno-unit-at-a-time -fno-crossjumping > -Wno-pointer-sign" allows me to reproduce the error call. Building just > intervals2.c with -O0 rather than -O1 will not reproduce the error call. > With optimisation, when I stop, I see: > (gdb) b intervals2.c:34 > Breakpoint 3 at 0x197c6c: file intervals2.c, line 34. > (gdb) r -Q > Starting program: > /homedev/marshals/ftp/emacs-22.2-pretests/gcc-4.2.3-g-O1/src/emacs -Q > warning: Temporarily disabling breakpoints for unloaded shared library > "/usr/lib/ld.so.1" > Breakpoint 4 at 0xc7580: file xterm.c, line 7866. > C-x C-f intervals.c RET > Breakpoint 3, update_interval (i=0x95eaf4, pos=1771) at intervals2.c:34 > 34 error ("Point before start of properties"); > (gdb) p *i > $1 = { > total_length = 36, > position = 1782, > left = 0x95eb10, > right = 0x95e950, > up = { > interval = 0x95e934, > obj = 9824564 > }, > up_obj = 0, > gcmarkbit = 0, > write_protect = 0, > visible = 0, > front_sticky = 0, > rear_sticky = 0, > plist = 9842845 > } > Note that the condition that allows the call of error in: > else if (NULL_PARENT (i)) > error ("Point before start of properties"); > Expands to: > else if (((i)->up_obj || (i)->up.interval == 0)) > error ("Point before start of properties"); > Yet the condition should be false: > (gdb) p (((i)->up_obj || (i)->up.interval == 0)) > $2 = 0 > I guess it's perfectly possible that this is not due to miscompiled code > (as I reported on gcc's bugzilla), since I guess what gdb is reporting > may not be accurate either. Does this sound reasonable? Any thoughts? Whenever I have to debug optimized code, I tend to rely a lot on good'ol fprintf (stderr, ...), so try to add a few such printfs just before calling `error', where you print things like `i', i->up.interval, i->up_obj, ... This may also help you get a better sense about the trustworthiness of GDB's output. Intervals have had bugs in the past due to asynchronous code (i.e. intervals being changed from signal handlers). It might still be a possibility (tho it sounds unlikely since your problem is reliably reproducible), so you may also want to add fprintfs at other places in the code, such as the entrance/exit of balance_possible_root_interval (and the entrance/exit of the update_intervals function, of course). > The backtrace might be illuminating - at least insomuch you might have > an idea what I could look at. Nope, sorry. > Is there something I can use to dump the entire interval tree? No, there's no such thing either. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-20 17:17 ` Stefan Monnier @ 2008-02-20 19:40 ` Eli Zaretskii 2008-02-21 9:16 ` Richard Stallman 2008-02-21 22:27 ` Richard Stallman 1 sibling, 1 reply; 37+ messages in thread From: Eli Zaretskii @ 2008-02-20 19:40 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Simon.Marshall, cyd > From: Stefan Monnier <monnier@iro.umontreal.ca> > Date: Wed, 20 Feb 2008 12:17:01 -0500 > Cc: emacs-pretest-bug@gnu.org, Chong Yidong <cyd@stupidchicken.com> > > Whenever I have to debug optimized code, I tend to rely a lot on good'ol > fprintf (stderr, ...), so try to add a few such printfs just before > calling `error', where you print things like `i', i->up.interval, > i->up_obj, ... So 20 years after GCC was a pioneer of the idea that it should be possible to debug optimized code, we are back at printf debugging because GCC developers no longer think it's important enough. Progress, indeed... To Simon: if compiling with -O1 does not give you reasonably debuggable code, you may wish to look at the machine code at the offending places. For example, you might find out that, while "p (((i)->up_obj || (i)->up.interval == 0))" yields zero, the real values of up_obj and/or up.interval are loaded in registers, and thus the condition does fire. Although I find this rather surprising for "-O1". Btw, I'd also suggest to try "-ggdb -g3" instead of just -g, it should cause GCC to produce more elaborate debug info, and could help you discover real values of variables. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-20 19:40 ` Eli Zaretskii @ 2008-02-21 9:16 ` Richard Stallman 2008-02-21 16:02 ` Stefan Monnier 2008-02-22 16:27 ` Eli Zaretskii 0 siblings, 2 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-21 9:16 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-pretest-bug, Simon.Marshall, monnier, cyd So 20 years after GCC was a pioneer of the idea that it should be possible to debug optimized code, we are back at printf debugging because GCC developers no longer think it's important enough. I am the one who made it possible to debug optimized code. And I did it in a very simple way: I deleted the statement that turned off -g when -O was enabled. It's one thing to let people try to debug optimized code, and quite another to go to great lengths to make it easier. GCC has never done that. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-21 9:16 ` Richard Stallman @ 2008-02-21 16:02 ` Stefan Monnier 2008-02-22 3:16 ` Stephen J. Turnbull 2008-02-22 16:31 ` [22.1.90]: Point before start of properties Eli Zaretskii 2008-02-22 16:27 ` Eli Zaretskii 1 sibling, 2 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-21 16:02 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug, Eli Zaretskii, Simon.Marshall, cyd > So 20 years after GCC was a pioneer of the idea that it should be > possible to debug optimized code, we are back at printf debugging > because GCC developers no longer think it's important enough. > I am the one who made it possible to debug optimized code. > And I did it in a very simple way: I deleted the statement that > turned off -g when -O was enabled. > It's one thing to let people try to debug optimized code, > and quite another to go to great lengths to make it easier. > GCC has never done that. Debugging optimized code is an open research problem, fundamentally very difficult. Basically, it's an unsolvable problem, i.e. a wrong question. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-21 16:02 ` Stefan Monnier @ 2008-02-22 3:16 ` Stephen J. Turnbull 2008-02-22 15:18 ` [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) Stefan Monnier 2008-02-22 16:31 ` [22.1.90]: Point before start of properties Eli Zaretskii 1 sibling, 1 reply; 37+ messages in thread From: Stephen J. Turnbull @ 2008-02-22 3:16 UTC (permalink / raw) To: Stefan Monnier; +Cc: Simon.Marshall, emacs-pretest-bug, Eli Zaretskii, rms, cyd Stefan Monnier writes: > Debugging optimized code is [...] a wrong question. Intel thanks you for your marketing of their future products! ^ permalink raw reply [flat|nested] 37+ messages in thread
* [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) 2008-02-22 3:16 ` Stephen J. Turnbull @ 2008-02-22 15:18 ` Stefan Monnier 2008-02-22 15:41 ` Andreas Schwab 2008-02-22 22:20 ` Stephen J. Turnbull 0 siblings, 2 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-22 15:18 UTC (permalink / raw) To: Stephen J. Turnbull Cc: Simon.Marshall, emacs-pretest-bug, Eli Zaretskii, rms, cyd >> Debugging optimized code is [...] a wrong question. > Intel thanks you for your marketing of their future products! I guess I do, but I don't think you quite understood what I meant: I indeed value correctness over speed (and really, Emacs is a good example of low-speed program, both as a program (difficult to make it fly) and as a language design&implementation); but my comment was pointing out something else about "debugging optimized programs". Basically such debugging comes up in a few different cases: 1 - the need to debug a program that is too-slow if not optimized. 2 - a bug in the compiler optimization phase. 3 - a bug that is depends on an unspecified behavior in the language, and which happens not to be triggered unless some optimization phase of the compiler is used. 4 - a timing-dependent bug. Case 1 is best solved by using a different approach to debugging: instead of a GDB-style approach (where the compiler does its thing regardless of debugging and then the debugger is expected to be able to present the result in a meaningful manner to the programmer), you can take an Edebug-style approach where the *source* program is annotated (maybe on the fly and then recompiled/reoptimized), in which case there may not even be *any* need for "debugging-info" and the compiler&optimizer can hence be made simpler and the debugger can be (somewhat) independent from the compiler. That's what I meant by "a wrong question": instead of solving the impossible debugging problem after-the-fact (after the optimizer has done its thing), you can solve a different problem (annotate the source program) instead. As for the other 3 situations, here's my take on it: 2 - use better software engineering technology, based on formal systems, to rule out these possibilities. That's my area of research ;-) 3 - use a better specified language. 4 - There are all kinds of approaches to debug and/or formally verify race conditions. Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) 2008-02-22 15:18 ` [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) Stefan Monnier @ 2008-02-22 15:41 ` Andreas Schwab 2008-02-22 22:20 ` Stephen J. Turnbull 1 sibling, 0 replies; 37+ messages in thread From: Andreas Schwab @ 2008-02-22 15:41 UTC (permalink / raw) To: Stefan Monnier Cc: cyd, rms, emacs-pretest-bug, Simon.Marshall, Stephen J. Turnbull, Eli Zaretskii Stefan Monnier <monnier@iro.umontreal.ca> writes: > Case 1 is best solved by using a different approach to debugging: > instead of a GDB-style approach (where the compiler does its thing > regardless of debugging and then the debugger is expected to be able to > present the result in a meaningful manner to the programmer), you can > take an Edebug-style approach where the *source* program is annotated > (maybe on the fly and then recompiled/reoptimized), Yes, ctrace(1), the future in debugging. :-) Andreas. http://www.freebsd.org/cgi/man.cgi?query=ctrace&apropos=0&sektion=1&manpath=SunOS+4.1.3&format=html -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 37+ messages in thread
* [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) 2008-02-22 15:18 ` [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) Stefan Monnier 2008-02-22 15:41 ` Andreas Schwab @ 2008-02-22 22:20 ` Stephen J. Turnbull 1 sibling, 0 replies; 37+ messages in thread From: Stephen J. Turnbull @ 2008-02-22 22:20 UTC (permalink / raw) To: Stefan Monnier; +Cc: Simon.Marshall, emacs-pretest-bug, Eli Zaretskii, rms, cyd Stefan Monnier writes: > >> Debugging optimized code is [...] a wrong question. > > Intel thanks you for your marketing of their future products! > > I guess I do, but I don't think you quite understood what I meant: Oh, I know more about what you do than you seem to think. ;-) A little bit, but that's enough. > That's what I meant by "a wrong question": instead of solving the > impossible debugging problem after-the-fact (after the optimizer > has done its thing), you can solve a different problem (annotate > the source program) instead. First of all, this requires a reproducible problem. That has two issues: (1) maybe the problem isn't reproducible, and (2) for me at least reproduction is a waste 90% of the time; the bugs I'm capable of solving are typically apparent in the stack trace. :-) Second, you're basically restricting the transformations that are allowed to the translator. This seems a reasonable strategy to me, but it's not going to help with Type 2, 3, or 4 bugs, and it may interfere with Type 1 bugs (eg, if you need to execute a loop a few billion times to reach the buggy state -- proof of concept strawman). More Intel The Next Generation promotion. :-) So I wouldn't go so far as to say the question is "wrong", just that there are better questions for a lot of debugging problems. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-21 16:02 ` Stefan Monnier 2008-02-22 3:16 ` Stephen J. Turnbull @ 2008-02-22 16:31 ` Eli Zaretskii 1 sibling, 0 replies; 37+ messages in thread From: Eli Zaretskii @ 2008-02-22 16:31 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug > From: Stefan Monnier <monnier@IRO.UMontreal.CA> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-pretest-bug@gnu.org, > Simon.Marshall@misys.com, cyd@stupidchicken.com > Date: Thu, 21 Feb 2008 11:02:25 -0500 > > Debugging optimized code is an open research problem, fundamentally > very difficult. Basically, it's an unsolvable problem, > i.e. a wrong question. It can be solved almost trivially, IMO, by providing a special -Ox switch which would turn off every optimization whose results cannot be expressed reliably using the modern debug info formats. The gain from these optimizations is marginal anyway, on the order of several percents, and many developers will gladly buy that if they gain debuggability instead. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-21 9:16 ` Richard Stallman 2008-02-21 16:02 ` Stefan Monnier @ 2008-02-22 16:27 ` Eli Zaretskii 2008-02-22 22:09 ` Miles Bader 2008-02-23 19:29 ` Richard Stallman 1 sibling, 2 replies; 37+ messages in thread From: Eli Zaretskii @ 2008-02-22 16:27 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug > From: Richard Stallman <rms@gnu.org> > Date: Thu, 21 Feb 2008 04:16:34 -0500 > Cc: emacs-pretest-bug@gnu.org, Simon.Marshall@misys.com, > monnier@iro.umontreal.ca, cyd@stupidchicken.com > > It's one thing to let people try to debug optimized code, > and quite another to go to great lengths to make it easier. > GCC has never done that. Debugging GCC-optimized (under -O2) code is not just hard, it's downright impossible! In anything but the most trivial toy programs, you end up with functions in which you cannot put a breakpoint, tracebacks that cannot be trusted and which do not show values of some variables in the calls to functions, variables whose values cannot be displayed (except by disassemblying, and even then not everywhere), and other ``niceties''. The end result is what we hear in this list too many times: developers run Emacs produced without optimizations, which means we don't test well the code we eventually ship. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-22 16:27 ` Eli Zaretskii @ 2008-02-22 22:09 ` Miles Bader 2008-02-23 19:29 ` Richard Stallman 1 sibling, 0 replies; 37+ messages in thread From: Miles Bader @ 2008-02-22 22:09 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-pretest-bug, rms Eli Zaretskii <eliz@gnu.org> writes: >> It's one thing to let people try to debug optimized code, >> and quite another to go to great lengths to make it easier. >> GCC has never done that. > > Debugging GCC-optimized (under -O2) code is not just hard, it's > downright impossible! Oh, geez, stop with the exaggeration... Sometimes it's maddening, other times it's not a problem. -Miles -- We live, as we dream -- alone.... ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-22 16:27 ` Eli Zaretskii 2008-02-22 22:09 ` Miles Bader @ 2008-02-23 19:29 ` Richard Stallman 2008-02-23 21:18 ` Eli Zaretskii 2008-02-24 20:36 ` Tom Tromey 1 sibling, 2 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-23 19:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-pretest-bug Debugging GCC-optimized (under -O2) code is not just hard, it's downright impossible! This is unfortunate, but fixing it is very hard. It would probably require new ways to communcate info to GDB about the optimizations that were done, and changes in GCC and GDB. It would be great if someone implements these features, but there's no use complaining that people have not done it. It can be solved almost trivially, IMO, by providing a special -Ox switch which would turn off every optimization whose results cannot be expressed reliably using the modern debug info formats. Doesn't -O1 do that job? ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-23 19:29 ` Richard Stallman @ 2008-02-23 21:18 ` Eli Zaretskii 2008-02-24 15:22 ` Richard Stallman 2008-02-24 20:36 ` Tom Tromey 1 sibling, 1 reply; 37+ messages in thread From: Eli Zaretskii @ 2008-02-23 21:18 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug > From: Richard Stallman <rms@gnu.org> > Date: Sat, 23 Feb 2008 14:29:31 -0500 > Cc: emacs-pretest-bug@gnu.org > > It can be solved almost trivially, IMO, by providing a special -Ox > switch which would turn off every optimization whose results cannot be > expressed reliably using the modern debug info formats. > > Doesn't -O1 do that job? No, not really. -O1 disables ``expensive optimizations'', i.e. optimizations that use significant portions of processor time. Thus, which optimizations are selected for inclusion in -O1 has nothing to do with which ones defeat debugging, and the fact that -O1 compiled programs are easier to debug is a pure coincidence. I'm quite sure several important optimizations could be added to -O1 without any significant effect on debuggability. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-23 21:18 ` Eli Zaretskii @ 2008-02-24 15:22 ` Richard Stallman 2008-02-24 19:59 ` Eli Zaretskii 0 siblings, 1 reply; 37+ messages in thread From: Richard Stallman @ 2008-02-24 15:22 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-pretest-bug No, not really. -O1 disables ``expensive optimizations'', i.e. optimizations that use significant portions of processor time. Thus, which optimizations are selected for inclusion in -O1 has nothing to do with which ones defeat debugging, and the fact that -O1 compiled programs are easier to debug is a pure coincidence. I'm quite sure several important optimizations could be added to -O1 without any significant effect on debuggability. In practice, though, does it really make a difference? Why won't using -O1 be good for you? Do you really need the extra performance of those optimizations that could be added? ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-24 15:22 ` Richard Stallman @ 2008-02-24 19:59 ` Eli Zaretskii 2008-02-25 10:57 ` Richard Stallman 0 siblings, 1 reply; 37+ messages in thread From: Eli Zaretskii @ 2008-02-24 19:59 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug > From: Richard Stallman <rms@gnu.org> > CC: emacs-pretest-bug@gnu.org > Date: Sun, 24 Feb 2008 10:22:46 -0500 > > Why won't using -O1 be good for you? > Do you really need the extra performance of those > optimizations that could be added? Yes, I need all the extra performance I can get, since the fact that "-O2" gives code that cannot be debugged reliably means that I have to ship software compiled with "-O1" (because I'm unwilling to ship code I didn't test, and I don't want to test code I cannot debug). ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-24 19:59 ` Eli Zaretskii @ 2008-02-25 10:57 ` Richard Stallman 2008-02-25 15:55 ` Stefan Monnier 0 siblings, 1 reply; 37+ messages in thread From: Richard Stallman @ 2008-02-25 10:57 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-pretest-bug Yes, I need all the extra performance I can get, since the fact that "-O2" gives code that cannot be debugged reliably means that I have to ship software compiled with "-O1" (because I'm unwilling to ship code I didn't test, and I don't want to test code I cannot debug). I suggest you make a specific proposal and send it to the GCC discussion list. The option could be called -Odebug, but the real issue is to decide which optimizations to include. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-25 10:57 ` Richard Stallman @ 2008-02-25 15:55 ` Stefan Monnier 0 siblings, 0 replies; 37+ messages in thread From: Stefan Monnier @ 2008-02-25 15:55 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug, Eli Zaretskii > Yes, I need all the extra performance I can get, since the fact that > "-O2" gives code that cannot be debugged reliably means that I have to > ship software compiled with "-O1" (because I'm unwilling to ship code > I didn't test, and I don't want to test code I cannot debug). > I suggest you make a specific proposal and send it to the GCC > discussion list. The option could be called -Odebug, but the real > issue is to decide which optimizations to include. Maybe a better approach would be a "-really-g" that would disable all problematic optimizations. So it can be combined with -O9 or some such super-expensive optimization (expensive but whose result is not hard to describe to GDB). Stefan ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-23 19:29 ` Richard Stallman 2008-02-23 21:18 ` Eli Zaretskii @ 2008-02-24 20:36 ` Tom Tromey 2008-02-25 10:57 ` Richard Stallman 1 sibling, 1 reply; 37+ messages in thread From: Tom Tromey @ 2008-02-24 20:36 UTC (permalink / raw) To: rms; +Cc: emacs-pretest-bug, Eli Zaretskii >>>>> "rms" == Richard Stallman <rms@gnu.org> writes: rms> This is unfortunate, but fixing it is very hard. It would probably require rms> new ways to communcate info to GDB about the optimizations that were done, rms> and changes in GCC and GDB. There's some work going on now that may address this, at least a bit. There are two different branches, implementing different approaches to the problem. Here's info about one: http://gcc.gnu.org/wiki/Var_Tracking_Assignments The other is called "var-mappings-branch" and does not appear to have a wiki page. Tom ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-24 20:36 ` Tom Tromey @ 2008-02-25 10:57 ` Richard Stallman 0 siblings, 0 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-25 10:57 UTC (permalink / raw) To: Tom Tromey; +Cc: emacs-pretest-bug, eliz rms> This is unfortunate, but fixing it is very hard. It would probably require rms> new ways to communcate info to GDB about the optimizations that were done, rms> and changes in GCC and GDB. There's some work going on now that may address this, at least a bit. It sounds useful. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-20 17:17 ` Stefan Monnier 2008-02-20 19:40 ` Eli Zaretskii @ 2008-02-21 22:27 ` Richard Stallman 1 sibling, 0 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-21 22:27 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-pretest-bug, Simon.Marshall, cyd > Luckily, just moving > update_interval into a new file intervals2.c was enough. Building all > with CFLAGS="-g -O1 -fno-unit-at-a-time -fno-crossjumping > -Wno-pointer-sign" allows me to reproduce the error call. Building just > intervals2.c with -O0 rather than -O1 will not reproduce the error call. > With optimisation, when I stop, I see: I think this is enough to file a GCC bug report. The GCC developers can compare the assembler code with the C code and precisely identify the bug. ^ permalink raw reply [flat|nested] 37+ messages in thread
[parent not found: <6EE216E1AA959543A555C60FF34FB76702B2DB02@maileube01.misys.global.ad>]
* RE: [22.1.90]: Point before start of properties [not found] ` <6EE216E1AA959543A555C60FF34FB76702B2DB02@maileube01.misys.global.ad> @ 2008-02-19 14:45 ` Marshall, Simon 2008-02-19 23:09 ` Richard Stallman 0 siblings, 1 reply; 37+ messages in thread From: Marshall, Simon @ 2008-02-19 14:45 UTC (permalink / raw) To: Stefan Monnier, Chong Yidong; +Cc: emacs-pretest-bug I've opened a gcc bug on this at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35249 but any thoughts or suggestions are still welcome. -----Original Message----- From: Marshall, Simon Sent: 19 February 2008 10:38 To: 'Stefan Monnier' Cc: 'Chong Yidong'; 'emacs-pretest-bug@gnu.org' Subject: RE: [22.1.90]: Point before start of properties Thanks for the suggestions and the careful reading of my report. Is there anything else you think I could try, eg, to deal with the size of struct interval? I can confirm that it is 28, though it is 28 with or without optimisation. I tried padding it to 32 by adding a dummy int to it, but it still hit the breakpoint with optimisation. I don't like the thought of trying to break up intervals.c, to binary search for a particular problem function, so any other suggestions are welcome. Simon. "Misys" is the trade name for Misys plc (registered in England and Wales). Registration Number: 01360027. Registered office: Burleigh House, Chapel Oak, Salford Priors, Evesham WR11 8SP. For a list of Misys group operating companies please go to http://www.misys.com/html/about_us/group_operating_companies/. This email and any attachments have been scanned for known viruses using multiple scanners. We believe that this email and any attachments are virus free, however the recipient must take full responsibility for virus checking. This email message is intended for the named recipient only. It may be privileged and/or confidential. If you are not the named recipient of this email please notify us immediately and do not copy it or use it for any purpose, nor disclose its contents to any other person. This email does not constitute the commencement of legal relations between you and Misys plc. Please refer to the executed contract between you and the relevant member of the Misys group for the identity of the contracting party with which you are dealing. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-19 14:45 ` Marshall, Simon @ 2008-02-19 23:09 ` Richard Stallman 0 siblings, 0 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-19 23:09 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug, cyd, monnier I don't like the thought of trying to break up intervals.c, to binary search for a particular problem function, so any other suggestions are welcome. Please use the binary search method if you don't find another way. The only other method I know of is to debug the problem and localize the incorrect execution to a particular piece of code. By comparison, the binary search method is much easier. ^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [22.1.90]: Point before start of properties 2008-02-08 16:35 [22.1.90]: Point before start of properties Marshall, Simon 2008-02-10 3:26 ` Stefan Monnier 2008-02-10 15:22 ` Chong Yidong @ 2008-02-10 18:42 ` Richard Stallman 2 siblings, 0 replies; 37+ messages in thread From: Richard Stallman @ 2008-02-10 18:42 UTC (permalink / raw) To: Marshall, Simon; +Cc: emacs-pretest-bug The error "point before start of properties" could just as well be an abort, since it reports a condition that should be impossible. Namely, that the interval data structure that records the text properties is invalid, in that it does not cover the whole of the buffer. The first step in debugging this is to carefully examine the interval data structure and see how it is invalid. The next step is to see how it got that way. Your simple test case should make that fairly easy: (gdb) b intervals.c:794 Breakpoint 1 at 0x195d90: file intervals.c, line 794. (gdb) r -Q Then in emacs do C-x C-f ~/.../src/intervals.c RET and bang: Breakpoint 1, update_interval (i=0x8b1af4, pos=1771) at intervals.c:794 794 error ("Point before start of properties"); (gdb) Does anyone else observe this bug? ^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2008-02-25 15:55 UTC | newest] Thread overview: 37+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-02-08 16:35 [22.1.90]: Point before start of properties Marshall, Simon 2008-02-10 3:26 ` Stefan Monnier 2008-02-10 15:22 ` Chong Yidong 2008-02-12 17:52 ` Marshall, Simon 2008-02-12 18:32 ` Stefan Monnier 2008-02-13 10:13 ` Marshall, Simon 2008-02-18 19:52 ` Stefan Monnier 2008-02-19 10:37 ` Marshall, Simon 2008-02-19 16:00 ` Stefan Monnier 2008-02-19 17:23 ` Marshall, Simon 2008-02-19 17:31 ` David Kastrup 2008-02-20 9:44 ` Marshall, Simon 2008-02-19 21:59 ` Stefan Monnier 2008-02-20 11:31 ` Marshall, Simon 2008-02-20 17:17 ` Stefan Monnier 2008-02-20 19:40 ` Eli Zaretskii 2008-02-21 9:16 ` Richard Stallman 2008-02-21 16:02 ` Stefan Monnier 2008-02-22 3:16 ` Stephen J. Turnbull 2008-02-22 15:18 ` [OT] Deugging optimized code (was: [22.1.90]: Point before start of properties) Stefan Monnier 2008-02-22 15:41 ` Andreas Schwab 2008-02-22 22:20 ` Stephen J. Turnbull 2008-02-22 16:31 ` [22.1.90]: Point before start of properties Eli Zaretskii 2008-02-22 16:27 ` Eli Zaretskii 2008-02-22 22:09 ` Miles Bader 2008-02-23 19:29 ` Richard Stallman 2008-02-23 21:18 ` Eli Zaretskii 2008-02-24 15:22 ` Richard Stallman 2008-02-24 19:59 ` Eli Zaretskii 2008-02-25 10:57 ` Richard Stallman 2008-02-25 15:55 ` Stefan Monnier 2008-02-24 20:36 ` Tom Tromey 2008-02-25 10:57 ` Richard Stallman 2008-02-21 22:27 ` Richard Stallman [not found] ` <6EE216E1AA959543A555C60FF34FB76702B2DB02@maileube01.misys.global.ad> 2008-02-19 14:45 ` Marshall, Simon 2008-02-19 23:09 ` Richard Stallman 2008-02-10 18:42 ` Richard Stallman
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.