В Tue, 13 Apr 2010 09:53:50 +0400 Hizel Ildar <hizel_at_vyborg.ru> пишет: > В Sat, 10 Apr 2010 17:14:54 -0700 > David Wolfskill <david_at_catwhisker.org> пишет: > > > As these things go, this probably isn't as critical as most thinsg > > disussed on this list, but I happened to notice it today, built a > > debugging world and at least cornered the annoying little varmint. > > > > Sorry; no patch at this time. :-( > > > > Here's how to reproduce it: while running CURRENT, invoke dc(1) > > using the command-line expression-soecification ("-e ..."), thus: > > > > freebeast(9.0-C)[2] dc -e "6 2/p" > > Segmentation fault (core dumped) > > freebeast(9.0-C)[3] > > > > This was running: > > > > FreeBSD freebeast.catwhisker.org 9.0-CURRENT FreeBSD 9.0-CURRENT #1 > > r206447: Sat Apr 10 14:49:56 PDT 2010 > > root_at_freebeast.catwhisker.org:/common/S1/obj/usr/src/sys/GENERIC > > i386 > > > > Also, when using the option -f file must be core dump :( > > foo# echo '6 2/p' > /tmp/test > foo# dc -f /tmp/test > Segmentation fault (core dumped) > foo# gdb /usr/bin/dc dc.core > GNU gdb 6.1.1 [FreeBSD] > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and > you are welcome to change it and/or distribute copies of it under > certain conditions. Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for > details. This GDB was configured as "i386-marcel-freebsd"... > Core was generated by `dc'. > Program terminated with signal 11, Segmentation fault. > Reading symbols from /lib/libcrypto.so.6...done. > Loaded symbols for /lib/libcrypto.so.6 > Reading symbols from /lib/libc.so.7...done. > Loaded symbols for /lib/libc.so.7 > Reading symbols from /libexec/ld-elf.so.1...done. > Loaded symbols for /libexec/ld-elf.so.1 > #0 0x08049818 in reset_bmachine (src=0x804fc48) > at /usr/src/usr.bin/dc/bcode.c:277 277 > bmachine.readstack[0] = *src; (gdb) bt > #0 0x08049818 in reset_bmachine (src=0x804fc48) > at /usr/src/usr.bin/dc/bcode.c:277 #1 0x0804947e in procfile > (fname=0xbfbfea22 "/tmp/test") at /usr/src/usr.bin/dc/dc.c:75 #2 > 0x0804951f in main (argc=3, argv=0xbfbfe8fc) > at /usr/src/usr.bin/dc/dc.c:96 (gdb) quit foo# uname -a > FreeBSD foo.vyborg.ru 9.0-CURRENT FreeBSD 9.0-CURRENT #1: Sun Apr 11 > 21:00:05 MSD 2010 > root_at_foo.vyborg.ru:/usr/obj/usr/src/sys/GENERIC i386 > My patch: foo# diff -ruN dc.c.orig dc.c --- dc.c.orig 2010-04-13 10:33:22.000000000 +0400 +++ dc.c 2010-04-13 11:44:18.000000000 +0400 _at__at_ -87,12 +87,16 _at__at_ while ((ch = getopt_long(argc, argv, "e:f:Vx", long_options, NULL)) != -1) { switch (ch) { case 'e': + if(!preproc_done) + init_bmachine(extended_regs); src_setstring(&src, optarg); reset_bmachine(&src); eval(); preproc_done = true; break; case 'f': + if(!preproc_done) + init_bmachine(extended_regs); procfile(optarg); preproc_done = true; break; _at__at_ -114,7 +118,9 _at__at_ argc -= optind; argv += optind; - init_bmachine(extended_regs); + if (!preproc_done) + init_bmachine(extended_regs); + setlinebuf(stdout); setlinebuf(stderr); test: foo# dc -f /tmp/test 3 foo# dc -e "6 2/p" 3 foo# dc -e "6 2/p" -f /tmp/test 3 3 foo# dc -e "6 2/p" -f /tmp/test /tmp/test 3 3 3Received on Tue Apr 13 2010 - 05:48:05 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:02 UTC