Hey suckless,

I think I found a bug in 9base rc.
To replicate, execute following code:

        #!/usr/bin/env rc
        fn sigint{
                echo in sigint
                exit 1
        }
        l=`{read}

and send sigint to the program (for example
by typing CTRL-C.

The desired output would be 'in sigint', but instead,
by shell tells me this:

        ^C7974: signal: interrupt
        fish: './rcbt' terminated by signal SIGSEGV (Adressbereichsfehler)

When examining the core with gdb, this is the output:

        gdb /usr/local/plan9/bin/rc core.7973
        Reading symbols from /usr/local/plan9/bin/rc...done.
        [New LWP 7973]
        Core was generated by `rc ./rcbt'.
        Program terminated with signal SIGSEGV, Segmentation fault.
        #0  0x0000000000404369 in p9main (argc=2, argv=0x7ffcd7275338) at 
exec.c:188
        188                     (*runq->code[runq->pc-1].f)();

`bt` results this:

        #0  0x0000000000404369 in p9main (argc=2, argv=0x7ffcd7275338) at 
exec.c:188
        #1  0x0000000000410dd1 in main ()

`info locals` results this:

        Reading symbols from /usr/local/plan9/bin/rc...done.
        [New LWP 7973]
        Core was generated by `rc ./rcbt'.
        Program terminated with signal SIGSEGV, Segmentation fault.
        #0  0x0000000000404369 in p9main (argc=2, argv=0x7ffcd7275338) at 
exec.c:188
        188                     (*runq->code[runq->pc-1].f)();
        bootstrap = {[0] = {
            f = 0x2, 
            i = 2, 
            s = 0x2 <error: Cannot access memory at address 0x2>
          }, [1] = {
            f = 0x404786 <Xmark>, 
            i = 4212614, 
            s = 0x404786 <Xmark> 
"UH\211\345\350(\366\377\377\220]\303UH\211\345\350b\366\377\377\220]\303UH\211\345H\203\354\020H\213\005\243\312-"
          }, [2] = {
            f = 0x404b1f <Xword>, 
            i = 4213535, 
            s = 0x404b1f <Xword> "UH\211\345H\213\005&\307-"
          }, [3] = {
            f = 0x4ab88e, 
            i = 4896910, 
            s = 0x4ab88e "*"
          }, [4] = {
            f = 0x405078 <Xassign>, 
            i = 4214904, 
            s = 0x405078 <Xassign> "UH\211\345H\203\354\020H\213\005\311\301-"
          }, [5] = {
            f = 0x404786 <Xmark>, 
            i = 4212614, 
            s = 0x404786 <Xmark> 
"UH\211\345\350(\366\377\377\220]\303UH\211\345\350b\366\377\377\220]\303UH\211\345H\203\354\020H\213\005\243\312-"
          }, [6] = {
            f = 0x404786 <Xmark>, 
            i = 4212614, 
            s = 0x404786 <Xmark> 
"UH\211\345\350(\366\377\377\220]\303UH\211\345\350b\366\377\377\220]\303UH\211\345H\203\354\020H\213\005\243\312-"
          }, [7] = {
            f = 0x404b1f <Xword>, 
            i = 4213535, 
            s = 0x404b1f <Xword> "UH\211\345H\213\005&\307-"
          }, [8] = {
            f = 0x4ab88e, 
            i = 4896910, 
            s = 0x4ab88e "*"
          }, [9] = {
            f = 0x4051c5 <Xdol>, 
            i = 4215237, 
            s = 0x4051c5 <Xdol> "UH\211\345H\203\354\060H\213\005|\300-"
          }, [10] = {
            f = 0x404b1f <Xword>, 
            i = 4213535, 
            s = 0x404b1f <Xword> "UH\211\345H\213\005&\307-"
          }, [11] = {
            f = 0xc69ac0, 
            i = 13015744, 
            s = 0xc69ac0 "/usr/local/plan9/etc/rcmain"
          }, [12] = {
            f = 0x404b1f <Xword>, 
            i = 4213535, 
            s = 0x404b1f <Xword> "UH\211\345H\213\005&\307-"
          }, [13] = {
            f = 0x4ab890, 
            i = 4896912, 
            s = 0x4ab890 "."
          }, [14] = {
            f = 0x40a073 <Xsimple>, 
            i = 4235379, 
            s = 0x40a073 <Xsimple> "UH\211\345H\203\354\060H\213\005\316q-"
          }, [15] = {
            f = 0x404592 <Xexit>, 
            i = 4212114, 
            s = 0x404592 <Xexit> "UH\211\345ATSH\203\354\020\350^\346\004"
          }, [16] = {
            f = 0x0, 
            i = 0, 
            s = 0x0
          }, [17] = {
            f = 0x42bd41 <malloc+81>, 
            i = 4373825, 
            s = 0x42bd41 <malloc+81> "H\205\300H\211\302\017\204", <incomplete 
sequence \313>
          }, [18] = {
            f = 0x0, 
            i = 0, 
            s = 0x0
          }, [19] = {
            f = 0x41ed96 <getenv+22>, 
            i = 4320662, 
            s = 0x41ed96 <getenv+22> "H\213-\273\003,"
          }, [20] = {
            f = 0x7ffcd72751a0, 
            i = -685289056, 
            s = 0x7ffcd72751a0 ""
          }, [21] = {
            f = 0x4c4285, 
            i = 4997765, 
            s = 0x4c4285 ""
          }, [22] = {
            f = 0x7ffcd736f2dc, 
            i = -684264740, 
            s = 0x7ffcd736f2dc "linux-vdso.so.1"
          }, [23] = {
            f = 0x10, 
            i = 16, 
            s = 0x10 <error: Cannot access memory at address 0x10>
          }, [24] = {
            f = 0x1, 
            i = 1, 
            s = 0x1 <error: Cannot access memory at address 0x1>
          }, [25] = {
            f = 0x4007a9 <init_cacheinfo+489>, 
            i = 4196265, 
            s = 0x4007a9 <init_cacheinfo+489> "H\211Ǹ"
          }, [26] = {
            f = 0x0, 
            i = 0, 
            s = 0x0
          }, [27] = {
            f = 0x1, 
            i = 1, 
            s = 0x1 <error: Cannot access memory at address 0x1>
          }, [28] = {
            f = 0x2, 
            i = 2, 
            s = 0x2 <error: Cannot access memory at address 0x2>
          }, [29] = {
            f = 0x7ffcd7275338, 
            i = -685288648, 
            s = 0x7ffcd7275338 "$\\'\327\374\177"
          }, [30] = {
            f = 0x7ffcd7275350, 
            i = -685288624, 
            s = 0x7ffcd7275350 ".\\'\327\374\177"
          }, [31] = {
            f = 0x2, 
            i = 2, 
            s = 0x2 <error: Cannot access memory at address 0x2>
          }}
        num = "7973\000\000\000\000\063\000\000"
        rcmain = 0xc69ac0 "/usr/local/plan9/etc/rcmain"
        i = 0

I am running arch linux 4.8.12-3 with gcc 6.2.1 and 9base commit de27e3fba5
(which is HEAD). `make -n -f Makefile rc` in 9base/rc results this:

        echo CC code.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 code.c
        echo CC exec.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 exec.c
        echo CC getflags.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 getflags.c
        echo CC glob.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 glob.c
        echo CC here.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 here.c
        echo CC io.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 io.c
        echo CC lex.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 lex.c
        echo CC pcmd.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 pcmd.c
        echo CC pfnc.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 pfnc.c
        echo CC simple.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 simple.c
        echo CC subr.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 subr.c
        echo CC trap.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 trap.c
        echo CC tree.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 tree.c
        echo CC unixcrap.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 unixcrap.c
        echo CC var.c
        cc -c -I. -DPLAN9PORT -DPREFIX="\"/usr/local/plan9\"" -g -I../lib9 
-I/usr/local/plan9/include -I../lib9 var.c

That's all information I could gather. I hope this can be reproduced.

Greetings,

pranomostro

Reply via email to