zsh-workers
 help / color / mirror / code / Atom feed
* segfault in completion for configure
@ 2016-03-11 13:47 Vincent Lefevre
  2016-03-11 14:32 ` Peter Stephenson
  2016-03-11 22:13 ` Daniel Shahaf
  0 siblings, 2 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-11 13:47 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 3561 bytes --]

With zsh 5.2 under Debian/unstable, zsh sometimes crashes when
I do:

cventin:~/software/mutt/mutt> ./configure --[TAB]

cventin:~/software/mutt/mutt> gdb /usr/bin/zsh core
GNU gdb (Debian 7.10-1+b1) 7.10
[...]
Reading symbols from /usr/bin/zsh...Reading symbols from /usr/lib/debug/.build-id/40/ed59c9d46d5070800a6087db0691e68a1c311e.debug...done.
done.

warning: core file may not match specified executable file.
[New LWP 695]
Core was generated by `zsh'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000046f315 in charrefinc (x=0x6c58b8 <patinput>, 
    y=0x7fd0f708c3c4 <error: Cannot access memory at address 0x7fd0f708c3c4>, 
    z=0x7ffd49191418) at ../../Src/pattern.c:1937
(gdb) bt full
#0  0x000000000046f315 in charrefinc (x=0x6c58b8 <patinput>, 
    y=0x7fd0f708c3c4 <error: Cannot access memory at address 0x7fd0f708c3c4>, 
    z=0x7ffd49191418) at ../../Src/pattern.c:1937
        wc = 0 L'\000'
        ret = <optimized out>
#1  0x0000000000472a0a in patmatch (prog=prog@entry=0xa00948)
    at ../../Src/pattern.c:2718
        savpatinput = 0x7fd0f708c3b8 <error: Cannot access memory at address 0x7fd0f708c3b8>
        savchrop = 0xa00960 " "
        chin = <optimized out>
        chpa = <optimized out>
        badin = 0
        badpa = 0
        scan = 0xa00950
        next = <optimized out>
        opnd = <optimized out>
        start = <optimized out>
        save = <optimized out>
        chrop = 0xa00960 " "
        chrend = 0xa00961 ""
        compend = <optimized out>
        savglobflags = <optimized out>
        op = <optimized out>
        no = <optimized out>
        min = <optimized out>
        fail = 0
        saverrsfound = <optimized out>
        from = <optimized out>
        to = <optimized out>
        comp = <optimized out>
        nextch = <optimized out>
#2  0x00000000004746f1 in pattryrefs (prog=prog@entry=0xa00910, 
    string=string@entry=0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", stringlen=stringlen@entry=38, unmetalenin=unmetalenin@entry=0, 
    patstralloc=<optimized out>, patstralloc@entry=0x7ffd491916d0, 
    patoffset=patoffset@entry=0, nump=0x0, begp=0x0, endp=0x0)
    at ../../Src/pattern.c:2457
        i = <optimized out>
        maxnpos = 0
        ret = <optimized out>
        origlen = 38
        sp = <optimized out>
        ep = <optimized out>
        ptr = <optimized out>
        progstr = <optimized out>
        patstralloc_struct = {unmetalen = 0, unmetalenp = 0, alloced = 0x0, 
          progstrunmeta = 0x0, progstrunmetalen = 0}
#3  0x0000000000474dff in pattrylen (prog=prog@entry=0xa00910, 
    string=string@entry=0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", len=len@entry=38, unmetalen=unmetalen@entry=0, 
    patstralloc=patstralloc@entry=0x7ffd491916d0, offset=offset@entry=0)
    at ../../Src/pattern.c:2195
No locals.
#4  0x0000000000432959 in igetmatch (sp=sp@entry=0x7ffd491918d0, p=0xa00910, 
    fl=18, n=n@entry=1, replstr=<optimized out>, repllistp=repllistp@entry=0x0)
    at ../../Src/glob.c:2842
        s = <optimized out>
        t = <optimized out>
[...]

I'm attaching the full backtrace.

This seems quite random: I can sometimes reproduce the crash,
but not always.

Ditto from the mpfr working copy (instead of mutt), so that this is
not specific to some software.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

[-- Attachment #2: gdb.txt --]
[-- Type: text/plain, Size: 100582 bytes --]


Thread 1 (LWP 695):
#0  0x000000000046f315 in charrefinc (x=0x6c58b8 <patinput>, y=0x7fd0f708c3c4 <error: Cannot access memory at address 0x7fd0f708c3c4>, z=0x7ffd49191418) at ../../Src/pattern.c:1937
        wc = 0 L'\000'
        ret = <optimized out>
#1  0x0000000000472a0a in patmatch (prog=prog@entry=0xa00948) at ../../Src/pattern.c:2718
        savpatinput = 0x7fd0f708c3b8 <error: Cannot access memory at address 0x7fd0f708c3b8>
        savchrop = 0xa00960 " "
        chin = <optimized out>
        chpa = <optimized out>
        badin = 0
        badpa = 0
        scan = 0xa00950
        next = <optimized out>
        opnd = <optimized out>
        start = <optimized out>
        save = <optimized out>
        chrop = 0xa00960 " "
        chrend = 0xa00961 ""
        compend = <optimized out>
        savglobflags = <optimized out>
        op = <optimized out>
        no = <optimized out>
        min = <optimized out>
        fail = 0
        saverrsfound = <optimized out>
        from = <optimized out>
        to = <optimized out>
        comp = <optimized out>
        nextch = <optimized out>
#2  0x00000000004746f1 in pattryrefs (prog=prog@entry=0xa00910, string=string@entry=0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", stringlen=stringlen@entry=38, unmetalenin=unmetalenin@entry=0, patstralloc=<optimized out>, patstralloc@entry=0x7ffd491916d0, patoffset=patoffset@entry=0, nump=0x0, begp=0x0, endp=0x0) at ../../Src/pattern.c:2457
        i = <optimized out>
        maxnpos = 0
        ret = <optimized out>
        origlen = 38
        sp = <optimized out>
        ep = <optimized out>
        ptr = <optimized out>
        progstr = <optimized out>
        patstralloc_struct = {unmetalen = 0, unmetalenp = 0, alloced = 0x0, progstrunmeta = 0x0, progstrunmetalen = 0}
#3  0x0000000000474dff in pattrylen (prog=prog@entry=0xa00910, string=string@entry=0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", len=len@entry=38, unmetalen=unmetalen@entry=0, patstralloc=patstralloc@entry=0x7ffd491916d0, offset=offset@entry=0) at ../../Src/pattern.c:2195
No locals.
#4  0x0000000000432959 in igetmatch (sp=sp@entry=0x7ffd491918d0, p=0xa00910, fl=18, n=n@entry=1, replstr=<optimized out>, repllistp=repllistp@entry=0x0) at ../../Src/glob.c:2842
        s = <optimized out>
        t = <optimized out>
        tmatch = <optimized out>
        send = 0x7fd0f7095b26 "llTRAPCHLD"
        ioff = <optimized out>
        l = 38
        matched = 1
        umltot = 38
        umlen = <optimized out>
        nmatches = <optimized out>
        patstralloc = {unmetalen = 38, unmetalenp = 0, alloced = 0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", progstrunmeta = 0x0, progstrunmetalen = 0}
        imd = {mstr = 0x7fd0f7095ad8 ' ' <repeats 26 times>, "[/usr/local]", mlen = 38, ustr = 0x7fd0f7095b00 ' ' <repeats 26 times>, "[/usr/local]llTRAPCHLD", ulen = 38, flags = 18, replstr = 0x0, repllist = 0x0}
#5  0x00000000004386e5 in getmatch (sp=sp@entry=0x7ffd491918d0, pat=<optimized out>, fl=fl@entry=18, n=n@entry=1, replstr=replstr@entry=0x0) at ../../Src/glob.c:2637
        p = <optimized out>
#6  0x0000000000483a00 in paramsubst (ret_flags=<optimized out>, pf_flags=<optimized out>, qt=<optimized out>, str=0x7ffd491918c0, n=<optimized out>, l=<optimized out>) at ../../Src/subst.c:3013
        sortit = <optimized out>
        casmod = <optimized out>
        shsplit = <optimized out>
        eval = <optimized out>
        horrible_offset_hack = <optimized out>
        aptr = <optimized out>
        fstr = 0x7fd0f7095aa1 ""
        quotemod = <optimized out>
        premul = <optimized out>
        preone = <optimized out>
        postnum = <optimized out>
        inbrace = <optimized out>
        s = 0x7fd0f7095a8f " \221\206\221:space:\222\222\204\204  "
        quoteerr = <optimized out>
        hvals = <optimized out>
        chkset = <optimized out>
        vbuf = {isarr = 0, pm = 0xa1b790, flags = 4, start = 0, end = -1, arr = 0x0}
        indord = <optimized out>
        unique = <optimized out>
        arrasg = <optimized out>
        wantt = <optimized out>
        ssub = <optimized out>
        isarr = 0
        v = <optimized out>
        quotetype = <optimized out>
        ms_flags = 0
        fetch_needed = <optimized out>
        cc = <optimized out>
        evalchar = <optimized out>
        flnum = <optimized out>
        replstr = 0x0
        prenum = <optimized out>
        nojoin = 0
        whichlen = <optimized out>
        spbreak = 0
        aval = 0x0
        spsep = <optimized out>
        aspar = <optimized out>
        c = <optimized out>
        idbeg = 0x7fd0f7095a8a "opt\204\204 \221\206\221:space:\222\222\204\204  "
        ostr = <optimized out>
        getlen = <optimized out>
        copied = 1
        presc = <optimized out>
        hkeys = <optimized out>
        idend = 0x7fd0f7095a8d "\204\204 \221\206\221:space:\222\222\204\204  "
        plan9 = 1
        globsubst = <optimized out>
        vunset = 0
        val = 0x7fd0f7095ad8 ' ' <repeats 26 times>, "[/usr/local]"
        sep = <optimized out>
        postmul = <optimized out>
        postone = <optimized out>
        flags = 18
        mods = <optimized out>
        multi_width = <optimized out>
        getkeys = <optimized out>
        colf = 0
        subexp = <optimized out>
#7  stringsubst (list=list@entry=0x7ffd49191b70, node=<optimized out>, pf_flags=<optimized out>, pf_flags@entry=4, ret_flags=ret_flags@entry=0x7ffd49191a5c, asssub=asssub@entry=0) at ../../Src/subst.c:243
        qt = <optimized out>
        str3 = 0x7fd0f7095a88 ""
        str = 0x7fd0f7095a88 ""
        c = <optimized out>
#8  0x0000000000485581 in prefork (list=list@entry=0x7ffd49191b70, flags=flags@entry=6, ret_flags=0x7ffd49191a5c, ret_flags@entry=0x0) at ../../Src/subst.c:85
        node = 0x7ffd49191b90
        stop = 0x0
        keep = 0
        asssub = 0
        ret_flags_local = 0
#9  0x0000000000426221 in addvars (state=state@entry=0x7ffd491964b0, pc=<optimized out>, addflags=addflags@entry=0) at ../../Src/exec.c:2292
        myflags = 0
        vl = 0x7ffd49191b70
        xtr = 0
        isstr = 1
        htok = 1
        arr = <optimized out>
        ptr = <optimized out>
        name = 0x7fd0f7095a80 "opt"
        flags = 0
        opc = 0xa18958
        ac = 5
        svl = {list = {first = 0x7ffd49191b90, last = 0x7ffd49191b90, flags = 0}, node = {next = 0x7ffd49191b90, prev = 0x7ffd49191b90, dat = 0x0}}
        __n0 = {next = 0x0, prev = 0x7ffd49191b70, dat = 0x7fd0f7095a88}
#10 0x0000000000430364 in execsimple (state=state@entry=0x7ffd491964b0) at ../../Src/exec.c:1118
        code = 5
        lv = <optimized out>
        otj = 18
#11 0x000000000042dcd2 in execlist (state=state@entry=0x7ffd491964b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1282
        donedebug = 0
        donetrap = 0
        next = 0xa18964
        code = <optimized out>
        ret = <optimized out>
        cj = 18
        csp = 4
        ltype = 354
        old_pline_level = 23
        old_list_pipe = 1
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 91
        oldnoerrexit = 1
#12 0x0000000000451387 in execwhile (state=0x7ffd491964b0, do_exec=<optimized out>) at ../../Src/loop.c:452
        end = 0xa189d4
        loop = 0xa1873c
        code = <optimized out>
        olderrexit = 1
        oldval = 0
        isuntil = 0
        old_simple_pline = 1
#13 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491964b0, input=input@entry=13, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x7fd0f70957e8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {14, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa18738
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#14 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491964b0, pcode=<optimized out>, how=how@entry=2, input=13, output=output@entry=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {10, 0}
#15 0x000000000042bfed in execpline2 (state=state@entry=0x7ffd491964b0, pcode=pcode@entry=5923, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1811
        old_list_pipe = 0
        subsh_close = 13
        next = 0xa18734
        pc = <optimized out>
        code = <optimized out>
        pid = <optimized out>
        pipes = {13, 14}
#16 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491964b0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 17
        newjob = 18
        old_simple_pline = 1
        slflags = 0
        code = 5923
        lastwj = 19
        lpforked = 0
#17 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491964b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa189d4
        code = <optimized out>
        ret = <optimized out>
        cj = 17
        csp = 2
        ltype = 2
        old_pline_level = 22
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 45
        oldnoerrexit = 1
#18 0x000000000045177b in execif (state=0x7ffd491964b0, do_exec=0) at ../../Src/loop.c:565
        end = 0xa190ec
        next = <optimized out>
        code = <optimized out>
        olderrexit = <optimized out>
        s = <optimized out>
        run = <optimized out>
#19 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491964b0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa18480
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#20 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491964b0, pcode=pcode@entry=2947, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#21 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491964b0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 16
        newjob = 17
        old_simple_pline = 1
        slflags = 0
        code = 2947
        lastwj = 19
        lpforked = 0
#22 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491964b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa190ec
        code = <optimized out>
        ret = <optimized out>
        cj = 16
        csp = 1
        ltype = 2
        old_pline_level = 21
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 34
        oldnoerrexit = 1
#23 0x000000000045177b in execif (state=0x7ffd491964b0, do_exec=0) at ../../Src/loop.c:565
        end = 0xa1910c
        next = <optimized out>
        code = <optimized out>
        olderrexit = <optimized out>
        s = <optimized out>
        run = <optimized out>
#24 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491964b0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa183a0
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#25 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491964b0, pcode=pcode@entry=2243, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#26 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491964b0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 15
        newjob = 16
        old_simple_pline = 1
        slflags = 0
        code = 2243
        lastwj = 19
        lpforked = 0
#27 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491964b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa1910c
        code = <optimized out>
        ret = <optimized out>
        cj = 15
        csp = 0
        ltype = 2
        old_pline_level = 20
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 3
        oldnoerrexit = 1
#28 0x000000000042e060 in execode (p=0xa17d10, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0xa17d10, pc = 0xa18960, strs = 0xa1a5bc "local"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#29 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd49197bf0) at ../../Src/exec.c:4902
        shf = 0x8965d0
        oldscriptname = 0x7fd0f7098068 "_configure"
        oldscriptfilename = 0x7fd0f7098068 "_configure"
#30 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd49197bf0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 8
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x89666c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#31 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd49197bf0, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#32 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd49197bf0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 15
        newjob = 15
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#33 0x000000000042dc4c in execlist (state=state@entry=0x7ffd49197bf0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x896674
        code = <optimized out>
        ret = <optimized out>
        cj = 15
        csp = 0
        ltype = 18
        old_pline_level = 19
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 3
        oldnoerrexit = 1
#34 0x000000000042e060 in execode (p=p@entry=0x896620, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x896620, pc = 0x896670, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#35 0x000000000042ed59 in runshfunc (prog=prog@entry=0x896620, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f7094020 "_arguments") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 20
        ou = 0xa17cd0 "*=NAME*:file:_files"
#36 0x00007fd0ed58613c in comp_wrapper (prog=0x896620, w=0x0, name=0x7fd0f7094020 "_arguments") at ../../../Src/Zle/complete.c:1459
        opre = 0xa17b30 "--"
        oipre = 0xa17b70 ""
        oqipre = 0xa17bb0 ""
        oqs = 0xa17c30 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa17b50 ""
        oisuf = 0xa17b90 ""
        oqisuf = 0xa17bd0 ""
        ocur = 2
        orest = 0xa17350 "auto"
        owords = 0xa17c50
        oq = 0xa17bf0 ""
        oqi = 0xa17c10 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0xa17cb0
        runset = 0
        name = 0x7fd0f7094020 "_arguments"
        w = 0x0
        prog = 0x896620
#37 0x000000000042eb01 in runshfunc (prog=0x896620, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f7094020 "_arguments") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 20
        ou = 0xa17af0 "*=NAME*:file:_files"
#38 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x8965d0, doshargs=doshargs@entry=0x7fd0f7098078, noreturnval=noreturnval@entry=0) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f7098000
        pptab = 0xa17140
        x = <optimized out>
        oargv0 = 0xa17160 "_configure"
        oldzoptind = 1
        oldlastval = 0
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x0
        saveopts = "\000\000\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\000\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\001\001\001\000\000\001\000\000\000\001\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\001"
        oldscriptname = 0x7fd0f7098068 "_configure"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f7098308 "_arguments"
        obreaks = 0
        ocontflag = 0
        oloops = 2
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd4919b670, name = 0x7fd0f7094020 "_arguments", filename = 0x7fd0f7094030 "/usr/share/zsh/functions/Completion/Base/_arguments", caller = 0x7fd0f7098020 "_configure", flineno = 0, lineno = 3, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f7098000
#39 0x000000000042f88f in execshfunc (shf=shf@entry=0x8965d0, args=args@entry=0x7fd0f7098078) at ../../Src/exec.c:4857
        last_file_list = 0x0
        ocs = 0xa17220 "\020a\222"
        ocsp = 0
        osfc = 6
#40 0x000000000042b6db in execshfunc (args=0x7fd0f7098078, shf=0x8965d0) at ../../Src/exec.c:4823
        last_file_list = 0x0
#41 execcmd (state=state@entry=0x7ffd49199a80, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3526
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 1
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 1
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa1776c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#42 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd49199a80, pcode=pcode@entry=259, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#43 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd49199a80, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 14
        newjob = 15
        old_simple_pline = 1
        slflags = 0
        code = 259
        lastwj = 19
        lpforked = 0
#44 0x000000000042dc4c in execlist (state=state@entry=0x7ffd49199a80, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa17798
        code = <optimized out>
        ret = <optimized out>
        cj = 14
        csp = 0
        ltype = 18
        old_pline_level = 18
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 1
        oldnoerrexit = 1
#45 0x000000000042e060 in execode (p=0xa17550, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0xa17550, pc = 0xa17798, strs = 0xa1779c "_arguments"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#46 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd4919b1c0) at ../../Src/exec.c:4902
        shf = 0x89a1f0
        oldscriptname = 0x494aee "(eval)"
        oldscriptfilename = 0x7fd0f70b2068 "_dispatch"
#47 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd4919b1c0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 8
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x89a28c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#48 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd4919b1c0, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#49 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd4919b1c0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 14
        newjob = 14
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#50 0x000000000042dc4c in execlist (state=state@entry=0x7ffd4919b1c0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x89a294
        code = <optimized out>
        ret = <optimized out>
        cj = 14
        csp = 0
        ltype = 18
        old_pline_level = 17
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 1
        oldnoerrexit = 1
#51 0x000000000042e060 in execode (p=p@entry=0x89a240, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x89a240, pc = 0x89a290, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#52 0x000000000042ed59 in runshfunc (prog=prog@entry=0x89a240, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f7098020 "_configure") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 11
        ou = 0xa17510 "_configure"
#53 0x00007fd0ed58613c in comp_wrapper (prog=0x89a240, w=0x0, name=0x7fd0f7098020 "_configure") at ../../../Src/Zle/complete.c:1459
        opre = 0xa17370 "--"
        oipre = 0xa173b0 ""
        oqipre = 0xa173f0 ""
        oqs = 0xa17470 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa17390 ""
        oisuf = 0xa173d0 ""
        oqisuf = 0xa17410 ""
        ocur = 2
        orest = 0xa14b80 "auto"
        owords = 0xa17490
        oq = 0xa17430 ""
        oqi = 0xa17450 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0xa174f0
        runset = 0
        name = 0x7fd0f7098020 "_configure"
        w = 0x0
        prog = 0x89a240
#54 0x000000000042eb01 in runshfunc (prog=0x89a240, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f7098020 "_configure") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 11
        ou = 0xa17330 "_configure"
#55 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x89a1f0, doshargs=doshargs@entry=0x7fd0f70b29c0, noreturnval=noreturnval@entry=0) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70b2000
        pptab = 0x8b1b50
        x = <optimized out>
        oargv0 = 0xa15550 "_dispatch"
        oldzoptind = 1
        oldlastval = 0
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x0
        saveopts = "\000\000\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\000\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\001\001\001\000\000\001\000\000\000\001\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\001"
        oldscriptname = 0x494aee "(eval)"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70b2a00 "_configure"
        obreaks = 0
        ocontflag = 0
        oloops = 2
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd4919d0a0, name = 0x7fd0f7098020 "_configure", filename = 0x7fd0f7098030 "/usr/share/zsh/functions/Completion/Unix/_configure", caller = 0x494aee "(eval)", flineno = 0, lineno = 1, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70b2000
#56 0x000000000042f88f in execshfunc (shf=shf@entry=0x89a1f0, args=args@entry=0x7fd0f70b29c0) at ../../Src/exec.c:4857
        last_file_list = 0x0
        ocs = 0xa15400 "\006\n"
        ocsp = 1
        osfc = 6
#57 0x000000000042b6db in execshfunc (args=0x7fd0f70b29c0, shf=0x89a1f0) at ../../Src/exec.c:4823
        last_file_list = 0x0
#58 execcmd (state=state@entry=0x7ffd4919d050, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3526
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 1
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x7fd0f70b298c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#59 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd4919d050, pcode=pcode@entry=131, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#60 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd4919d050, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 13
        newjob = 14
        old_simple_pline = 1
        slflags = 0
        code = 131
        lastwj = 19
        lpforked = 0
#61 0x000000000042dc4c in execlist (state=state@entry=0x7ffd4919d050, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x7fd0f70b2994
        code = <optimized out>
        ret = <optimized out>
        cj = 13
        csp = 1
        ltype = 18
        old_pline_level = 16
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 63
        oldnoerrexit = 1
#62 0x000000000042e060 in execode (p=0x7fd0f70b2948, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49e5d1 "eval") at ../../Src/exec.c:1075
        s = {prog = 0x7fd0f70b2948, pc = 0x7fd0f70b2994, strs = 0x7fd0f70b2998 "_configure"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#63 0x00000000004147f4 in eval (argv=0x7fd0f70b28d0) at ../../Src/builtin.c:5425
        prog = <optimized out>
        oscriptname = 0x7fd0f70b2068 "_dispatch"
        oineval = 0
        fpushed = 1
        fstack = {prev = 0x7ffd491a1c10, name = 0x494aee "(eval)", filename = 0x7fd0f70b2030 "/usr/share/zsh/functions/Completion/Base/_dispatch", caller = 0x7fd0f70b2020 "_dispatch", flineno = 63, lineno = 63, tp = 2}
#64 0x000000000041da06 in execbuiltin (args=args@entry=0x7fd0f70b2868, assigns=assigns@entry=0x0, bn=bn@entry=0x6b7c20 <builtins+1472>) at ../../Src/builtin.c:484
        argarr = 0x7fd0f70b28d0
        argv = 0x7fd0f70b28d0
        pp = <optimized out>
        name = 0x7fd0f70b28b0 "eval"
        optstr = <optimized out>
        flags = 2056
        sense = <optimized out>
        argc = <optimized out>
        execop = <optimized out>
        xtr = 0
        ops = {ind = '\000' <repeats 127 times>, args = 0x0, argscount = 0, argsalloc = 0}
#65 0x000000000042b67a in execcmd (state=state@entry=0x7ffd491a0020, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3645
        assigns = 0x0
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 1
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = <optimized out>
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = <optimized out>
        code = <optimized out>
        beg = 0xa1633c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#66 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a0020, pcode=pcode@entry=4099, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#67 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a0020, slcode=<optimized out>, how=how@entry=2, last1=last1@entry=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 12
        newjob = 13
        old_simple_pline = 1
        slflags = 0
        code = 4099
        lastwj = 19
        lpforked = 0
#68 0x000000000042dd6f in execlist (state=state@entry=0x7ffd491a0020, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1292
        donedebug = 0
        donetrap = 0
        next = 0xa16348
        code = <optimized out>
        ret = <optimized out>
        cj = 12
        csp = 1
        ltype = 2
        old_pline_level = 15
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 61
        oldnoerrexit = 1
#69 0x000000000045177b in execif (state=0x7ffd491a0020, do_exec=0) at ../../Src/loop.c:565
        end = 0xa16390
        next = <optimized out>
        code = <optimized out>
        olderrexit = <optimized out>
        s = <optimized out>
        run = <optimized out>
#70 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491a0020, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa162ec
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#71 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a0020, pcode=pcode@entry=3971, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#72 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a0020, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 11
        newjob = 12
        old_simple_pline = 1
        slflags = 0
        code = 3971
        lastwj = 19
        lpforked = 0
#73 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a0020, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa16390
        code = <optimized out>
        ret = <optimized out>
        cj = 11
        csp = 0
        ltype = 2
        old_pline_level = 14
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 40
        oldnoerrexit = 1
#74 0x000000000042e060 in execode (p=0xa15a00, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0xa15a00, pc = 0xa16348, strs = 0xa165b8 "local"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#75 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd491a1760) at ../../Src/exec.c:4902
        shf = 0x89dc60
        oldscriptname = 0x7fd0f70b6060 "_normal"
        oldscriptfilename = 0x7fd0f70b6060 "_normal"
#76 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd491a1760, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 10
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x89dcfc
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#77 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a1760, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#78 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a1760, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 11
        newjob = 11
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#79 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a1760, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x89dd04
        code = <optimized out>
        ret = <optimized out>
        cj = 11
        csp = 0
        ltype = 18
        old_pline_level = 13
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 40
        oldnoerrexit = 1
#80 0x000000000042e060 in execode (p=p@entry=0x89dcb0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x89dcb0, pc = 0x89dd00, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#81 0x000000000042ed59 in runshfunc (prog=prog@entry=0x89dcb0, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f70b2020 "_dispatch") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 10
        ou = 0xa159c0 "-default-"
#82 0x00007fd0ed58613c in comp_wrapper (prog=0x89dcb0, w=0x0, name=0x7fd0f70b2020 "_dispatch") at ../../../Src/Zle/complete.c:1459
        opre = 0xa14b60 "--"
        oipre = 0xa14b00 ""
        oqipre = 0xa14ac0 ""
        oqs = 0xa14700 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa14b20 ""
        oisuf = 0xa14ae0 ""
        oqisuf = 0xa14aa0 ""
        ocur = 2
        orest = 0xa0ff40 "auto"
        owords = 0xa15770
        oq = 0xa14a80 ""
        oqi = 0xa14a60 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0x8b1b90
        runset = 0
        name = 0x7fd0f70b2020 "_dispatch"
        w = 0x0
        prog = 0x89dcb0
#83 0x000000000042eb01 in runshfunc (prog=0x89dcb0, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f70b2020 "_dispatch") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 10
        ou = 0xa14b40 "-default-"
#84 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x89dc60, doshargs=doshargs@entry=0x7fd0f70b6368, noreturnval=noreturnval@entry=0) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70b6000
        pptab = 0xa146a0
        x = <optimized out>
        oargv0 = 0xa14870 "_normal"
        oldzoptind = 1
        oldlastval = 0
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x0
        saveopts = "\000\000\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\000\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\001\001\001\000\000\001\000\000\000\001\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\001"
        oldscriptname = 0x7fd0f70b6060 "_normal"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70b6508 "_dispatch"
        obreaks = 0
        ocontflag = 0
        oloops = 2
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd491a51e0, name = 0x7fd0f70b2020 "_dispatch", filename = 0x7fd0f70b2030 "/usr/share/zsh/functions/Completion/Base/_dispatch", caller = 0x7fd0f70b6020 "_normal", flineno = 0, lineno = 40, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70b6000
#85 0x000000000042f88f in execshfunc (shf=shf@entry=0x89dc60, args=args@entry=0x7fd0f70b6368) at ../../Src/exec.c:4857
        last_file_list = 0x0
        ocs = 0xa14c60 "\005\nX\366\320\177"
        ocsp = 0
        osfc = 6
#86 0x000000000042b6db in execshfunc (args=0x7fd0f70b6368, shf=0x89dc60) at ../../Src/exec.c:4823
        last_file_list = 0x0
#87 execcmd (state=state@entry=0x7ffd491a35f0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3526
        restorelist = 0x0
        removelist = 0x0
        q = 4
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 1
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 1
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa14fd0
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#88 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a35f0, pcode=pcode@entry=2627, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#89 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a35f0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 11
        newjob = 11
        old_simple_pline = 1
        slflags = 0
        code = 2627
        lastwj = 19
        lpforked = 0
#90 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a35f0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa14fec
        code = <optimized out>
        ret = <optimized out>
        cj = 10
        csp = 0
        ltype = 18
        old_pline_level = 12
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 117
        oldnoerrexit = 1
#91 0x000000000042e060 in execode (p=0xa14890, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0xa14890, pc = 0xa14fec, strs = 0xa14ff0 "local"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#92 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd491a4d30) at ../../Src/exec.c:4902
        shf = 0x8aad40
        oldscriptname = 0x7fd0f70bf068 "_complete"
        oldscriptfilename = 0x7fd0f70bf068 "_complete"
#93 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd491a4d30, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 8
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x8aaddc
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#94 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a4d30, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#95 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a4d30, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 10
        newjob = 10
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#96 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a4d30, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x8aade4
        code = <optimized out>
        ret = <optimized out>
        cj = 10
        csp = 0
        ltype = 18
        old_pline_level = 11
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 117
        oldnoerrexit = 1
#97 0x000000000042e060 in execode (p=p@entry=0x8aad90, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x8aad90, pc = 0x8aade0, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#98 0x000000000042ed59 in runshfunc (prog=prog@entry=0x8aad90, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f70b6020 "_normal") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 3
        ou = 0x8a0b40 "-s"
#99 0x00007fd0ed58613c in comp_wrapper (prog=0x8aad90, w=0x0, name=0x7fd0f70b6020 "_normal") at ../../../Src/Zle/complete.c:1459
        opre = 0xa0fee0 "--"
        oipre = 0xa0ff00 ""
        oqipre = 0xa0fea0 ""
        oqs = 0xa0fe20 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa0ff20 ""
        oisuf = 0xa0fec0 ""
        oqisuf = 0xa0fe80 ""
        ocur = 2
        orest = 0xa0fd20 "auto"
        owords = 0xa0fe00
        oq = 0xa0fe60 ""
        oqi = 0xa0fe40 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0xa14bc0
        runset = 0
        name = 0x7fd0f70b6020 "_normal"
        w = 0x0
        prog = 0x8aad90
#100 0x000000000042eb01 in runshfunc (prog=0x8aad90, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f70b6020 "_normal") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 3
        ou = 0xa146e0 "-s"
#101 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x8aad40, doshargs=doshargs@entry=0x7fd0f70bf738, noreturnval=noreturnval@entry=0) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70bf000
        pptab = 0xa102f0
        x = <optimized out>
        oargv0 = 0xa102d0 "_complete"
        oldzoptind = 1
        oldlastval = 0
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x0
        saveopts = "\000\000\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\000\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\001\001\001\000\000\001\000\000\000\001\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\001"
        oldscriptname = 0x7fd0f70bf068 "_complete"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70bf790 "_normal"
        obreaks = 0
        ocontflag = 0
        oloops = 2
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd491a9ed0, name = 0x7fd0f70b6020 "_normal", filename = 0x7fd0f70b6028 "/usr/share/zsh/functions/Completion/Base/_normal", caller = 0x7fd0f70bf020 "_complete", flineno = 0, lineno = 117, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70bf000
#102 0x000000000042f88f in execshfunc (shf=shf@entry=0x8aad40, args=args@entry=0x7fd0f70bf738) at ../../Src/exec.c:4857
        last_file_list = 0x0
        ocs = 0xa132d0 "\006\n\n"
        ocsp = 1
        osfc = 6
#103 0x000000000042b6db in execshfunc (args=0x7fd0f70bf738, shf=0x8aad40) at ../../Src/exec.c:4823
        last_file_list = 0x0
#104 execcmd (state=state@entry=0x7ffd491a82e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3526
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 1
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa13dc0
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#105 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a82e0, pcode=pcode@entry=7555, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#106 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a82e0, slcode=<optimized out>, how=how@entry=2, last1=last1@entry=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 9
        newjob = 10
        old_simple_pline = 1
        slflags = 0
        code = 7555
        lastwj = 19
        lpforked = 0
#107 0x000000000042dd6f in execlist (state=state@entry=0x7ffd491a82e0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1292
        donedebug = 0
        donetrap = 0
        next = 0xa13dcc
        code = <optimized out>
        ret = <optimized out>
        cj = 9
        csp = 1
        ltype = 18
        old_pline_level = 10
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 115
        oldnoerrexit = 1
#108 0x000000000045177b in execif (state=0x7ffd491a82e0, do_exec=0) at ../../Src/loop.c:565
        end = 0xa13f44
        next = <optimized out>
        code = <optimized out>
        olderrexit = <optimized out>
        s = <optimized out>
        run = <optimized out>
#109 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491a82e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa13d7c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#110 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a82e0, pcode=pcode@entry=7427, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#111 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a82e0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 8
        newjob = 9
        old_simple_pline = 1
        slflags = 0
        code = 7427
        lastwj = 19
        lpforked = 0
#112 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a82e0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa13f44
        code = <optimized out>
        ret = <optimized out>
        cj = 8
        csp = 0
        ltype = 2
        old_pline_level = 9
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 199
        oldnoerrexit = 1
#113 0x000000000042e060 in execode (p=0xa10270, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0xa10270, pc = 0xa13dcc, strs = 0xa13f78 "local"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#114 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd491a9a20) at ../../Src/exec.c:4902
        shf = 0x899c40
        oldscriptname = 0x7fd0f70cb070 "_main_complete"
        oldscriptfilename = 0x7fd0f70cb070 "_main_complete"
#115 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd491a9a20, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 8
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x899cdc
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#116 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491a9a20, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#117 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491a9a20, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 8
        newjob = 8
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#118 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491a9a20, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x899ce4
        code = <optimized out>
        ret = <optimized out>
        cj = 8
        csp = 0
        ltype = 18
        old_pline_level = 8
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 199
        oldnoerrexit = 1
#119 0x000000000042e060 in execode (p=p@entry=0x899c90, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x899c90, pc = 0x899ce0, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#120 0x000000000042ed59 in runshfunc (prog=prog@entry=0x899c90, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f70bf020 "_complete") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 10
        ou = 0xa13500 "_complete"
#121 0x00007fd0ed58613c in comp_wrapper (prog=0x899c90, w=0x0, name=0x7fd0f70bf020 "_complete") at ../../../Src/Zle/complete.c:1459
        opre = 0xa101d0 "--"
        oipre = 0xa12f80 ""
        oqipre = 0xa133e0 ""
        oqs = 0xa13460 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa101f0 ""
        oisuf = 0xa0fce0 ""
        oqisuf = 0xa13400 ""
        ocur = 2
        orest = 0xa02c70 "auto"
        owords = 0xa13480
        oq = 0xa13420 ""
        oqi = 0xa13440 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0xa134e0
        runset = 0
        name = 0x7fd0f70bf020 "_complete"
        w = 0x0
        prog = 0x899c90
#122 0x000000000042eb01 in runshfunc (prog=0x899c90, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f70bf020 "_complete") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 10
        ou = 0xa0fd60 "_complete"
#123 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x899c40, doshargs=doshargs@entry=0x7fd0f70c57d8, noreturnval=noreturnval@entry=0) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70cb000
        pptab = 0xa02c10
        x = <optimized out>
        oargv0 = 0xa02c30 "zsh"
        oldzoptind = 1
        oldlastval = 1
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x0
        saveopts = "\000\000\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\000\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\001\001\001\000\000\001\000\000\000\001\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\000\000\001"
        oldscriptname = 0x7fd0f70cb070 "_main_complete"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70c5820 "_complete"
        obreaks = 0
        ocontflag = 0
        oloops = 2
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd491b31d0, name = 0x7fd0f70bf020 "_complete", filename = 0x7fd0f70bf030 "/usr/share/zsh/functions/Completion/Base/_complete", caller = 0x7fd0f70cb028 "_main_complete", flineno = 0, lineno = 199, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70cb000
#124 0x000000000042f88f in execshfunc (shf=shf@entry=0x899c40, args=args@entry=0x7fd0f70c57d8) at ../../Src/exec.c:4857
        last_file_list = 0x0
        ocs = 0x926250 "\023"
        ocsp = 4
        osfc = 6
#125 0x000000000042b6db in execshfunc (args=0x7fd0f70c57d8, shf=0x899c40) at ../../Src/exec.c:4823
        last_file_list = 0x0
#126 execcmd (state=state@entry=0x7ffd491b15e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3526
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 1
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 1
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa03cdc
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#127 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b15e0, pcode=pcode@entry=12803, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#128 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b15e0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 7
        newjob = 8
        old_simple_pline = 1
        slflags = 0
        code = 12803
        lastwj = 19
        lpforked = 0
#129 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b15e0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa03ce4
        code = <optimized out>
        ret = <optimized out>
        cj = 7
        csp = 4
        ltype = 18
        old_pline_level = 7
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 194
        oldnoerrexit = 1
#130 0x000000000045171b in execif (state=0x7ffd491b15e0, do_exec=0) at ../../Src/loop.c:549
        end = 0xa03d14
        next = 0xa03d14
        code = <optimized out>
        olderrexit = 0
        s = 1
        run = 0
#131 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491b15e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa03c5c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#132 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b15e0, pcode=pcode@entry=12483, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#133 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b15e0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 6
        newjob = 7
        old_simple_pline = 1
        slflags = 0
        code = 12483
        lastwj = 19
        lpforked = 0
#134 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b15e0, dont_change_job=dont_change_job@entry=1, exiting=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa03d14
        code = <optimized out>
        ret = <optimized out>
        cj = 6
        csp = 3
        ltype = 2
        old_pline_level = 6
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 186
        oldnoerrexit = 0
#135 0x0000000000450764 in execfor (state=0x7ffd491b15e0, do_exec=<optimized out>) at ../../Src/loop.c:175
        end = 0xa03d24
        code = <optimized out>
        iscond = <optimized out>
        ctok = 0
        atok = 0
        last = 0
        name = <optimized out>
        str = 0x7fd0f70c5720 ""
        cond = <optimized out>
        advance = <optimized out>
        val = <optimized out>
        vars = <optimized out>
        args = <optimized out>
        old_simple_pline = 1
#136 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491b15e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa03bc8
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#137 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b15e0, pcode=pcode@entry=11971, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#138 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b15e0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 5
        newjob = 6
        old_simple_pline = 1
        slflags = 0
        code = 11971
        lastwj = 19
        lpforked = 0
#139 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b15e0, dont_change_job=dont_change_job@entry=1, exiting=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa03d24
        code = <optimized out>
        ret = <optimized out>
        cj = 5
        csp = 2
        ltype = 2
        old_pline_level = 5
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 163
        oldnoerrexit = 0
#140 0x0000000000450764 in execfor (state=0x7ffd491b15e0, do_exec=<optimized out>) at ../../Src/loop.c:175
        end = 0xa03d58
        code = <optimized out>
        iscond = <optimized out>
        ctok = 0
        atok = 0
        last = 0
        name = <optimized out>
        str = 0x7fd0f70c5178 "_complete"
        cond = <optimized out>
        advance = <optimized out>
        val = <optimized out>
        vars = <optimized out>
        args = <optimized out>
        old_simple_pline = 1
#141 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491b15e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 4
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa03a00
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#142 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b15e0, pcode=pcode@entry=10499, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#143 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b15e0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 5
        newjob = 5
        old_simple_pline = 1
        slflags = 0
        code = 10499
        lastwj = 19
        lpforked = 0
#144 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b15e0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa03d58
        code = <optimized out>
        ret = <optimized out>
        cj = 4
        csp = 1
        ltype = 2
        old_pline_level = 4
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 47
        oldnoerrexit = 0
#145 0x0000000000451d4a in exectry (state=0x7ffd491b15e0, do_exec=0) at ../../Src/loop.c:722
        end = 0xa04b30
        always = 0xa04a5c
        endval = <optimized out>
        save_retflag = <optimized out>
        save_breaks = <optimized out>
        save_contflag = <optimized out>
        save_try_errflag = <optimized out>
        save_try_tryflag = 0
        save_try_interrupt = <optimized out>
#146 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491b15e0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=2, last1=2) at ../../Src/exec.c:3474
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0xa03250
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#147 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b15e0, pcode=pcode@entry=3075, how=how@entry=2, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#148 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b15e0, slcode=<optimized out>, how=how@entry=2, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 3
        newjob = 4
        old_simple_pline = 1
        slflags = 0
        code = 3075
        lastwj = 19
        lpforked = 0
#149 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b15e0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0xa04b30
        code = <optimized out>
        ret = <optimized out>
        cj = 3
        csp = 0
        ltype = 2
        old_pline_level = 3
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 5
        oldnoerrexit = 0
#150 0x000000000042e060 in execode (p=0x926520, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x49676d "loadautofunc") at ../../Src/exec.c:1075
        s = {prog = 0x926520, pc = 0xa03ce4, strs = 0xa04ca8 "local"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#151 0x000000000042e1e5 in execautofn_basic (do_exec=<optimized out>, state=0x7ffd491b2d20) at ../../Src/exec.c:4902
        shf = 0x8a7bb0
        oldscriptname = 0x7fd0f70d3028 "history-search-or-expand-or-complete"
        oldscriptfilename = 0x0
#152 0x000000000042bd99 in execcmd (state=state@entry=0x7ffd491b2d20, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3472
        q = 5
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x8a7c4c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#153 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b2d20, pcode=pcode@entry=3, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#154 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b2d20, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 2
        newjob = 3
        old_simple_pline = 1
        slflags = 0
        code = 3
        lastwj = 19
        lpforked = 0
#155 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b2d20, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x8a7c54
        code = <optimized out>
        ret = <optimized out>
        cj = 2
        csp = 0
        ltype = 18
        old_pline_level = 2
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 5
        oldnoerrexit = 0
#156 0x000000000042e060 in execode (p=p@entry=0x8a7c00, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x8a7c00, pc = 0x8a7c50, strs = 0x0}
        zsh_eval_context_len = 32
        alen = <optimized out>
#157 0x000000000042ed59 in runshfunc (prog=prog@entry=0x8a7c00, wrap=wrap@entry=0x0, name=name@entry=0x7fd0f70cb028 "_main_complete") at ../../Src/exec.c:5360
        cont = <optimized out>
        ouu = 19
        ou = 0xa02e30 "expand-or-complete"
#158 0x00007fd0ed58613c in comp_wrapper (prog=0x8a7c00, w=0x0, name=0x7fd0f70cb028 "_main_complete") at ../../../Src/Zle/complete.c:1459
        opre = 0xa02c90 "--"
        oipre = 0xa02cd0 ""
        oqipre = 0xa02d10 ""
        oqs = 0xa02d90 "\001"
        m = <optimized out>
        pp = <optimized out>
        osuf = 0xa02cb0 ""
        oisuf = 0xa02cf0 ""
        oqisuf = 0xa02d30 ""
        ocur = 2
        orest = 0x0
        owords = 0xa02db0
        oq = 0xa02d50 ""
        oqi = 0xa02d70 ""
        oaq = 0x0
        kunset = <optimized out>
        sm = <optimized out>
        oredirs = 0xa02e10
        runset = 0
        name = 0x7fd0f70cb028 "_main_complete"
        w = 0x0
        prog = 0x8a7c00
#159 0x000000000042eb01 in runshfunc (prog=0x8a7c00, wrap=0x7fd0ed79f720 <wrapper>, name=0x7fd0f70cb028 "_main_complete") at ../../Src/exec.c:5345
        cont = <optimized out>
        ouu = 19
        ou = 0xa02c50 "expand-or-complete"
#160 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x8a7bb0, doshargs=doshargs@entry=0x0, noreturnval=noreturnval@entry=1) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70cf000
        pptab = 0xa00330
        x = <optimized out>
        oargv0 = 0x9ff200 "zsh"
        oldzoptind = 1
        oldlastval = 1
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x7fd0f70cb020
        saveopts = "\000\001\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\000\000\000\000\000\001\000\000\000\001\001\001\001\001\001\000\001", '\000' <repeats 17 times>, "\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\001\000\001"
        oldscriptname = 0x7fd0f70d3028 "history-search-or-expand-or-complete"
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70cf020 "_main_complete"
        obreaks = 0
        ocontflag = 0
        oloops = 0
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x7ffd491b6950, name = 0x7fd0f70cb028 "_main_complete", filename = 0x7fd0f70cb038 "/usr/share/zsh/functions/Completion/Base/_main_complete", caller = 0x7fd0f70d3050 "history-search-or-expand-or-complete", flineno = 0, lineno = 5, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70cf000
#161 0x00007fd0ed58db8a in callcompfunc (fn=0x8471c0 "_main_complete", s=<optimized out>) at ../../../Src/Zle/compcore.c:838
        largs = 0x0
        _switch_oldheaps = 0x7fd0f70d3000
        p = <optimized out>
        aadd = <optimized out>
        rset = 1023
        kset = <optimized out>
        ockpms = 0x0
        tmp = <optimized out>
        icf = 0
        ocrpms = 0x0
        usea = <optimized out>
        osc = 4
        shfunc = 0x8a7bb0
        lv = 1
        buf = "\321\362\237\000\000\000\000\000\200\000\000\000\000\000\000\000-\000\000"
#162 makecomplist (lst=<optimized out>, incmd=<optimized out>, s=<optimized out>) at ../../../Src/Zle/compcore.c:987
        os = <optimized out>
        onm = 0
        odm = 0
        osi = -1
        p = <optimized out>
        owb = <optimized out>
        owe = <optimized out>
        ooffs = <optimized out>
#163 do_completion (dummy=<optimized out>, dat=<optimized out>) at ../../../Src/Zle/compcore.c:347
        ret = 0
        lst = <optimized out>
        incmd = <optimized out>
        osl = 0
        s = <optimized out>
        opm = 0xa00230 ""
        n = <optimized out>
#164 0x00007fd0ed7d5b55 in docompletion (incmd=0, lst=<optimized out>, s=<optimized out>) at ../../../Src/Zle/zle_tricky.c:2295
        dat = {s = 0x9ff2d0 "--", lst = 0, incmd = 0}
#165 docomplete (lst=0) at ../../../Src/Zle/zle_tricky.c:859
        active = 1
        ol = 0x0
        olst = 4
        chl = 0
        ne = 0
        ocs = <optimized out>
        ret = 0
        dat = {-150130432, 32720}
#166 0x00007fd0ed7d0be0 in completecall (args=args@entry=0x7fd0f70d3160) at ../../../Src/Zle/zle_tricky.c:208
No locals.
#167 0x00007fd0ed7c11d0 in execzlefunc (func=func@entry=0x7fd0ed9ea970 <thingies+2000>, args=args@entry=0x7fd0f70d3160, set_bindk=set_bindk@entry=0) at ../../../Src/Zle/zle_main.c:1360
        atcurhist = <optimized out>
        wflags = 518
        r = 0
        ret = 0
        remetafy = 0
        w = 0x84a2f0
        save_bindk = 0x8433b0
#168 0x00007fd0ed7d0516 in bin_zle_call (name=0x7fd0f70d3130 "zle", args=0x7fd0f70d3160, ops=<optimized out>, func=<optimized out>) at ../../../Src/Zle/zle_thingy.c:754
        t = 0x7fd0ed9ea970 <thingies+2000>
        modsave = <optimized out>
        ret = <optimized out>
        saveflag = 0
        setbindk = 0
        wname = <optimized out>
        keymap_restore = 0x0
        keymap_tmp = <optimized out>
#169 0x000000000041da06 in execbuiltin (args=args@entry=0x7fd0f70d30d0, assigns=assigns@entry=0x0, bn=bn@entry=0x7fd0ed9efd20 <bintab+128>) at ../../Src/builtin.c:484
        argarr = 0x7fd0f70d3158
        argv = 0x7fd0f70d3158
        pp = <optimized out>
        name = 0x7fd0f70d3130 "zle"
        optstr = <optimized out>
        flags = 8
        sense = <optimized out>
        argc = <optimized out>
        execop = <optimized out>
        xtr = 0
        ops = {ind = '\000' <repeats 127 times>, args = 0x0, argscount = 0, argsalloc = 0}
#170 0x000000000042b67a in execcmd (state=state@entry=0x7ffd491b66b0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3645
        assigns = 0x0
        restorelist = 0x0
        removelist = 0x0
        q = 2
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 1
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = <optimized out>
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = <optimized out>
        code = <optimized out>
        beg = 0x859c3c
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#171 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b66b0, pcode=pcode@entry=387, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#172 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b66b0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 1
        newjob = 2
        old_simple_pline = 1
        slflags = 0
        code = 387
        lastwj = 19
        lpforked = 0
#173 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b66b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x859c4c
        code = <optimized out>
        ret = <optimized out>
        cj = 1
        csp = 1
        ltype = 18
        old_pline_level = 1
        old_list_pipe = 0
        old_list_pipe_job = 1
        old_list_pipe_text = 0x0
        oldlineno = 2
        oldnoerrexit = 2
#174 0x000000000045177b in execif (state=0x7ffd491b66b0, do_exec=0) at ../../Src/loop.c:565
        end = 0x859c4c
        next = <optimized out>
        code = <optimized out>
        olderrexit = <optimized out>
        s = <optimized out>
        run = <optimized out>
#175 0x000000000042a661 in execcmd (state=state@entry=0x7ffd491b66b0, input=input@entry=0, output=output@entry=0, how=<optimized out>, how@entry=18, last1=2) at ../../Src/exec.c:3474
        q = 6
        hn = <optimized out>
        args = <optimized out>
        filelist = 0x0
        node = <optimized out>
        fn = <optimized out>
        mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
        text = <optimized out>
        save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
        fil = <optimized out>
        dfil = <optimized out>
        is_cursh = <optimized out>
        type = <optimized out>
        do_exec = <optimized out>
        redir_err = 0
        i = <optimized out>
        htok = 0
        nullexec = <optimized out>
        assign = <optimized out>
        forked = 0
        postassigns = <optimized out>
        is_shfunc = 0
        is_builtin = <optimized out>
        is_exec = 0
        use_defpath = <optimized out>
        cflags = <optimized out>
        orig_cflags = 0
        checked = <optimized out>
        oautocont = <optimized out>
        redir = 0x0
        code = <optimized out>
        beg = 0x859bec
        varspc = <optimized out>
        assignspc = <optimized out>
        oxtrerr = 0x7fd0f658c540 <_IO_2_1_stderr_>
        newxtrerr = 0x0
#176 0x000000000042c02e in execpline2 (state=state@entry=0x7ffd491b66b0, pcode=pcode@entry=195, how=how@entry=18, input=0, output=0, last1=last1@entry=0) at ../../Src/exec.c:1748
        pid = <optimized out>
        pipes = {0, 0}
#177 0x000000000042c3f1 in execpline (state=state@entry=0x7ffd491b66b0, slcode=<optimized out>, how=how@entry=18, last1=0) at ../../Src/exec.c:1526
        ipipe = {0, 0}
        opipe = {0, 0}
        pj = 0
        newjob = 1
        old_simple_pline = 0
        slflags = 0
        code = 195
        lastwj = 19
        lpforked = 0
#178 0x000000000042dc4c in execlist (state=state@entry=0x7ffd491b66b0, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0) at ../../Src/exec.c:1284
        donedebug = 0
        donetrap = 0
        next = 0x859c4c
        code = <optimized out>
        ret = <optimized out>
        cj = 0
        csp = 0
        ltype = 18
        old_pline_level = 0
        old_list_pipe = 0
        old_list_pipe_job = 0
        old_list_pipe_text = 0x0
        oldlineno = 1
        oldnoerrexit = 0
#179 0x000000000042e060 in execode (p=p@entry=0x859d60, dont_change_job=dont_change_job@entry=1, exiting=exiting@entry=0, context=context@entry=0x496797 "shfunc") at ../../Src/exec.c:1075
        s = {prog = 0x859d60, pc = 0x859c4c, strs = 0x859c50 "\234\214BUFFER\234"}
        zsh_eval_context_len = 32
        alen = <optimized out>
#180 0x000000000042eb79 in runshfunc (prog=0x859d60, wrap=0x0, name=0x7fd0f70d3050 "history-search-or-expand-or-complete") at ../../Src/exec.c:5360
        cont = 1
        ouu = 5
        ou = 0x925fe0 "true"
#181 0x000000000042f4c5 in doshfunc (shfunc=shfunc@entry=0x859da0, doshargs=doshargs@entry=0x0, noreturnval=noreturnval@entry=1) at ../../Src/exec.c:5226
        _switch_oldheaps = 0x7fd0f70de000
        pptab = 0x7bbe30
        x = <optimized out>
        oargv0 = 0x7bbe10 "zsh"
        oldzoptind = 1
        oldlastval = 0
        oldoptcind = 0
        oldnumpipestats = 1
        ret = <optimized out>
        oldpipestats = 0x7fd0f70d3020
        saveopts = "\000\001\000\001\000\001\001\000\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\000\000\001\001\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\000\001\000\000\001\001\001\001\001\000\001\001\001\000\000\000\000\000\000\001\001\000\001\000\001\000\001\000\000\001\001\000\001\001\001\001\000\000\000\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\001\001\000\001\000\000\000\000\000\000\001\000\000\000\001\001\001\001\001\001\000\001", '\000' <repeats 14 times>, "\001\000\000\001\001\001\001\001\000\000\001\001\001\001\000\000\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\001\000\000\001\000\001"
        oldscriptname = 0x0
        name = <optimized out>
        flags = <optimized out>
        ooflags = <optimized out>
        fname = 0x7fd0f70dee08 "history-search-or-expand-or-complete"
        obreaks = 0
        ocontflag = 0
        oloops = 0
        saveemulation = 48
        restore_sticky = 0
        prog = <optimized out>
        fstack = {prev = 0x0, name = 0x7fd0f70d3050 "history-search-or-expand-or-complete", filename = 0x7fd0f70d3080 "/home/vlefevre/.zcomp", caller = 0x7fd0f70d3078 "zsh", flineno = 51, lineno = 1, tp = 1}
        oflags = 270848
        save_sticky = 0x0
        funcdepth = 7
        funcheap = 0x7fd0f70de000
#182 0x00007fd0ed7c0fd2 in execzlefunc (func=0x8433b0, args=args@entry=0x7fd0ed9f0228 <zlenoargs>, set_bindk=set_bindk@entry=0) at ../../../Src/Zle/zle_main.c:1401
        osc = 0
        osi = 11
        oxt = 0
        largs = 0x0
        shf = 0x859da0
        r = 0
        ret = 0
        remetafy = 0
        w = 0x859cf0
        save_bindk = 0x8433b0
#183 0x00007fd0ed7c14de in zlecore () at ../../../Src/Zle/zle_main.c:1072
No locals.
#184 0x00007fd0ed7c20e7 in zleread (lp=<optimized out>, rp=<optimized out>, flags=<optimized out>, context=<optimized out>, init=0x7fd0ed7dfbd7 "zle-line-init", finish=0x7fd0ed7dfbc7 "zle-line-finish") at ../../../Src/Zle/zle_main.c:1263
        s = <optimized out>
        bracket = 0x83ea20
        old_errno = 17
        tmout = <optimized out>
#185 0x0000000000444914 in zleentry (cmd=cmd@entry=1) at ../../Src/init.c:1528
        ret = 0x0
        ap = <error reading variable ap (Attempt to dereference a generic pointer.)>
#186 0x0000000000445dec in inputline () at ../../Src/input.c:293
        flags = <optimized out>
        ingetcline = <optimized out>
        ingetcpmptl = <optimized out>
        ingetcpmptr = <optimized out>
        context = <optimized out>
#187 ingetc () at ../../Src/input.c:226
        lastc = 32
#188 0x0000000000445fc5 in ingetc () at ../../Src/input.c:232
No locals.
#189 0x000000000043e22b in ihgetc () at ../../Src/hist.c:391
        c = <optimized out>
#190 0x000000000044f2ae in gettok () at ../../Src/lex.c:605
        c = <optimized out>
        d = <optimized out>
        peekfd = -1
        peek = <optimized out>
#191 zshlex () at ../../Src/lex.c:271
No locals.
#192 0x000000000044fe1e in zshlex () at ../../Src/lex.c:268
No locals.
#193 0x000000000046c996 in parse_event (endtok=endtok@entry=37) at ../../Src/parse.c:561
No locals.
#194 0x0000000000441866 in loop (toplevel=toplevel@entry=1, justonce=justonce@entry=0) at ../../Src/init.c:146
        prog = <optimized out>
        err = <optimized out>
        non_empty = 0
#195 0x0000000000444f8e in zsh_main (argc=<optimized out>, argv=<optimized out>) at ../../Src/init.c:1683
        errexit = 0
        t = <optimized out>
        runscript = <optimized out>
#196 0x00007fd0f620d610 in __libc_start_main (main=0x410660 <main>, argc=1, argv=0x7ffd491b7318, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffd491b7308) at libc-start.c:291
        result = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 7132236639046509181, 4261488, 140725829989136, 0, 0, -7133603080638782851, -7108043896739552643}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x494880 <__libc_csu_init>, 0x7ffd491b7318}, data = {prev = 0x0, cleanup = 0x0, canceltype = 4802688}}}
        not_first_call = <optimized out>
#197 0x0000000000410699 in _start ()
No symbol table info available.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 13:47 segfault in completion for configure Vincent Lefevre
@ 2016-03-11 14:32 ` Peter Stephenson
  2016-03-11 23:00   ` Bart Schaefer
  2016-03-12  2:56   ` Vincent Lefevre
  2016-03-11 22:13 ` Daniel Shahaf
  1 sibling, 2 replies; 27+ messages in thread
From: Peter Stephenson @ 2016-03-11 14:32 UTC (permalink / raw)
  To: zsh-workers

On Fri, 11 Mar 2016 14:47:29 +0100
Vincent Lefevre <vincent@vinc17.net> wrote:
> With zsh 5.2 under Debian/unstable, zsh sometimes crashes when
> I do:
> 
> cventin:~/software/mutt/mutt> ./configure --[TAB]

> #0  0x000000000046f315 in charrefinc (x=0x6c58b8 <patinput>, y=0x7fd0f708c3c4 <error: Cannot access memory at address 0x7fd0f708c3c4>, z=0x7ffd49191418) at ../../Src/pattern.c:1937
>         wc = 0 L'\000'
>         ret = <optimized out>

Looks like something's already gone wrong by this point, since

> #1  0x0000000000472a0a in patmatch (prog=prog@entry=0xa00948) at ../../Src/pattern.c:2718
>         savpatinput = 0x7fd0f708c3b8 <error: Cannot access memory at address 0x7fd0f708c3b8>

this has remembered the value of an apparently invalid previous value of
patinput up above... although that's not guaranteed, since it may
simply be pointing to tne end of memory, which is valid as long as it's
not dereferenced (I had this while debugging a few months ago).

Does valgrind give any information?

pws


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 13:47 segfault in completion for configure Vincent Lefevre
  2016-03-11 14:32 ` Peter Stephenson
@ 2016-03-11 22:13 ` Daniel Shahaf
  2016-03-12  2:58   ` Vincent Lefevre
  1 sibling, 1 reply; 27+ messages in thread
From: Daniel Shahaf @ 2016-03-11 22:13 UTC (permalink / raw)
  To: zsh-workers

Vincent Lefevre wrote on Fri, Mar 11, 2016 at 14:47:29 +0100:
> With zsh 5.2 under Debian/unstable, zsh sometimes crashes when
> I do:
> 
> cventin:~/software/mutt/mutt> ./configure --[TAB]

What's the minimal zshrc required to reproduce the crash?  Does it
happen with 'zsh -f' + 'autoload compinit && compinit'?


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 14:32 ` Peter Stephenson
@ 2016-03-11 23:00   ` Bart Schaefer
  2016-03-12  3:11     ` Vincent Lefevre
  2016-03-12  2:56   ` Vincent Lefevre
  1 sibling, 1 reply; 27+ messages in thread
From: Bart Schaefer @ 2016-03-11 23:00 UTC (permalink / raw)
  To: zsh-workers

On Mar 11,  2:32pm, Peter Stephenson wrote:
}
} On Fri, 11 Mar 2016 14:47:29 +0100
} Vincent Lefevre <vincent@vinc17.net> wrote:
} > With zsh 5.2 under Debian/unstable, zsh sometimes crashes when
} > I do:
} > 
} > cventin:~/software/mutt/mutt> ./configure --[TAB]
} 
} Looks like something's already gone wrong by this point

Yes, this is the kind of crash where the stack trace is probably not
very helpful, because frames have returned and/or new frames entered
an unknown number of times after the pointers went awry but before
the bad dereference that trips the fault.

Shot in the [mostly] dark:  I see TRAPCHLD embedded in one of the strings
in your backtrace.  Completion after "configure --" forks at least one
child process (says valgrind) so if you have a TRAPCHLD function it's
possible that it's corrupting something.  We do attempt signal handling
during pattern matching in order that deep recursive globs can be stopped
with SIGINT; it could be that needs a bit more regulation.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 14:32 ` Peter Stephenson
  2016-03-11 23:00   ` Bart Schaefer
@ 2016-03-12  2:56   ` Vincent Lefevre
  2016-03-12 16:15     ` Bart Schaefer
  1 sibling, 1 reply; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-12  2:56 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-11 14:32:02 +0000, Peter Stephenson wrote:
> Does valgrind give any information?

zsh doesn't work with valgrind:

cventin:~/software/mutt/mutt> valgrind --log-file=$HOME/vg.out zsh
zshenv r86554 [TERM=xterm-debian - charmap: UTF-8]
/home/vlefevre/.zshenv:1004: parse error near `\n'
zshrc r86676 [shell level: 2 - /bin/zsh5 5.2]
/home/vlefevre/.zshrc:133: parse error near `]]source'
cventin% 

Without using valgrind:

cventin:~/software/mutt/mutt> zsh
zshenv r86554 [TERM=xterm-debian - charmap: UTF-8]
zshrc r86676 [shell level: 2 - /bin/zsh5 5.2]
The tty is frozen
zshrc included: zfilesfct r79916 / zalias r87162 / zcomp r80686
cventin:~/software/mutt/mutt,2> 

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 22:13 ` Daniel Shahaf
@ 2016-03-12  2:58   ` Vincent Lefevre
  0 siblings, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-12  2:58 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-11 22:13:34 +0000, Daniel Shahaf wrote:
> Vincent Lefevre wrote on Fri, Mar 11, 2016 at 14:47:29 +0100:
> > With zsh 5.2 under Debian/unstable, zsh sometimes crashes when
> > I do:
> > 
> > cventin:~/software/mutt/mutt> ./configure --[TAB]
> 
> What's the minimal zshrc required to reproduce the crash?

It may be difficult to find out since it can take some time to
reproduce the bug.

> Does it happen with 'zsh -f' + 'autoload compinit && compinit'?

I haven't managed to reproduce it with that.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-11 23:00   ` Bart Schaefer
@ 2016-03-12  3:11     ` Vincent Lefevre
  2016-03-12 16:20       ` Bart Schaefer
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-12  3:11 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-11 15:00:56 -0800, Bart Schaefer wrote:
> Shot in the [mostly] dark:  I see TRAPCHLD embedded in one of the strings
> in your backtrace.  Completion after "configure --" forks at least one
> child process (says valgrind) so if you have a TRAPCHLD function it's
> possible that it's corrupting something.  We do attempt signal handling
> during pattern matching in order that deep recursive globs can be stopped
> with SIGINT; it could be that needs a bit more regulation.

FYI, here's my TRAPCHLD:

TRAPCHLD()
{
  if [[ -o interactive && -n $TTY ]] then
    updprompt
    typeset -g _trapchld_called=1
  fi
}

with:

updprompt()
{
  psvar[2]=""

  unset _trapchld_called
  local njobs jobstr
  njobs=$#jobstates
  [[ $njobs -gt 1 ]] && jobstr="s"
  [[ $njobs -ge 1 ]] && jobstr=" $njobs job$jobstr |"

  [[ -n $TTY && $TERM == (xterm*|dtterm|mlterm|rxvt*|screen*) ]] &&
    {
      [[ $TERM == screen* ]] || print -nP "\e]1;%m${ptsn:+[$ptsn]}:%.\x07"
      print -nP "\e]2;${jobstr}${WINTITLE:+ $WINTITLE |} %n@%m - %~ | %y\x07"
    } > /dev/tty

  [[ -n $_trapchld_called ]] && updprompt
}

I can't reproduce the bug if I remove:

  [[ -n $TTY && $TERM == (xterm*|dtterm|mlterm|rxvt*|screen*) ]] &&
    {
      [[ $TERM == screen* ]] || print -nP "\e]1;%m${ptsn:+[$ptsn]}:%.\x07"
      print -nP "\e]2;${jobstr}${WINTITLE:+ $WINTITLE |} %n@%m - %~ | %y\x07"
    } > /dev/tty

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-12  2:56   ` Vincent Lefevre
@ 2016-03-12 16:15     ` Bart Schaefer
  0 siblings, 0 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-12 16:15 UTC (permalink / raw)
  To: zsh-workers

On Mar 12,  3:56am, Vincent Lefevre wrote:
} Subject: Re: segfault in completion for configure
}
} On 2016-03-11 14:32:02 +0000, Peter Stephenson wrote:
} > Does valgrind give any information?
} 
} zsh doesn't work with valgrind:

I have not had any such issues.  However, I *don't* configure with the
--enable-zsh-valgrind option, so it's possible that the extra code that
this option adds to mem.c has broken something.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-12  3:11     ` Vincent Lefevre
@ 2016-03-12 16:20       ` Bart Schaefer
  2016-03-12 17:34         ` Bart Schaefer
  2016-03-13  2:26         ` Vincent Lefevre
  0 siblings, 2 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-12 16:20 UTC (permalink / raw)
  To: zsh-workers

On Mar 12,  4:11am, Vincent Lefevre wrote:
}
} On 2016-03-11 15:00:56 -0800, Bart Schaefer wrote:
} > [...] if you have a TRAPCHLD function it's
} > possible that it's corrupting something.
} 
} I can't reproduce the bug if I remove:
} 
}   [[ -n $TTY && $TERM == (xterm*|dtterm|mlterm|rxvt*|screen*) ]] &&
}     {
}       [[ $TERM == screen* ]] || print -nP "\e]1;%m${ptsn:+[$ptsn]}:%.\x07"
}       print -nP "\e]2;${jobstr}${WINTITLE:+ $WINTITLE |} %n@%m - %~ | %y\x07"
}     } > /dev/tty

What if you just remove the $TERM comparisons, i.e. leave the test of
$TTY and the print statement?

There are two static globals in pattern.c:

/* Flags used in both compilation and execution */
static int patflags;                /* flags passed down to patcompile */
static int patglobflags;  /* globbing flags & approx */

I'm guessing that re-entering pattern matching during the signal handler
is messing up those globals and leading eventually to the crash.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-12 16:20       ` Bart Schaefer
@ 2016-03-12 17:34         ` Bart Schaefer
  2016-03-13 21:58           ` Vincent Lefevre
  2016-03-13  2:26         ` Vincent Lefevre
  1 sibling, 1 reply; 27+ messages in thread
From: Bart Schaefer @ 2016-03-12 17:34 UTC (permalink / raw)
  To: zsh-workers

On Mar 12,  8:20am, Bart Schaefer wrote:
}
} I'm guessing that re-entering pattern matching during the signal handler
} is messing up those globals and leading eventually to the crash.

Try the patch below?  Unfortunately this is likely to slow Jesper's
massive glob a little more.  The right thing would be to factor out
the globals, but there are about 100 references to them so that's
going to be a large code change.


diff --git a/Src/pattern.c b/Src/pattern.c
index 72c7d97..fa9fefb 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -537,9 +537,14 @@ patcompile(char *exp, int inflags, char **endexp)
     Upat pscan;
     char *lng, *strp = NULL;
     Patprog p;
+    int savpatflags, savpatglobflags;
 
     queue_signals();
 
+    /* In case called from a signal handler before queuing */
+    savpatflags = patflags;
+    savpatglobflags = patglobflags;
+
     startoff = sizeof(struct patprog);
     /* Ensure alignment of start of program string */
     startoff = (startoff + sizeof(union upat) - 1) & ~(sizeof(union upat) - 1);
@@ -603,6 +608,8 @@ patcompile(char *exp, int inflags, char **endexp)
 	    /* No, do normal compilation. */
 	    strp = NULL;
 	    if (patcompswitch(0, &flags) == 0) {
+		patflags = savpatflags;
+		patglobflags = savpatglobflags;
 		unqueue_signals();
 		return NULL;
 	    }
@@ -738,6 +745,8 @@ patcompile(char *exp, int inflags, char **endexp)
     if (endexp)
 	*endexp = patparse;
 
+    patflags = savpatflags;
+    patglobflags = savpatglobflags;
     unqueue_signals();
     return p;
 }
@@ -2259,6 +2268,9 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
     char *progstr = (char *)prog + prog->startoff;
     struct patstralloc patstralloc_struct;
 
+    /* In case called from a signal handler */
+    int savpatflags = patflags, savpatglobflags = patglobflags;
+
     if (nump) {
 	maxnpos = *nump;
 	*nump = 0;
@@ -2302,7 +2314,7 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 	 * Either we are testing against a pure string,
 	 * or we can match anything at all.
 	 */
-	int ret, pstrlen;
+	int pstrlen;
 	char *pstr;
 	if (patstralloc->alloced)
 	{
@@ -2404,8 +2416,6 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 		}
 	    }
 	}
-
-	return ret;
     } else {
 	int q = queue_signal_level();
 
@@ -2441,6 +2451,8 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 	    }
 	}
 	if (!ret) {
+	    patflags = savpatflags;
+	    patglobflags = savpatglobflags;
 	    return 0;
 	}
 
@@ -2596,9 +2608,11 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 	    ret = 0;
 
 	restore_queue_signals(q);
-
-	return ret;
     }
+
+    patflags = savpatflags;
+    patglobflags = savpatglobflags;
+    return ret;
 }
 
 /*


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-12 16:20       ` Bart Schaefer
  2016-03-12 17:34         ` Bart Schaefer
@ 2016-03-13  2:26         ` Vincent Lefevre
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-13  2:26 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-12 08:20:29 -0800, Bart Schaefer wrote:
> On Mar 12,  4:11am, Vincent Lefevre wrote:
> }
> } On 2016-03-11 15:00:56 -0800, Bart Schaefer wrote:
> } > [...] if you have a TRAPCHLD function it's
> } > possible that it's corrupting something.
> } 
> } I can't reproduce the bug if I remove:
> } 
> }   [[ -n $TTY && $TERM == (xterm*|dtterm|mlterm|rxvt*|screen*) ]] &&
> }     {
> }       [[ $TERM == screen* ]] || print -nP "\e]1;%m${ptsn:+[$ptsn]}:%.\x07"
> }       print -nP "\e]2;${jobstr}${WINTITLE:+ $WINTITLE |} %n@%m - %~ | %y\x07"
> }     } > /dev/tty
> 
> What if you just remove the $TERM comparisons, i.e. leave the test of
> $TTY and the print statement?

I can't reproduce the crash if I remove these comparisons.
I'll try the patch tomorrow.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-12 17:34         ` Bart Schaefer
@ 2016-03-13 21:58           ` Vincent Lefevre
  2016-03-15  2:43             ` Bart Schaefer
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-13 21:58 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-12 09:34:20 -0800, Bart Schaefer wrote:
> Try the patch below?

I can reproduce the crash with this patch.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-13 21:58           ` Vincent Lefevre
@ 2016-03-15  2:43             ` Bart Schaefer
  2016-03-17 13:43               ` Vincent Lefevre
                                 ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-15  2:43 UTC (permalink / raw)
  To: zsh-workers

On Mar 13, 10:58pm, Vincent Lefevre wrote:
} Subject: Re: segfault in completion for configure
}
} On 2016-03-12 09:34:20 -0800, Bart Schaefer wrote:
} > Try the patch below?
} 
} I can reproduce the crash with this patch.

Well, foo.

Can you repeat it if you configure with --disable-multibyte ?  Sorry for
so many trials, just trying to narrow it down to things that might be
messed up by re-entering matching (as opposed to pattern compilation).


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-15  2:43             ` Bart Schaefer
@ 2016-03-17 13:43               ` Vincent Lefevre
  2016-03-17 15:15               ` Vincent Lefevre
  2016-03-17 15:24               ` Vincent Lefevre
  2 siblings, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-17 13:43 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-14 19:43:23 -0700, Bart Schaefer wrote:
> Can you repeat it if you configure with --disable-multibyte ?

Same problem with zsh 5.2 configured with --disable-multibyte,
whether I use the patch or not.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-15  2:43             ` Bart Schaefer
  2016-03-17 13:43               ` Vincent Lefevre
@ 2016-03-17 15:15               ` Vincent Lefevre
  2016-03-17 18:13                 ` Bart Schaefer
  2016-03-17 15:24               ` Vincent Lefevre
  2 siblings, 1 reply; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-17 15:15 UTC (permalink / raw)
  To: zsh-workers

With a lot of [[ $TERM == screen ]] as the only comparison, I can get:

_arguments:138: fatal error: out of heap memory

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-15  2:43             ` Bart Schaefer
  2016-03-17 13:43               ` Vincent Lefevre
  2016-03-17 15:15               ` Vincent Lefevre
@ 2016-03-17 15:24               ` Vincent Lefevre
  2016-03-17 18:15                 ` Bart Schaefer
  2 siblings, 1 reply; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-17 15:24 UTC (permalink / raw)
  To: zsh-workers

With:

updprompt()
{
  psvar[2]=""

  unset _trapchld_called
  local njobs jobstr
  njobs=$#jobstates
  [[ $njobs -gt 1 ]] && jobstr="s"
  [[ $njobs -ge 1 ]] && jobstr=" $njobs job$jobstr |"

  echo 1 > /dev/tty

  [[ -n $TTY && $TERM == (xterm*|dtterm|mlterm|rxvt*|screen*) ]] &&
    {
      [[ $TERM == screen* ]] || print -nP "\e]1;%m${ptsn:+[$ptsn]}:%.\x07"
      print -nP "\e]2;${jobstr}${WINTITLE:+ $WINTITLE |} %n@%m - %~ | %y\x07"
    } > /dev/tty

  echo 2 > /dev/tty
}

TRAPCHLD()
{
  echo SIGCHLD 1 > /dev/tty
  if [[ -o interactive && -n $TTY ]] then
    updprompt
    typeset -g _trapchld_called=1
  fi
  echo SIGCHLD 2 > /dev/tty
}

I get after "./configure --[Tab]":

cventin:~/software/mutt/mutt,2> ./configure --SIGCHLD 1
1
2
SIGCHLD 2
zsh: segmentation fault (core dumped)  ~/opt/zsh/bin/zsh

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 15:15               ` Vincent Lefevre
@ 2016-03-17 18:13                 ` Bart Schaefer
  2016-03-17 19:55                   ` Vincent Lefevre
  2016-03-17 19:59                   ` Vincent Lefevre
  0 siblings, 2 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-17 18:13 UTC (permalink / raw)
  To: zsh-workers

On Mar 17,  4:15pm, Vincent Lefevre wrote:
}
} With a lot of [[ $TERM == screen ]] as the only comparison, I can get:

What does "a lot" mean here?

} _arguments:138: fatal error: out of heap memory

That's opt=${opt##[[:space:]]##} so it seems to indicate that we've gone
into an infinite loop, but the underlying cause (global pattern matching
state being messed up by re-entering through a signal handler) is still
the most likely culprit.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 15:24               ` Vincent Lefevre
@ 2016-03-17 18:15                 ` Bart Schaefer
  2016-03-17 18:24                   ` Peter Stephenson
  2016-03-20  2:07                   ` Bart Schaefer
  0 siblings, 2 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-17 18:15 UTC (permalink / raw)
  To: zsh-workers

On Mar 17,  4:24pm, Vincent Lefevre wrote:
}
} TRAPCHLD()
} {
}   echo SIGCHLD 1 > /dev/tty
}   if [[ -o interactive && -n $TTY ]] then
}     updprompt
}     typeset -g _trapchld_called=1
}   fi
}   echo SIGCHLD 2 > /dev/tty
} }
} 
} I get after "./configure --[Tab]":
} 
} cventin:~/software/mutt/mutt,2> ./configure --SIGCHLD 1
} 1
} 2
} SIGCHLD 2
} zsh: segmentation fault (core dumped)  ~/opt/zsh/bin/zsh

Yeah, nothing really new here, this is exactly what I would expect
to see:  The hander returns and thereafter pattern matching is messed
up and crashes when it tries to pick up where it left off.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 18:15                 ` Bart Schaefer
@ 2016-03-17 18:24                   ` Peter Stephenson
  2016-03-17 20:09                     ` Daniel Shahaf
  2016-03-20  2:07                   ` Bart Schaefer
  1 sibling, 1 reply; 27+ messages in thread
From: Peter Stephenson @ 2016-03-17 18:24 UTC (permalink / raw)
  To: zsh-workers

On Thu, 17 Mar 2016 11:15:15 -0700
Bart Schaefer <schaefer@brasslantern.com> wrote:
> Yeah, nothing really new here, this is exactly what I would expect
> to see:  The hander returns and thereafter pattern matching is messed
> up and crashes when it tries to pick up where it left off.

We could add a variable that triggers an abort when the signal handler
runs in pattern matching, but does that tell us anything beyond, er, it
was running in pattern matching?  If not, what sort of information could
we get from this?  Dump some state when we return from the signal
handler and detect we've been in it?  Or is that if we know we've been
int he signal handler at that point we already know the place where we
needed to queue signals...

I don't think I've actually suggested anything.

pws


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 18:13                 ` Bart Schaefer
@ 2016-03-17 19:55                   ` Vincent Lefevre
  2016-03-17 19:59                   ` Vincent Lefevre
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-17 19:55 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-17 11:13:45 -0700, Bart Schaefer wrote:
> On Mar 17,  4:15pm, Vincent Lefevre wrote:
> }
> } With a lot of [[ $TERM == screen ]] as the only comparison, I can get:
> 
> What does "a lot" mean here?

I don't remember exactly, but several dozens.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 18:13                 ` Bart Schaefer
  2016-03-17 19:55                   ` Vincent Lefevre
@ 2016-03-17 19:59                   ` Vincent Lefevre
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-03-17 19:59 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-17 11:13:45 -0700, Bart Schaefer wrote:
> That's opt=${opt##[[:space:]]##} so it seems to indicate that we've gone
> into an infinite loop, but the underlying cause (global pattern matching
> state being messed up by re-entering through a signal handler) is still
> the most likely culprit.

Could there be some logging to know what happens internally?

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 18:24                   ` Peter Stephenson
@ 2016-03-17 20:09                     ` Daniel Shahaf
  2016-03-17 21:49                       ` Bart Schaefer
  0 siblings, 1 reply; 27+ messages in thread
From: Daniel Shahaf @ 2016-03-17 20:09 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: zsh-workers

Peter Stephenson wrote on Thu, Mar 17, 2016 at 18:24:06 +0000:
> Or is that if we know we've been int he signal handler at that point
> we already know the place where we needed to queue signals...

We could convert the pattern matching globals to macros that execute
code whenever the globals are accessed:

diff --git a/Src/pattern.c b/Src/pattern.c
index 72c7d97..a4fb24f 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -303,6 +303,12 @@ static long patalloc;              /* size allocated for same */
 static int patflags;               /* flags passed down to patcompile */
 static int patglobflags;  /* globbing flags & approx */
 
+#define patflags (f(), patflags)
+void f(void)
+{
+    /* ... */
+}
+
 /*
  * Increment pointer to metafied multibyte string.
  */

Now, f() can assert() some invariant, or check if SIGWINCH had been
delivered (and if so, drop into a gdb breakpoint), etc...

I'm proposing this just as a means of debugging for this one problem,
not as a permanent change.

Cheers,

Daniel


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 20:09                     ` Daniel Shahaf
@ 2016-03-17 21:49                       ` Bart Schaefer
  0 siblings, 0 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-17 21:49 UTC (permalink / raw)
  To: Daniel Shahaf; +Cc: Peter Stephenson, Zsh hackers list

On Thu, Mar 17, 2016 at 1:09 PM, Daniel Shahaf <d.s@daniel.shahaf.name> wrote:
> Peter Stephenson wrote on Thu, Mar 17, 2016 at 18:24:06 +0000:
>> Or is that if we know we've been int he signal handler at that point
>> we already know the place where we needed to queue signals...
>
> We could convert the pattern matching globals to macros that execute
> code whenever the globals are accessed:

There are a number of globals, and the symptoms are such that I don't
think the problem is limited to the ones that are commented as being
used by both compilation and matching.  It acts as though one of the
data structures or pointers has been moved and not restored.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-17 18:15                 ` Bart Schaefer
  2016-03-17 18:24                   ` Peter Stephenson
@ 2016-03-20  2:07                   ` Bart Schaefer
  2016-03-21 10:56                     ` Peter Stephenson
  2016-04-05 12:49                     ` Vincent Lefevre
  1 sibling, 2 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-20  2:07 UTC (permalink / raw)
  To: zsh-workers

On Mar 17, 11:15am, Bart Schaefer wrote:
}
} Yeah, nothing really new here, this is exactly what I would expect
} to see:  The hander returns and thereafter pattern matching is messed
} up and crashes when it tries to pick up where it left off.

Well, I think I've isolated this, but I don't know what to do about it.

The set of globals that are getting messed up are these:

/*
 * Run a pattern.
 */
static char *patinstart;	/* Start of input string */
static char *patinend;		/* End of input string */
static char *patinput;		/* String input pointer */
static char *patinpath;		/* Full path for use with ~ exclusions */
static int   patinlen;		/* Length of last successful match.
				 * Includes count of Meta characters.
				 */

static char *patbeginp[NSUBEXP];	/* Pointer to backref beginnings */
static char *patendp[NSUBEXP];		/* Pointer to backref ends */
static int parsfound;			/* parentheses (with backrefs) found */


This set is all referenced from pattryrefs() and other functions that it
calls.  The problem is that they also describe the state of backrefs, so
it's difficult to save/restore them such that $match et al. remain sane
across a signal handler (and when not sane, they point off into unknown
territory and crashing ensues).

The problem is that it's exactly during the time that these globals are
volatile that we want to allow signal handling, so that a deep recursive
glob or pathological pattern match can be interrupted [see patmatch(),
"while (scan && !errflag)"].

The patch below crams all those globals into a struct so they can be
saved/restored as one, and then tries pushing the signal queue management
down into patmatch() from pattryrefs().  A side-effect of this patch is
that the following is no longer guaranteed to work:

    typeset -i trap_handled;
    TRAPUSR2() {
      setopt localoptions extendedglob
      [[ $somestring = (#b)$~somepattern ]]
      trap_handled=1
    }
    TRAPUSR1() {
      [[ $TERM = screen ]] && print $something
    }
    while true; do
      if ((trap_handled)); then
       trap_handled=0
       print $match[0]	# This may not be the backref from TRAPUSR2
      fi
    done

Specifically, if the signals arrive in order USR1 USR2 such that USR2
is handled during the [[ ]] expression in TRAPUSR1, then the state from
TRAPUSR2 will be discarded.  I don't know if/how we ought to document.

Of course if this DOESN'T solve Vincent's crash, then all of the above
is moot because I've mis-diagnosed again.


diff --git a/Src/pattern.c b/Src/pattern.c
index 72c7d97..4e2f236 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -1838,7 +1838,8 @@ pattail(long p, long val)
 /* do pattail, but on operand of first argument; nop if operandless */
 
 /**/
-static void patoptail(long p, long val)
+static void
+patoptail(long p, long val)
 {
     Upat ptr = (Upat)patout + p;
     int op = P_OP(ptr);
@@ -1854,19 +1855,34 @@ static void patoptail(long p, long val)
 /*
  * Run a pattern.
  */
-static char *patinstart;	/* Start of input string */
-static char *patinend;		/* End of input string */
-static char *patinput;		/* String input pointer */
-static char *patinpath;		/* Full path for use with ~ exclusions */
-static int   patinlen;		/* Length of last successful match.
+struct rpat {
+    char *patinstart;		/* Start of input string */
+    char *patinend;		/* End of input string */
+    char *patinput;		/* String input pointer */
+    char *patinpath;		/* Full path for use with ~ exclusions */
+    int   patinlen;		/* Length of last successful match.
 				 * Includes count of Meta characters.
 				 */
 
-static char *patbeginp[NSUBEXP];	/* Pointer to backref beginnings */
-static char *patendp[NSUBEXP];		/* Pointer to backref ends */
-static int parsfound;			/* parentheses (with backrefs) found */
+    char *patbeginp[NSUBEXP];	/* Pointer to backref beginnings */
+    char *patendp[NSUBEXP];	/* Pointer to backref ends */
+    int parsfound;		/* parentheses (with backrefs) found */
+
+    int globdots;		/* Glob initial dots? */
+};
+
+static struct rpat pattrystate;
+
+#define patinstart	(pattrystate.patinstart)
+#define patinend	(pattrystate.patinend)
+#define patinput	(pattrystate.patinput)
+#define patinpath	(pattrystate.patinpath)
+#define patinlen	(pattrystate.patinlen)
+#define patbeginp	(pattrystate.patbeginp)
+#define patendp		(pattrystate.patendp)
+#define parsfound	(pattrystate.parsfound)
+#define globdots	(pattrystate.globdots)
 
-static int globdots;			/* Glob initial dots? */
 
 /*
  * Character functions operating on unmetafied strings.
@@ -2302,7 +2318,7 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 	 * Either we are testing against a pure string,
 	 * or we can match anything at all.
 	 */
-	int ret, pstrlen;
+	int pstrlen;
 	char *pstr;
 	if (patstralloc->alloced)
 	{
@@ -2404,11 +2420,7 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 		}
 	    }
 	}
-
-	return ret;
     } else {
-	int q = queue_signal_level();
-
 	/*
 	 * Test for a `must match' string, unless we're scanning for a match
 	 * in which case we don't need to do this each time.
@@ -2440,9 +2452,8 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 		    ret = 0;
 	    }
 	}
-	if (!ret) {
+	if (!ret)
 	    return 0;
-	}
 
 	patglobflags = prog->globflags;
 	if (!(patflags & PAT_FILE)) {
@@ -2454,8 +2465,6 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 
 	patinput = patinstart;
 
-	dont_queue_signals();
-
 	if (patmatch((Upat)progstr)) {
 	    /*
 	     * we were lazy and didn't save the globflags if an exclusion
@@ -2594,11 +2603,9 @@ pattryrefs(Patprog prog, char *string, int stringlen, int unmetalenin,
 	    ret = 1;
 	} else
 	    ret = 0;
-
-	restore_queue_signals(q);
-
-	return ret;
     }
+
+    return ret;
 }
 
 /*
@@ -2674,6 +2681,26 @@ patmatch(Upat prog)
     int savglobflags, op, no, min, fail = 0, saverrsfound;
     zrange_t from, to, comp;
     patint_t nextch;
+    int q = queue_signal_level();
+
+    /*
+     * To avoid overhead of saving state if there are no queued signals
+     * waiting, we pierce the signals.h veil and examine queue state.
+     */
+#define check_for_signals() do if (queue_front != queue_rear) { \
+	    int savpatflags = patflags, savpatglobflags = patglobflags; \
+            char *savexactpos = exactpos, *savexactend = exactend; \
+	    struct rpat savpattrystate = pattrystate; \
+	    dont_queue_signals(); \
+	    restore_queue_signals(q); \
+	    exactpos = savexactpos; \
+	    exactend = savexactend; \
+	    patflags = savpatflags; \
+	    patglobflags = savpatglobflags; \
+	    pattrystate = savpattrystate; \
+	} while (0)
+
+    check_for_signals();
 
     while  (scan && !errflag) {
 	next = PATNEXT(scan);
@@ -3508,6 +3535,9 @@ patmatch(Upat prog)
 	}
 
 	scan = next;
+
+	/* Allow handlers to run once per loop */
+	check_for_signals();
     }
 
     return 0;


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-20  2:07                   ` Bart Schaefer
@ 2016-03-21 10:56                     ` Peter Stephenson
  2016-03-21 15:26                       ` Bart Schaefer
  2016-04-05 12:49                     ` Vincent Lefevre
  1 sibling, 1 reply; 27+ messages in thread
From: Peter Stephenson @ 2016-03-21 10:56 UTC (permalink / raw)
  To: zsh-workers

On Sat, 19 Mar 2016 19:07:57 -0700
Bart Schaefer <schaefer@brasslantern.com> wrote:
> Specifically, if the signals arrive in order USR1 USR2 such that USR2
> is handled during the [[ ]] expression in TRAPUSR1, then the state from
> TRAPUSR2 will be discarded.  I don't know if/how we ought to document.

Are you simply worried that a pattern match that happens asynchronously
might not leave behind $MATCH / $match etc. values after return owing to
other asynchronous goings on with pattern matching?  I don't think
that's an issue.  I'm sure there must be other examples of this.

pws


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-21 10:56                     ` Peter Stephenson
@ 2016-03-21 15:26                       ` Bart Schaefer
  0 siblings, 0 replies; 27+ messages in thread
From: Bart Schaefer @ 2016-03-21 15:26 UTC (permalink / raw)
  To: zsh-workers

On Mar 21, 10:56am, Peter Stephenson wrote:
}
} Are you simply worried that a pattern match that happens
} asynchronously might not leave behind $MATCH / $match etc. values
} after return owing to other asynchronous goings on with pattern
} matching?

The point is that a pattern match that happens asynchronously might not
leave behind $MATCH / $match etc. values owing to other pattern matches
going on, period, whether synchronous or async.  Two signal handlers in
the example was just to set up a way to get into the situation; a glob
that takes several seconds to complete might just as easily do it, but
is hard to invent for purposes of example code.

I'm the tiniest bit worried that there's a way $MATCH et al. might be
left pointing at garbage memory, but I don't really think so.

} I don't think that's an issue.

I don't think it's an issue either, but it's going to do the potentially
unexpected thing more consistently now, so I wondered if it should be
documented.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: segfault in completion for configure
  2016-03-20  2:07                   ` Bart Schaefer
  2016-03-21 10:56                     ` Peter Stephenson
@ 2016-04-05 12:49                     ` Vincent Lefevre
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Lefevre @ 2016-04-05 12:49 UTC (permalink / raw)
  To: zsh-workers

On 2016-03-19 19:07:57 -0700, Bart Schaefer wrote:
> The patch below crams all those globals into a struct so they can be
> saved/restored as one, and then tries pushing the signal queue management
> down into patmatch() from pattryrefs().  A side-effect of this patch is
> that the following is no longer guaranteed to work:
> 
>     typeset -i trap_handled;
>     TRAPUSR2() {
>       setopt localoptions extendedglob
>       [[ $somestring = (#b)$~somepattern ]]
>       trap_handled=1
>     }
>     TRAPUSR1() {
>       [[ $TERM = screen ]] && print $something
>     }
>     while true; do
>       if ((trap_handled)); then
>        trap_handled=0
>        print $match[0]	# This may not be the backref from TRAPUSR2
>       fi
>     done
> 
> Specifically, if the signals arrive in order USR1 USR2 such that USR2
> is handled during the [[ ]] expression in TRAPUSR1, then the state from
> TRAPUSR2 will be discarded.  I don't know if/how we ought to document.
> 
> Of course if this DOESN'T solve Vincent's crash, then all of the above
> is moot because I've mis-diagnosed again.

Sorry for the late reply, I was very busy. It seems that it solves
the crash! What I did is:

1. Compile and install zsh 5.2.
2. Check that the crash is still reproducible, and it is.
3. Apply this patch.
4. Recompile and reinstall zsh.
5. Test whether the crash is reproducible, and I couldn't reproduce it.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2016-04-05 13:08 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-11 13:47 segfault in completion for configure Vincent Lefevre
2016-03-11 14:32 ` Peter Stephenson
2016-03-11 23:00   ` Bart Schaefer
2016-03-12  3:11     ` Vincent Lefevre
2016-03-12 16:20       ` Bart Schaefer
2016-03-12 17:34         ` Bart Schaefer
2016-03-13 21:58           ` Vincent Lefevre
2016-03-15  2:43             ` Bart Schaefer
2016-03-17 13:43               ` Vincent Lefevre
2016-03-17 15:15               ` Vincent Lefevre
2016-03-17 18:13                 ` Bart Schaefer
2016-03-17 19:55                   ` Vincent Lefevre
2016-03-17 19:59                   ` Vincent Lefevre
2016-03-17 15:24               ` Vincent Lefevre
2016-03-17 18:15                 ` Bart Schaefer
2016-03-17 18:24                   ` Peter Stephenson
2016-03-17 20:09                     ` Daniel Shahaf
2016-03-17 21:49                       ` Bart Schaefer
2016-03-20  2:07                   ` Bart Schaefer
2016-03-21 10:56                     ` Peter Stephenson
2016-03-21 15:26                       ` Bart Schaefer
2016-04-05 12:49                     ` Vincent Lefevre
2016-03-13  2:26         ` Vincent Lefevre
2016-03-12  2:56   ` Vincent Lefevre
2016-03-12 16:15     ` Bart Schaefer
2016-03-11 22:13 ` Daniel Shahaf
2016-03-12  2:58   ` Vincent Lefevre

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).