* Speed improvement patch for __git_files and __git_files_relative
@ 2011-05-06 13:03 Nikolai Weibull
2011-05-11 13:27 ` Frank Terbeck
2011-05-17 12:55 ` Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
0 siblings, 2 replies; 8+ messages in thread
From: Nikolai Weibull @ 2011-05-06 13:03 UTC (permalink / raw)
To: Zsh Workers
[-- Attachment #1: Type: text/plain, Size: 477 bytes --]
Hi!
I’ve now put together a patch for __git_files and
__git_files_relative. __git_files is a lot faster than previous
versions and __git_files_relative should be a lot faster too, now that
it only uses substitutions. (Well, there’s a for loop that iterates
over the file names to determine the common path prefix, but I see no
way of avoiding it.)
It would be great if this could make it into the 4.3.12 release, so
please give it a try as soon as possible.
[-- Attachment #2: __git_files.patch --]
[-- Type: application/octet-stream, Size: 4144 bytes --]
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index 4664cfa..70992de 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -623,7 +623,11 @@ _git-diff () {
case $CURRENT in
(1)
if [[ -n ${opt_args[(I)--]} ]]; then
- __git_changed-in-working-tree_files && ret=0
+ if [[ -n ${opt_args[(I)--cached|--staged]} ]]; then
+ __git_changed-in-index_files && ret=0
+ else
+ __git_changed-in-working-tree_files && ret=0
+ fi
else
local files_alt='files::__git_changed-in-working-tree_files'
@@ -5146,45 +5150,32 @@ __git_notes_refs () {
(( $+functions[__git_files_relative] )) ||
__git_files_relative () {
- local rawfiles files file f_parts prefix p_parts tmp
+ local files file f_parts prefix p_parts tmp
prefix=$(_call_program gitprefix git rev-parse --show-prefix 2>/dev/null)
__git_command_successful $pipestatus || return
- # Empty prefix, no modifications
if (( $#prefix == 0 )); then
print $1
return
fi
- rawfiles=(${(0)1})
files=()
- # Now we assume that we've given "absolute" paths list with "root"
- # being repository top directory. $prefix is also "absolute" path.
- for file in $rawfiles; do
- # Collapse "/./" and "//", strip "/." and "/" from tail (I know,
- # this is a bit paranoid).
- f_parts=(${(s:/:)"${${${${file//\/\///}//\/.\///}%%/.}%%/}"})
- p_parts=(${(s:/:)"${${${${prefix//\/\///}//\/.\///}%%/.}%%/}"})
- tmp=()
-
- # Strip common path prefix.
- while (( $#f_parts > 0 )) && (( $#p_parts > 0 )) && [[ $f_parts[1] == $p_parts[1] ]]; do
- f_parts[1]=()
- p_parts[1]=()
- done
-
- # If prefix still not empty, ascend up.
- while (( $#p_parts > 0 )); do
- tmp+=..
- p_parts[1]=()
+ # Collapse “//” and “/./” into “/”. Strip any remaining “/.” and “/”.
+ for file in ${${${${${(0)1}//\/\///}//\/.\///}%/.}%/}; do
+ integer i n
+ (( n = $#file > $#prefix ? $#file : $#prefix ))
+ for (( i = 1; i <= n; i++ )); do
+ if [[ $file[i] != $prefix[i] ]]; then
+ while (( i > 0 )) && [[ $file[i-1] != / ]]; do
+ (( i-- ))
+ done
+ break
+ fi
done
- # Add remaining path.
- tmp+=($f_parts)
-
- files+=${(j:/:)tmp}
+ files+=${(l@${#prefix[i,-1]//[^\/]}*3@@../@)}${file[i,-1]}
done
print ${(pj:\0:)files}
@@ -5192,27 +5183,25 @@ __git_files_relative () {
(( $+functions[__git_files] )) ||
__git_files () {
- local compadd_opts opts tag description gitdir gitcdup files expl
+ local compadd_opts opts tag description gitcdup gitprefix files expl
zparseopts -D -E -a compadd_opts V: J: 1 2 n f X: M: P: S: r: R: q F:
zparseopts -D -E -a opts -- -cached -deleted -modified -others -ignored -unmerged -killed x+: --exclude+:
tag=$1 description=$2; shift 2
- gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
+ gitcdup=$(_call_program gitcdup git rev-parse --show-cdup 2>/dev/null)
__git_command_successful $pipestatus || return
- gitcdup=$(_call_program gitcdup git rev-parse --show-cdup 2>/dev/null)
+ gitprefix=$(_call_program gitprefix git rev-parse --show-prefix 2>/dev/null)
__git_command_successful $pipestatus || return
- opts+='--exclude-per-directory=.gitignore'
- [[ -f "$gitdir/info/exclude" ]] && opts+="--exclude-from=$gitdir/info/exclude"
+ # TODO: --directory should probably be added to $opts when --others is given.
- files=$(_call_program files git ls-files -z --full-name $opts -- $gitcdup 2>/dev/null)
- __git_command_successful $pipestatus || return
- files=(${(0)"$(__git_files_relative $files)"})
+ local pref=$gitcdup$gitprefix$PREFIX
+ files=(${(0)"$(_call_program files git ls-files -z --exclude-standard $opts -- ${pref:+$pref\*} 2>/dev/null)"})
__git_command_successful $pipestatus || return
- _wanted $tag expl $description _multi_parts $compadd_opts - / files
+ _wanted $tag expl $description _multi_parts -f $compadd_opts - / files
}
(( $+functions[__git_cached_files] )) ||
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Speed improvement patch for __git_files and __git_files_relative
2011-05-06 13:03 Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
@ 2011-05-11 13:27 ` Frank Terbeck
2011-05-11 13:44 ` Mikael Magnusson
2011-05-11 14:09 ` Completion crash owing to bad allocation Peter Stephenson
2011-05-17 12:55 ` Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
1 sibling, 2 replies; 8+ messages in thread
From: Frank Terbeck @ 2011-05-11 13:27 UTC (permalink / raw)
To: zsh-workers
Nikolai Weibull wrote:
> I’ve now put together a patch for __git_files and
> __git_files_relative. __git_files is a lot faster than previous
> versions and __git_files_relative should be a lot faster too, now that
> it only uses substitutions. (Well, there’s a for loop that iterates
> over the file names to determine the common path prefix, but I see no
> way of avoiding it.)
>
> It would be great if this could make it into the 4.3.12 release, so
> please give it a try as soon as possible.
Alright, I've been trying this. The speed improvement in my linux
kernel clone is quite impressive.
I'm running into a segfault, though. The git repository is located in
`/tmp/linux-2.6'. I've changed a file (fs/adfs/dir.c) slightly and I'm
doing this:
% git add f<tab>
% git add fs/<tab>
% git add fs/adfs/<tab>
And that's where the shell crashes. It's a build of today's HEAD.
The kernel repository was cloned from this URI:
<git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git>
I don't have the time to look into this right now, so here's a back
trace:
[...]
Core was generated by `zsh'.
Program terminated with signal 11, Segmentation fault.
#0 __strlen_sse2 () at ../sysdeps/i386/i686/multiarch/strlen.S:99
in ../sysdeps/i386/i686/multiarch/strlen.S
(gdb) #0 __strlen_sse2 () at ../sysdeps/i386/i686/multiarch/strlen.S:99
No locals.
#1 0x080bd2bd in ztrdup (s=0xb70b63e0 <Address 0xb70b63e0 out of bounds>) at string.c:52
t = 0x908c358 "fs/adfs/"
#2 0xb713e7ff in dupmatch (m=0xb70da0e8, nbeg=0, nend=0) at compcore.c:3232
r = 0x9119960
#3 0xb713ed4c in permmatches (last=0) at compcore.c:3346
g = 0xb70d9e88
n = 0x91198e8
opm = 0x9117ea0
p = 0x911fc98
q = 0xb70bac28
ep = 0x809352e
eq = 0x12
e = 0x0
o = 0x0
mlist = 0xb70d9f18
fi = 0
nn = 1
nl = 0
ll = 0
gn = 2
mn = 1
rn = 0
ofi = 1
#4 0xb71347ae in get_nmatches (pm=0x9084fb0) at complete.c:1267
No locals.
#5 0x080a34fe in getstrvalue (v=0xbf994c9c) at params.c:1957
s = 0xbf995534 ""
ss = 0xbf994a78
buf = '\000' <repeats 16 times>"\263, \347\204\065\000\000\000\000HJ\231\277\357\252\a\b\250\272\021\t\030\254\v\267\030\254\v\267", '\000' <repeats 12 times>, "\b\000\000\000\260O\b\t@7\017\b"
#6 0x080a17a4 in getarg (str=0xbf994b9c, inv=0xbf994ba0, v=0xbf994c9c, a2=0, w=0xbf994b90, prevcharlen=0xbf994b84, nextcharlen=0xbf994b80) at params.c:1286
lastcharlen = 1
hasbeg = 0
word = 0
rev = 0
ind = 0
down = 0
l = 184
i = 0
ishash = 1
keymatch = 0
needtok = 0
arglen = 180
len = -1217985584
s = 0xb70bac18 "nmatches"
sep = 0x0
t = 0xb70babef "\220\232"
sav = -73 '\267'
d = 0xbf994ad4 "\364\357f\267\240\003g\267\064U\231\277\357\253\v\267\275\313Y\220\001"
ta = 0xb76703a0
p = 0xbf995534
tt = 0xb70babef "\220\232"
c = -112 '\220'
num = 1
beg = 0
r = 0
quote_arg = 0
pprog = 0x0
#7 0x080a2b4e in getindex (pptr=0xbf994bf4, v=0xbf994c9c, flags=256) at params.c:1674
we = -1
dummy = 580117842861050792
startprevlen = 1
startnextlen = 1
start = -1080472649
end = -1080472616
inv = 0
s = 0xb70babef "\220\232"
tbrack = 0xb70babef "\220\232"
#8 0x080a31d4 in fetchvalue (v=0xbf994c9c, pptr=0xbf994cc0, bracks=1, flags=256) at params.c:1890
pm = 0x911b858
isvarat = 0
s = 0xb70babe6 "[nmatches\220\232"
t = 0xb70babdd "compstate[nmatches\220\232"
ie = 0xb70babe6 "[nmatches\220\232"
sav = 91 '['
c = 99 'c'
ppar = 0
#9 0x080c17c8 in paramsubst (l=0xb70bab98, n=0xb70babbc, str=0xbf994f1c, qt=1, ssub=0) at subst.c:2188
ov = 0x0
aptr = 0xb70babdc ""
c = 99 'c'
cc = -73 '\267'
s = 0xb70babe6 "[nmatches\220\232"
fstr = 0x0
idbeg = 0xb70babdd "compstate[nmatches\220\232"
idend = 0xb70ba5e8 "\300\245\v\267x\246\v\267\374\245\v\267\300\245\v\267\200\246\v\267\b\246\v\267\300\245\v\267\210\246\v\267\024\246\v\267\300\245\v\267\220\246\v\267 \246\v\267\300\245\v\267\230\246\v\267,\246\v\267\300\245\v\267\240\246\v\267\070\246\v\267\300\245\v\267\250\246\v\267D\246\v\267\300\245\v\267\260\246\v\267P\246\v\267\300\245\v\267\270\246\v\267\\\246\v\267\300\245\v\267\300\246\v\267"
ostr = 0xb70babd8 "nm\213\232"
colf = -1223973398
isarr = 0
plan9 = 1
globsubst = 0
evalchar = 0
getlen = 0
whichlen = 0
chkset = 0
vunset = 0
wantt = 0
spbreak = 0
val = 0x0
aval = 0x0
vbuf = {isarr = 0, pm = 0x9084fb0, flags = 0, start = 0, end = -1, arr = 0x0}
v = 0x0
flags = 0
flnum = 0
sortit = 0
indord = 0
unique = 0
casmod = 0
quotemod = 0
quotetype = 0
quoteerr = 0
mods = 0
shsplit = 0
sep = 0x0
spsep = 0x0
premul = 0x80df4df " "
postmul = 0x80df4df " "
preone = 0x0
postone = 0x0
replstr = 0x0
prenum = 0
postnum = 0
multi_width = 0
copied = 0
arrasg = 0
eval = 0
aspar = 0
presc = 0
nojoin = 0
inbrace = 0 '\000'
hkeys = 0 '\000'
hvals = 0 '\000'
subexp = 0
horrible_offset_hack = 0
#10 0x080bde78 in stringsubst (list=0xb70bab98, node=0xb70babbc, ssub=0, asssub=0) at subst.c:214
qt = 1
str3 = 0xb70babd8 "nm\213\232"
str = 0xb70babdc ""
c = 99 'c'
#11 0x080bd6ab in prefork (list=0xb70bab98, flags=1) at subst.c:77
node = 0xb70babbc
stop = 0x0
keep = 0
asssub = 0
#12 0x0806d5d7 in execcmd (state=0xbf9956e0, input=0, output=0, how=2, last1=2) at exec.c:2527
hn = 0x80e29fc
args = 0xb70bab98
node = 0xbf995380
fn = 0xbf9953b8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080470664
dfil = 0
is_cursh = -1218797637
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 16
forked = 0
is_shfunc = 0
is_builtin = 1
is_exec = 0
use_defpath = 0
cflags = 2074
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 102
beg = 0x904ec68
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#13 0x0806b523 in execpline2 (state=0xbf9956e0, pcode=259, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1080470344
pipes = {15, 1695263367}
#14 0x0806a99e in execpline (state=0xbf9956e0, slcode=5122, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 15
newjob = 15
old_simple_pline = 1
slflags = 0
code = 259
lastwj = 0
lpforked = 0
#15 0x0806a1e0 in execlist (state=0xbf9956e0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x904ec78
code = 5122
ret = 1
cj = 15
csp = 0
ltype = 2
old_pline_level = 23
old_list_pipe = 0
oldlineno = 18
oldnoerrexit = 1
#16 0x08069c7a in execode (p=0x8f6fb18, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x8f6fb18, pc = 0x904ec78, strs = 0x904f160 "local"}
zsh_eval_context_len = 32
alen = 11
#17 0x080727e7 in runshfunc (prog=0x8f6fb18, wrap=0x0, name=0xb70bab48 "_setup") at exec.c:4641
cont = -1080469721
ouu = 12
ou = 0x904dc30 "other-files"
#18 0xb7134de8 in comp_wrapper (prog=0x8f6fb18, w=0x0, name=0xb70bab48 "_setup") at complete.c:1455
opre = 0x9119dd0 "fs/adfs/"
oipre = 0x90455e0 ""
oqipre = 0x9049a58 ""
oqs = 0x911c460 "\001"
m = 0
pp = 0x90536d4
osuf = 0x911e5f8 ""
oisuf = 0x9117e48 ""
oqisuf = 0x908f3f0 ""
ocur = 1
orest = 0x90850b0 "auto"
owords = 0x9051ea8
oq = 0x904fa18 ""
oqi = 0x90538a0 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x904dc50
runset = 0
#19 0x08072750 in runshfunc (prog=0x8f6fb18, wrap=0xb714ec20, name=0xb70bab48 "_setup") at exec.c:4626
cont = 1
ouu = 12
ou = 0x8fea760 "other-files"
#20 0x080724ef in doshfunc (shfunc=0x8f6bc68, doshargs=0xb70baac0, noreturnval=0) at exec.c:4535
pptab = 0x911b518
x = 0x9050198
oargv0 = 0x904ffd8 "_description"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223972160
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70ba550 "_description"
name = 0x8f6b140 "_setup"
flags = 270336
fname = 0xb70bab38 "_setup"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x8f6fb18
fstack = {prev = 0xbf995ff0, name = 0xb70bab48 "_setup", filename = 0xb70bab50 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_setup",
caller = 0xb70ba560 "_description", flineno = 0, lineno = 18, tp = 1}
funcdepth = 11
#21 0x08071c49 in execshfunc (shf=0x8f6bc68, args=0xb70baac0) at exec.c:4263
last_file_list = 0x0
ocs = 0x9115d70 "\f\fg\267P\266\021\t"
ocsp = 0
osfc = 6
#22 0x0806f7fc in execcmd (state=0xbf995ee0, input=0, output=0, how=2, last1=2) at exec.c:3172
i = 13
restorelist = 0x0
removelist = 0x0
hn = 0x8f6bc68
args = 0xb70baac0
node = 0x0
fn = 0xbf995b88
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152148104
dfil = 151279192
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 102
beg = 0x908df24
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#23 0x0806b523 in execpline2 (state=0xbf995ee0, pcode=1219, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223972208
pipes = {15, -1223979008}
#24 0x0806a99e in execpline (state=0xbf995ee0, slcode=5122, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 15
newjob = 15
old_simple_pline = 1
slflags = 0
code = 1219
lastwj = 0
lpforked = 0
#25 0x0806a1e0 in execlist (state=0xbf995ee0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x908df34
code = 5122
ret = 0
cj = 15
csp = 0
ltype = 2
old_pline_level = 22
old_list_pipe = 0
oldlineno = 28
oldnoerrexit = 1
#26 0x08069c7a in execode (p=0x908d070, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x908d070, pc = 0x908df34, strs = 0x908e6c4 "local"}
zsh_eval_context_len = 32
alen = 10
#27 0x080727e7 in runshfunc (prog=0x908d070, wrap=0x0, name=0xb70ba560 "_description") at exec.c:4641
cont = 3
ouu = 2
ou = 0x8fea750 "\235"
#28 0xb7134de8 in comp_wrapper (prog=0x908d070, w=0x0, name=0xb70ba560 "_description") at complete.c:1455
opre = 0x9085648 "fs/adfs/"
oipre = 0x908ce98 ""
oqipre = 0x9116c90 ""
oqs = 0x911fb90 "\001"
m = 0
pp = 0x90536d4
osuf = 0x9119798 ""
oisuf = 0x904fc60 ""
oqisuf = 0x9119a00 ""
ocur = 1
orest = 0x9086cc0 "auto"
owords = 0x911fb00
oq = 0x8f82b38 ""
oqi = 0x911fab8 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x911c330
runset = 0
#29 0x08072750 in runshfunc (prog=0x908d070, wrap=0xb714ec20, name=0xb70ba560 "_description") at exec.c:4626
cont = 0
ouu = 2
ou = 0x911fe00 "\235"
#30 0x080724ef in doshfunc (shfunc=0x8f69930, doshargs=0xb70ba468, noreturnval=0) at exec.c:4535
pptab = 0x90850d0
x = 0x911b524
oargv0 = 0x9116908 "_alternative"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223973784
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70b9c00 "_alternative"
name = 0x8f699c8 "_description"
flags = 270336
fname = 0xb70ba540 "_description"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x908d070
fstack = {prev = 0xbf997940, name = 0xb70ba560 "_description",
filename = 0xb70ba570 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_description", caller = 0xb70b9c10 "_alternative", flineno = 0,
lineno = 28, tp = 1}
funcdepth = 11
#31 0x08071c49 in execshfunc (shf=0x8f69930, args=0xb70ba468) at exec.c:4263
last_file_list = 0x0
ocs = 0x9123b58 "\001"
ocsp = 3
osfc = 6
#32 0x0806f7fc in execcmd (state=0xbf997830, input=0, output=0, how=2, last1=2) at exec.c:3172
i = 13
restorelist = 0x0
removelist = 0x0
hn = 0x8f69930
args = 0xb70ba468
node = 0x0
fn = 0xbf996388
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152149544
dfil = 151334504
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 134
beg = 0x911af88
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#33 0x0806b523 in execpline2 (state=0xbf997830, pcode=1859, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 0
pipes = {15, 0}
#34 0x0806a99e in execpline (state=0xbf997830, slcode=6146, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 14
newjob = 15
old_simple_pline = 1
slflags = 0
code = 1859
lastwj = 0
lpforked = 0
#35 0x0806a1e0 in execlist (state=0xbf997830, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x911af9c
code = 6146
ret = 1
cj = 14
csp = 3
ltype = 2
old_pline_level = 21
old_list_pipe = 0
oldlineno = 24
oldnoerrexit = 1
#36 0x08092cbb in execif (state=0xbf997830, do_exec=0) at loop.c:515
end = 0x911b1e4
next = 0x911b1e4
code = 22064
olderrexit = 1
s = 0
run = 1
#37 0x0806f5fd in execcmd (state=0xbf997830, input=0, output=0, how=18, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xb766eff4
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080465024
dfil = -1080465048
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 22160
beg = 0x911af2c
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#38 0x0806b523 in execpline2 (state=0xbf997830, pcode=1603, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = 1
pipes = {14, -1080464256}
#39 0x0806a99e in execpline (state=0xbf997830, slcode=179202, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 13
newjob = 14
old_simple_pline = 1
slflags = 0
code = 1603
lastwj = 0
lpforked = 0
#40 0x0806a1e0 in execlist (state=0xbf997830, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x911b1e4
code = 179202
ret = -1223974264
cj = 13
csp = 2
ltype = 18
old_pline_level = 20
old_list_pipe = 0
oldlineno = 23
oldnoerrexit = 1
#41 0x08091efe in execfor (state=0xbf997830, do_exec=0) at loop.c:159
end = 0x911b1e4
loop = 0x911af20
code = 22923
iscond = 0
ctok = 0
atok = 0
last = 0
name = 0xb70ba160 "def"
str = 0xb70ba1b0 "other-files::__git_other_files"
cond = 0x0
advance = 0x0
val = 0
vars = 0xb70ba148
args = 0xb70ba168
#42 0x0806f5fd in execcmd (state=0xbf997830, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x30
fn = 0xbf996ef8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151542488
dfil = 0
is_cursh = 1
type = 11
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 22923
beg = 0x911af14
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#43 0x0806b523 in execpline2 (state=0xbf997830, pcode=1539, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 17
pipes = {13, -1217990668}
#44 0x0806a99e in execpline (state=0xbf997830, slcode=185346, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 12
newjob = 13
old_simple_pline = 1
slflags = 0
code = 1539
lastwj = 0
lpforked = 0
#45 0x0806a1e0 in execlist (state=0xbf997830, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x911b1e4
code = 185346
ret = 1
cj = 12
csp = 1
ltype = 2
old_pline_level = 19
old_list_pipe = 0
oldlineno = 22
oldnoerrexit = 1
#46 0x08092917 in execwhile (state=0xbf997830, do_exec=0) at loop.c:410
end = 0x911b210
loop = 0x911aef4
code = 12749
olderrexit = 1
oldval = 0
isuntil = 0
#47 0x0806f5fd in execcmd (state=0xbf997830, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0xbf9974b0
fn = 0x17
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152154765
dfil = -1080462144
is_cursh = 1
type = 13
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 12749
beg = 0x911aef0
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#48 0x0806b523 in execpline2 (state=0xbf997830, pcode=1475, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223975272
pipes = {12, -1223979008}
#49 0x0806a99e in execpline (state=0xbf997830, slcode=205826, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 12
newjob = 12
old_simple_pline = 1
slflags = 0
code = 1475
lastwj = 0
lpforked = 0
#50 0x0806a1e0 in execlist (state=0xbf997830, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x911b210
code = 205826
ret = 1
cj = 12
csp = 0
ltype = 2
old_pline_level = 18
old_list_pipe = 0
oldlineno = 34
oldnoerrexit = 1
#51 0x08069c7a in execode (p=0x911c400, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x911c400, pc = 0x911af9c, strs = 0x911b26c "local"}
zsh_eval_context_len = 32
alen = 9
#52 0x080727e7 in runshfunc (prog=0x911c400, wrap=0x0, name=0xb70b9c10 "_alternative") at exec.c:4641
cont = 104
ouu = 68
ou = 0x9053600 "ignored-other-files:ignored other files:__git_other_files --ignored"
#53 0xb7134de8 in comp_wrapper (prog=0x911c400, w=0x0, name=0xb70b9c10 "_alternative") at complete.c:1455
opre = 0x904dc40 "fs/adfs/"
oipre = 0x911b508 ""
oqipre = 0x9043be8 ""
oqs = 0x911e8e0 "\001"
m = 0
pp = 0x90536d4
osuf = 0x908af70 ""
oisuf = 0x9050180 ""
oqisuf = 0x9086ce0 ""
ocur = 1
orest = 0x8f532d0 "auto"
owords = 0x908d8f0
oq = 0x9086cd0 ""
oqi = 0x911e8f0 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x908ee00
runset = 0
#54 0x08072750 in runshfunc (prog=0x911c400, wrap=0xb714ec20, name=0xb70b9c10 "_alternative") at exec.c:4626
cont = 0
ouu = 68
ou = 0x9119d30 "ignored-other-files:ignored other files:__git_other_files --ignored"
#55 0x080724ef in doshfunc (shfunc=0x8f66b30, doshargs=0xb70b9a88, noreturnval=0) at exec.c:4535
pptab = 0x9123c80
x = 0x908c378
oargv0 = 0x9118940 "_git-add"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = 81
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c0ba0 "_git-add"
name = 0x8f57f70 "_alternative"
flags = 270336
fname = 0xb70b9bf0 "_alternative"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x911c400
fstack = {prev = 0xbf998700, name = 0xb70b9c10 "_alternative",
filename = 0xb70b9c20 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_alternative", caller = 0xb70c0bb0 "_git-add", flineno = 0,
lineno = 34, tp = 1}
funcdepth = 11
#56 0x08071c49 in execshfunc (shf=0x8f66b30, args=0xb70b9a88) at exec.c:4263
last_file_list = 0x0
ocs = 0x908f258 "\020\006\n\267\320\004g\267\006\nontext\213\205curcontext state line\n\tdeclare -A opt_args\n\tlocal ignore_missing\213\n\tif (( words[(I)-n|--dry-run] ))\n\tthen\n\t\tignore_missing=\231--ignore-missing[check if files (even missing) are ignored "...
ocsp = 1
osfc = 6
#57 0x0806f7fc in execcmd (state=0xbf9985f0, input=0, output=0, how=2, last1=2) at exec.c:3172
i = 13
restorelist = 0x0
removelist = 0x0
hn = 0x8f66b30
args = 0xb70b9a88
node = 0x908ee00
fn = 0xb7599516
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151542600
dfil = 48
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 134
beg = 0x9097f34
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#58 0x0806b523 in execpline2 (state=0xbf9985f0, pcode=2243, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 17
pipes = {12, 0}
#59 0x0806a99e in execpline (state=0xbf9985f0, slcode=6178, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 11
newjob = 12
old_simple_pline = 1
slflags = 0
code = 2243
lastwj = 0
lpforked = 0
#60 0x0806a229 in execlist (state=0xbf9985f0, dont_change_job=1, exiting=0) at exec.c:1216
donedebug = 0
donetrap = 0
next = 0x9097f48
code = 6178
ret = 65536
cj = 11
csp = 1
ltype = 18
old_pline_level = 17
old_list_pipe = 0
oldlineno = 24
oldnoerrexit = 1
#61 0x08093044 in execcase (state=0xbf9985f0, do_exec=0) at loop.c:593
end = 0x9097f60
next = 0x9097f60
code = 9775
word = 0xb70c0fd8 "file"
pat = 0x0
npat = 0
save = 0
spprog = 0x9097db0
pprog = 0x911b828
#62 0x0806f5fd in execcmd (state=0xbf9985f0, input=0, output=0, how=18, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0xbf998290
fn = 0xbf9982c8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080458616
dfil = 0
is_cursh = 1
type = 15
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 10255
beg = 0x9097ebc
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#63 0x0806b523 in execpline2 (state=0xbf9985f0, pcode=1603, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = -1080458296
pipes = {11, -1080454668}
#64 0x0806a99e in execpline (state=0xbf9985f0, slcode=43010, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 11
newjob = 11
old_simple_pline = 1
slflags = 0
code = 1603
lastwj = 0
lpforked = 0
#65 0x0806a1e0 in execlist (state=0xbf9985f0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9097f60
code = 43010
ret = 1
cj = 11
csp = 0
ltype = 18
old_pline_level = 16
old_list_pipe = 0
oldlineno = 22
oldnoerrexit = 1
#66 0x08069c7a in execode (p=0x9097cb8, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x9097cb8, pc = 0x9097f48, strs = 0x9097f64 "local"}
zsh_eval_context_len = 32
alen = 8
#67 0x080727e7 in runshfunc (prog=0x9097cb8, wrap=0x0, name=0xb70c0bb0 "_git-add") at exec.c:4641
cont = 1
ouu = 9
ou = 0x904dad0 "_git-add"
#68 0xb7134de8 in comp_wrapper (prog=0x9097cb8, w=0x0, name=0xb70c0bb0 "_git-add") at complete.c:1455
opre = 0x911ebd0 "fs/adfs/"
oipre = 0x9097b08 ""
oqipre = 0x908fdb8 ""
oqs = 0x911c4d0 "\001"
m = 0
pp = 0x90536d4
osuf = 0x911c0c8 ""
oisuf = 0x9097d98 ""
oqisuf = 0x908fd90 ""
ocur = 2
orest = 0x9116100 "auto"
owords = 0x9097ca0
oq = 0x9116150 ""
oqi = 0x9116178 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x904dac0
runset = 0
#69 0x08072750 in runshfunc (prog=0x9097cb8, wrap=0xb714ec20, name=0xb70c0bb0 "_git-add") at exec.c:4626
cont = -1080457500
ouu = 9
ou = 0x911c9c8 "_git-add"
#70 0x080724ef in doshfunc (shfunc=0x9049370, doshargs=0xb70c0b60, noreturnval=0) at exec.c:4535
pptab = 0x908d888
x = 0x9123c80
oargv0 = 0x9053658 "_call_function"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223947424
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c0360 "_call_function"
name = 0x9097c38 "_git-add"
flags = 0
fname = 0xb70c0b90 "_git-add"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x9097cb8
fstack = {prev = 0xbf9994b0, name = 0xb70c0bb0 "_git-add", filename = 0xb70c0bc0 "_git", caller = 0xb70c0370 "_call_function", flineno = 28, lineno = 22,
tp = 1}
funcdepth = 11
#71 0x08071c49 in execshfunc (shf=0x9049370, args=0xb70c0b60) at exec.c:4263
last_file_list = 0x0
ocs = 0x908eb50 "\006\tg\267P;\022\t"
ocsp = 1
osfc = 6
#72 0x0806f7fc in execcmd (state=0xbf9993a0, input=0, output=0, how=2, last1=2) at exec.c:3172
i = 13
restorelist = 0x0
removelist = 0x0
hn = 0x9049370
args = 0xb70c0b60
node = 0x80f3740
fn = 0xbf998ac8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080455964
dfil = -1080455976
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 38
beg = 0x9096778
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#73 0x0806b523 in execpline2 (state=0xbf9993a0, pcode=1475, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 1
pipes = {11, 1}
#74 0x0806a99e in execpline (state=0xbf9993a0, slcode=3074, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 10
newjob = 11
old_simple_pline = 1
slflags = 0
code = 1475
lastwj = 0
lpforked = 0
#75 0x0806a1e0 in execlist (state=0xbf9993a0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9096780
code = 3074
ret = 0
cj = 10
csp = 1
ltype = 2
old_pline_level = 15
old_list_pipe = 0
oldlineno = 21
oldnoerrexit = 1
#76 0x08092cbb in execif (state=0xbf9993a0, do_exec=0) at loop.c:515
end = 0x90967f0
next = 0x90967f0
code = 4784
olderrexit = 1
s = 0
run = 1
#77 0x0806f5fd in execcmd (state=0xbf9993a0, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xbf999048
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152168896
dfil = 151313072
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 4880
beg = 0x9096754
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#78 0x0806b523 in execpline2 (state=0xbf9993a0, pcode=1411, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223949288
pipes = {10, -1223962624}
#79 0x0806a99e in execpline (state=0xbf9993a0, slcode=40962, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 10
newjob = 10
old_simple_pline = 1
slflags = 0
code = 1411
lastwj = 0
lpforked = 0
#80 0x0806a1e0 in execlist (state=0xbf9993a0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x90967f0
code = 40962
ret = 0
cj = 10
csp = 0
ltype = 2
old_pline_level = 14
old_list_pipe = 0
oldlineno = 52
oldnoerrexit = 1
#81 0x08069c7a in execode (p=0x904db70, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x904db70, pc = 0x9096780, strs = 0x909680c "local"}
zsh_eval_context_len = 32
alen = 7
#82 0x080727e7 in runshfunc (prog=0x904db70, wrap=0x0, name=0xb70c0370 "_call_function") at exec.c:4641
cont = 184
ouu = 9
ou = 0x9116dc0 "_git-add"
#83 0xb7134de8 in comp_wrapper (prog=0x904db70, w=0x0, name=0xb70c0370 "_call_function") at complete.c:1455
opre = 0x9116110 "fs/adfs/"
oipre = 0x9116130 ""
oqipre = 0x9116168 ""
oqs = 0x908fda8 "\001"
m = 0
pp = 0x90536d4
osuf = 0x9116120 ""
oisuf = 0x9116140 ""
oqisuf = 0x908fd60 ""
ocur = 2
orest = 0x9053cb0 "auto"
owords = 0x908fdd0
oq = 0x908fd70 ""
oqi = 0x908fd80 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x911c9d8
runset = 0
#84 0x08072750 in runshfunc (prog=0x904db70, wrap=0xb714ec20, name=0xb70c0370 "_call_function") at exec.c:4626
cont = -1080453952
ouu = 9
ou = 0x9116668 "_git-add"
#85 0x080724ef in doshfunc (shfunc=0x8f68130, doshargs=0xb70c02c8, noreturnval=0) at exec.c:4535
pptab = 0x911bb30
x = 0x9097b10
oargv0 = 0x904e378 "_git"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223949624
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c2650 "_git"
name = 0x8f689c8 "_call_function"
flags = 270336
fname = 0xb70c0350 "_call_function"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x904db70
fstack = {prev = 0xbf99a820, name = 0xb70c0370 "_call_function",
filename = 0xb70c0380 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_call_function", caller = 0xb70c2658 "_git", flineno = 0, lineno = 52,
tp = 1}
funcdepth = 11
#86 0x08071c49 in execshfunc (shf=0x8f68130, args=0xb70c02c8) at exec.c:4263
last_file_list = 0x0
ocs = 0x911c7e0 "\006\020\n\267\330\004g\267\020"
ocsp = 2
osfc = 6
#87 0x0806f7fc in execcmd (state=0xbf99a710, input=0, output=0, how=18, last1=2) at exec.c:3172
i = 13
restorelist = 0x0
removelist = 0x0
hn = 0x8f68130
args = 0xb70c02c8
node = 0x0
fn = 0xbf999848
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151547696
dfil = 151616288
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 102
beg = 0x91157f8
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#88 0x0806b523 in execpline2 (state=0xbf99a710, pcode=3395, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = 17
pipes = {10, 0}
#89 0x0806a99e in execpline (state=0xbf99a710, slcode=5122, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 9
newjob = 10
old_simple_pline = 1
slflags = 0
code = 3395
lastwj = 0
lpforked = 0
#90 0x0806a1e0 in execlist (state=0xbf99a710, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9115808
code = 5122
ret = 65536
cj = 9
csp = 2
ltype = 18
old_pline_level = 13
old_list_pipe = 0
oldlineno = 45
oldnoerrexit = 1
#91 0x08093044 in execcase (state=0xbf99a710, do_exec=0) at loop.c:593
end = 0x9115808
next = 0x9115808
code = 3887
word = 0xb70c4fa0 "option-or-argument"
pat = 0x0
npat = 2
save = 0
spprog = 0x91154c0
pprog = 0x9116950
#92 0x0806f5fd in execcmd (state=0xbf99a710, input=0, output=0, how=18, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x80f3740
fn = 0x97
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152149400
dfil = -1080450908
is_cursh = 1
type = 15
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 7951
beg = 0x9115788
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#93 0x0806b523 in execpline2 (state=0xbf99a710, pcode=2947, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = -1223951064
pipes = {9, -1223962624}
#94 0x0806a99e in execpline (state=0xbf99a710, slcode=33794, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 9
newjob = 9
old_simple_pline = 1
slflags = 0
code = 2947
lastwj = 0
lpforked = 0
#95 0x0806a1e0 in execlist (state=0xbf99a710, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9115808
code = 33794
ret = 1
cj = 8
csp = 1
ltype = 18
old_pline_level = 12
old_list_pipe = 0
oldlineno = 25
oldnoerrexit = 1
#96 0x08092cbb in execif (state=0xbf99a710, do_exec=0) at loop.c:515
end = 0x9115828
next = 0x9115808
code = 10160
olderrexit = 1
s = 0
run = 1
#97 0x0806f5fd in execcmd (state=0xbf99a710, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x8ef4848
fn = 0xbf99a448
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080449652
dfil = 4
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 11280
beg = 0x91156c4
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#98 0x0806b523 in execpline2 (state=0xbf99a710, pcode=1667, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223940444
pipes = {8, 150297880}
#99 0x0806a99e in execpline (state=0xbf99a710, slcode=92162, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 8
newjob = 8
old_simple_pline = 1
slflags = 0
code = 1667
lastwj = 0
lpforked = 0
#100 0x0806a1e0 in execlist (state=0xbf99a710, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9115828
code = 92162
ret = -1217985584
cj = 8
csp = 0
ltype = 2
old_pline_level = 11
old_list_pipe = 0
oldlineno = 1
oldnoerrexit = 1
#101 0x08069c7a in execode (p=0x9115490, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x9115490, pc = 0x9115808, strs = 0x9115844 " CURRENT > 2 "}
zsh_eval_context_len = 32
alen = 6
#102 0x080727e7 in runshfunc (prog=0x9115490, wrap=0x0, name=0xb70c2658 "_git") at exec.c:4641
cont = 272
ouu = 5
ou = 0x9116c48 "_git"
#103 0xb7134de8 in comp_wrapper (prog=0x9115490, w=0x0, name=0xb70c2658 "_git") at complete.c:1455
opre = 0x908da30 "fs/adfs/"
oipre = 0x9096900 ""
oqipre = 0x8f69a88 ""
oqs = 0x90452c0 "\001"
m = 0
pp = 0x90536d4
osuf = 0x8efc158 ""
oisuf = 0x90459f0 ""
oqisuf = 0x9044c50 ""
ocur = 3
orest = 0x9097bf8 "auto"
owords = 0x9084180
oq = 0x90443c0 ""
oqi = 0x8f6be58 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x9116c38
runset = 0
#104 0x08072750 in runshfunc (prog=0x9115490, wrap=0xb714ec20, name=0xb70c2658 "_git") at exec.c:4626
cont = -1080449017
ouu = 5
ou = 0x911c608 "_git"
#105 0x080724ef in doshfunc (shfunc=0x9115d28, doshargs=0xb70c2628, noreturnval=0) at exec.c:4535
pptab = 0x8f68100
x = 0x911bb30
oargv0 = 0x9118c88 "_dispatch"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223940568
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0x80d5e76 "(eval)"
name = 0x9115d60 "_git"
flags = 0
fname = 0xb70c2648 "_git"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x9115490
fstack = {prev = 0xbf99af4c, name = 0xb70c2658 "_git", filename = 0xb70c2660 "_git", caller = 0x80d5e76 "(eval)", flineno = 5964, lineno = 1, tp = 1}
funcdepth = 11
#106 0x08071c49 in execshfunc (shf=0x9115d28, args=0xb70c2628) at exec.c:4263
last_file_list = 0x0
ocs = 0x908fbc0 "\006\n"
ocsp = 1
osfc = 6
#107 0x0806f7fc in execcmd (state=0xbf99af10, input=0, output=0, how=18, last1=2) at exec.c:3172
i = 12
restorelist = 0x0
removelist = 0x0
hn = 0x9115d28
args = 0xb70c2628
node = 0xbf99ab90
fn = 0xbf99b4c4
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 135214912
dfil = -1080445756
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 38
beg = 0xb70c2604
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#108 0x0806b523 in execpline2 (state=0xbf99af10, pcode=131, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = -1080447768
pipes = {8, -1080447024}
#109 0x0806a99e in execpline (state=0xbf99af10, slcode=3074, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 7
newjob = 8
old_simple_pline = 1
slflags = 0
code = 131
lastwj = 0
lpforked = 0
#110 0x0806a1e0 in execlist (state=0xbf99af10, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0xb70c260c
code = 3074
ret = -1217985632
cj = 7
csp = 1
ltype = 18
old_pline_level = 10
old_list_pipe = 0
oldlineno = 63
oldnoerrexit = 1
#111 0x08069c7a in execode (p=0xb70c25d0, dont_change_job=1, exiting=0, context=0x80d40f6 "eval") at exec.c:1028
s = {prog = 0xb70c25d0, pc = 0xb70c260c, strs = 0xb70c2610 "_git"}
zsh_eval_context_len = 32
alen = 5
#112 0x08063724 in eval (argv=0xbf99afc0) at builtin.c:4908
prog = 0xb70c25d0
oscriptname = 0xb70c2048 "_dispatch"
oineval = 0
fpushed = 1
fstack = {prev = 0xbf99bd30, name = 0x80d5e76 "(eval)", filename = 0xb70c2068 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_dispatch",
caller = 0xb70c2058 "_dispatch", flineno = 63, lineno = 63, tp = 2}
#113 0x080639e9 in bin_eval (nam=0xb70c2578 "eval", argv=0xbf99afc0, ops=0xbf99b004, func=14) at builtin.c:5017
No locals.
#114 0x08055a26 in execbuiltin (args=0xb70c2550, bn=0x80e27bc) at builtin.c:450
argarr = 0xbf99afc0
argv = 0xbf99afc0
pp = 0x0
name = 0xb70c2578 "eval"
optstr = 0x0
flags = 2056
sense = 1521
argc = 1
execop = 149899336
xtr = 0
ops = {ind = '\000' <repeats 127 times>, args = 0x0, argscount = 0, argsalloc = 0}
#115 0x0806f87e in execcmd (state=0xbf99bc20, input=0, output=0, how=2, last1=2) at exec.c:3183
restorelist = 0x0
removelist = 0x0
hn = 0x80e27bc
args = 0xb70c2550
node = 0x0
fn = 0xbf99b318
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152149808
dfil = 151616440
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 1
is_exec = 0
use_defpath = 0
cflags = 2056
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 70
beg = 0x9084b38
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#116 0x0806b523 in execpline2 (state=0xbf99bc20, pcode=4099, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 48
pipes = {7, -1223946240}
#117 0x0806a99e in execpline (state=0xbf99bc20, slcode=4130, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 6
newjob = 7
old_simple_pline = 1
slflags = 0
code = 4099
lastwj = 0
lpforked = 0
#118 0x0806a229 in execlist (state=0xbf99bc20, dont_change_job=1, exiting=0) at exec.c:1216
donedebug = 0
donetrap = 0
next = 0x9084b44
code = 4130
ret = 1
cj = 6
csp = 1
ltype = 2
old_pline_level = 9
old_list_pipe = 0
oldlineno = 61
oldnoerrexit = 1
#119 0x08092cbb in execif (state=0xbf99bc20, do_exec=0) at loop.c:515
end = 0x9084b8c
next = 0x9084b8c
code = 5040
olderrexit = 1
s = 0
run = 1
#120 0x0806f5fd in execcmd (state=0xbf99bc20, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xbf99b8c8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152156456
dfil = 151323328
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 5136
beg = 0x9084ae8
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#121 0x0806b523 in execpline2 (state=0xbf99bc20, pcode=3971, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223941400
pipes = {6, -1223946240}
#122 0x0806a99e in execpline (state=0xbf99bc20, slcode=43010, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 6
newjob = 6
old_simple_pline = 1
slflags = 0
code = 3971
lastwj = 0
lpforked = 0
#123 0x0806a1e0 in execlist (state=0xbf99bc20, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9084b8c
code = 43010
ret = 1
cj = 6
csp = 0
ltype = 2
old_pline_level = 8
old_list_pipe = 0
oldlineno = 40
oldnoerrexit = 1
#124 0x08069c7a in execode (p=0x90841e8, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x90841e8, pc = 0x9084b44, strs = 0x9084db4 "local"}
zsh_eval_context_len = 32
alen = 4
#125 0x080727e7 in runshfunc (prog=0x90841e8, wrap=0x0, name=0xb70c2058 "_dispatch") at exec.c:4641
cont = 272
ouu = 10
ou = 0x911e688 "-default-"
#126 0xb7134de8 in comp_wrapper (prog=0x90841e8, w=0x0, name=0xb70c2058 "_dispatch") at complete.c:1455
opre = 0x9097c08 "fs/adfs/"
oipre = 0x9053d68 ""
oqipre = 0x9053d88 ""
oqs = 0x9053dc8 "\001"
m = 0
pp = 0x90536d4
osuf = 0x9097c18 ""
oisuf = 0x9053d78 ""
oqisuf = 0x9053d98 ""
ocur = 3
orest = 0x9052358 "auto"
owords = 0x9085178
oq = 0x9053da8 ""
oqi = 0x9053db8 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x911e678
runset = 0
#127 0x08072750 in runshfunc (prog=0x90841e8, wrap=0xb714ec20, name=0xb70c2058 "_dispatch") at exec.c:4626
cont = 151536416
ouu = 10
ou = 0x9097be8 "-default-"
#128 0x080724ef in doshfunc (shfunc=0x8f69b30, doshargs=0xb70c1f20, noreturnval=0) at exec.c:4535
pptab = 0x9044258
x = 0x9116c4c
oargv0 = 0x908d0d0 "_normal"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223942368
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c1cc0 "_normal"
name = 0x8f69440 "_dispatch"
flags = 270336
fname = 0xb70c2038 "_dispatch"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x90841e8
fstack = {prev = 0xbf99c530, name = 0xb70c2058 "_dispatch", filename = 0xb70c2068 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_dispatch",
caller = 0xb70c1cc8 "_normal", flineno = 0, lineno = 40, tp = 1}
funcdepth = 11
#129 0x08071c49 in execshfunc (shf=0x8f69b30, args=0xb70c1f20) at exec.c:4263
last_file_list = 0x0
ocs = 0x91186d8 "\005\ng\267\270n\b\tfs/adfs/"
ocsp = 0
osfc = 6
#130 0x0806f7fc in execcmd (state=0xbf99c420, input=0, output=0, how=18, last1=2) at exec.c:3172
i = 12
restorelist = 0x0
removelist = 0x0
hn = 0x8f69b30
args = 0xb70c1f20
node = 0x0
fn = 0x0
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1218833753
dfil = 135214912
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 198
beg = 0x9083e48
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#131 0x0806b523 in execpline2 (state=0xbf99c420, pcode=2627, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = -1080441928
pipes = {6, 6629256}
#132 0x0806a99e in execpline (state=0xbf99c420, slcode=8194, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 6
newjob = 6
old_simple_pline = 1
slflags = 0
code = 2627
lastwj = 0
lpforked = 0
#133 0x0806a1e0 in execlist (state=0xbf99c420, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x9083e64
code = 8194
ret = -1080441896
cj = 6
csp = 0
ltype = 18
old_pline_level = 7
old_list_pipe = 0
oldlineno = 117
oldnoerrexit = 1
#134 0x08069c7a in execode (p=0x8fa1ee0, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x8fa1ee0, pc = 0x9083e64, strs = 0x9083e68 "local"}
zsh_eval_context_len = 32
alen = 3
#135 0x080727e7 in runshfunc (prog=0x8fa1ee0, wrap=0x0, name=0xb70c1cc8 "_normal") at exec.c:4641
cont = 8388608
ouu = 3
ou = 0x8f2f5d0 "-s"
#136 0xb7134de8 in comp_wrapper (prog=0x8fa1ee0, w=0x0, name=0xb70c1cc8 "_normal") at complete.c:1455
opre = 0x9116700 "fs/adfs/"
oipre = 0x90962e8 ""
oqipre = 0x90443f0 ""
oqs = 0x8f6a9c0 "\001"
m = 0
pp = 0x90536d4
osuf = 0x9116710 ""
oisuf = 0x8f8c3b8 ""
oqisuf = 0x8f865b0 ""
ocur = 3
orest = 0x90962f8 "auto"
owords = 0x9116248
oq = 0x90962b0 ""
oqi = 0x908ed60 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x9085618
runset = 0
#137 0x08072750 in runshfunc (prog=0x8fa1ee0, wrap=0xb714ec20, name=0xb70c1cc8 "_normal") at exec.c:4626
cont = -1080441577
ouu = 3
ou = 0x9052348 "-s"
#138 0x080724ef in doshfunc (shfunc=0x8f6b350, doshargs=0xb70c1c80, noreturnval=0) at exec.c:4535
pptab = 0x91167c8
x = 0x904425c
oargv0 = 0x911ac80 "_complete"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = -1223943040
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c1780 "_complete"
name = 0x8f6ac50 "_normal"
flags = 270336
fname = 0xb70c1cb8 "_normal"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x8fa1ee0
fstack = {prev = 0xbf99d2e0, name = 0xb70c1cc8 "_normal", filename = 0xb70c1cd0 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_normal",
caller = 0xb70c1790 "_complete", flineno = 0, lineno = 117, tp = 1}
funcdepth = 11
#139 0x08071c49 in execshfunc (shf=0x8f6b350, args=0xb70c1c80) at exec.c:4263
last_file_list = 0x0
ocs = 0x9119510 "\006\n\n\267\070Z\004\tfs/"
ocsp = 1
osfc = 6
#140 0x0806f7fc in execcmd (state=0xbf99d1d0, input=0, output=0, how=2, last1=2) at exec.c:3172
i = 12
restorelist = 0x0
removelist = 0x0
hn = 0x8f6b350
args = 0xb70c1c80
node = 0x8ef4848
fn = 0xbf99c8c8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 152150064
dfil = 151584616
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 70
beg = 0x908363c
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#141 0x0806b523 in execpline2 (state=0xbf99d1d0, pcode=7555, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223943152
pipes = {6, -1223946240}
#142 0x0806a99e in execpline (state=0xbf99d1d0, slcode=4130, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 5
newjob = 6
old_simple_pline = 1
slflags = 0
code = 7555
lastwj = 0
lpforked = 0
#143 0x0806a229 in execlist (state=0xbf99d1d0, dont_change_job=1, exiting=0) at exec.c:1216
donedebug = 0
donetrap = 0
next = 0x9083648
code = 4130
ret = 0
cj = 5
csp = 1
ltype = 18
old_pline_level = 6
old_list_pipe = 0
oldlineno = 115
oldnoerrexit = 1
#144 0x08092cbb in execif (state=0xbf99d1d0, do_exec=0) at loop.c:515
end = 0x90837b4
next = 0x9083660
code = 3120
olderrexit = 1
s = 0
run = 1
#145 0x0806f5fd in execcmd (state=0xbf99d1d0, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xbf99ce78
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151315600
dfil = 151542936
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 14096
beg = 0x90835f8
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#146 0x0806b523 in execpline2 (state=0xbf99d1d0, pcode=7427, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223943232
pipes = {5, -1223946240}
#147 0x0806a99e in execpline (state=0xbf99d1d0, slcode=114690, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 5
newjob = 5
old_simple_pline = 1
slflags = 0
code = 7427
lastwj = 0
lpforked = 0
#148 0x0806a1e0 in execlist (state=0xbf99d1d0, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x90837b4
code = 114690
ret = 1
cj = 5
csp = 0
ltype = 2
old_pline_level = 5
old_list_pipe = 0
oldlineno = 165
oldnoerrexit = 1
#149 0x08069c7a in execode (p=0x8f69b08, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x8f69b08, pc = 0x9083648, strs = 0x90837e8 "local"}
zsh_eval_context_len = 32
alen = 2
#150 0x080727e7 in runshfunc (prog=0x8f69b08, wrap=0x0, name=0xb70c1790 "_complete") at exec.c:4641
cont = 8388608
ouu = 10
ou = 0x9116320 "_complete"
#151 0xb7134de8 in comp_wrapper (prog=0x8f69b08, w=0x0, name=0xb70c1790 "_complete") at complete.c:1455
opre = 0x908f610 "fs/adfs/"
oipre = 0x9116440 ""
oqipre = 0x9085228 ""
oqs = 0x9085238 "\001"
m = 0
pp = 0x90536d4
osuf = 0x908f600 ""
oisuf = 0x911ad58 ""
oqisuf = 0x911ad48 ""
ocur = 3
orest = 0x904d938 "auto"
owords = 0x90456a0
oq = 0x908ff58 ""
oqi = 0x9119ef0 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x908f030
runset = 0
#152 0x08072750 in runshfunc (prog=0x8f69b08, wrap=0xb714ec20, name=0xb70c1790 "_complete") at exec.c:4626
cont = 151536416
ouu = 10
ou = 0x91167b8 "_complete"
#153 0x080724ef in doshfunc (shfunc=0x8f68708, doshargs=0xb70c1740, noreturnval=0) at exec.c:4535
pptab = 0x9053488
x = 0x91167c8
oargv0 = 0x908fdf0 "zsh"
oldzoptind = 1
oldlastval = 1
oldoptcind = 0
oldnumpipestats = 1
ret = -1223944384
oldpipestats = 0x0
saveopts = "\000\000\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\001\000\001\000\000\000\000\001\001\001\001\001\001\001", '\000' <repeats 17 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\000\000\001"
oldscriptname = 0xb70c5020 "_main_complete"
name = 0x8f678f0 "_complete"
flags = 270336
fname = 0xb70c1770 "_complete"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x8f69b08
fstack = {prev = 0xbf99ec70, name = 0xb70c1790 "_complete", filename = 0xb70c17a0 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_complete",
caller = 0xb70c5030 "_main_complete", flineno = 0, lineno = 165, tp = 1}
funcdepth = 11
#154 0x08071c49 in execshfunc (shf=0x8f68708, args=0xb70c1740) at exec.c:4263
last_file_list = 0x0
ocs = 0x9116e38 ""
ocsp = 3
osfc = 6
#155 0x0806f7fc in execcmd (state=0xbf99eb60, input=0, output=0, how=18, last1=2) at exec.c:3172
i = 12
restorelist = 0x0
removelist = 0x0
hn = 0x8f68708
args = 0xb70c1740
node = 0xbf99d670
fn = 0xbf99d6a8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = -1080437132
dfil = 0
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 1
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 38
beg = 0x907f98c
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#156 0x0806b523 in execpline2 (state=0xbf99eb60, pcode=10627, how=18, input=0, output=0, last1=0) at exec.c:1640
pid = -1223944408
pipes = {5, -1223946240}
#157 0x0806a99e in execpline (state=0xbf99eb60, slcode=3074, how=18, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 4
newjob = 5
old_simple_pline = 1
slflags = 0
code = 10627
lastwj = 0
lpforked = 0
#158 0x0806a1e0 in execlist (state=0xbf99eb60, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x907f994
code = 3074
ret = 0
cj = 4
csp = 3
ltype = 18
old_pline_level = 4
old_list_pipe = 0
oldlineno = 160
oldnoerrexit = 1
#159 0x08092c1c in execif (state=0xbf99eb60, do_exec=0) at loop.c:500
end = 0x907f9c4
next = 0x907f9c4
code = 2256
olderrexit = 0
s = 1
run = 0
#160 0x0806f5fd in execcmd (state=0xbf99eb60, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xbf99dc28
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151546448
dfil = 152153232
is_cursh = 1
type = 16
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 5776
beg = 0x907f90c
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#161 0x0806b523 in execpline2 (state=0xbf99eb60, pcode=10307, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 1
pipes = {4, 151523007}
#162 0x0806a99e in execpline (state=0xbf99eb60, slcode=48130, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 3
newjob = 4
old_simple_pline = 1
slflags = 0
code = 10307
lastwj = 0
lpforked = 0
#163 0x0806a1e0 in execlist (state=0xbf99eb60, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x907f9c4
code = 48130
ret = 0
cj = 3
csp = 2
ltype = 2
old_pline_level = 3
old_list_pipe = 0
oldlineno = 152
oldnoerrexit = 0
#164 0x08091efe in execfor (state=0xbf99eb60, do_exec=0) at loop.c:159
end = 0x907f9d4
loop = 0x907f88c
code = 11051
iscond = 0
ctok = 0
atok = 0
last = 0
name = 0x9080937 "_c_matcher"
str = 0xb70c16f0 ""
cond = 0x0
advance = 0x0
val = 0
vars = 0xb70c1698
args = 0xb70c16b0
#165 0x0806f5fd in execcmd (state=0xbf99eb60, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0x0
fn = 0xbf99e218
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 150387912
dfil = 152153232
is_cursh = 1
type = 11
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 11051
beg = 0x907f878
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#166 0x0806b523 in execpline2 (state=0xbf99eb60, pcode=9795, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = 1
pipes = {3, 151522853}
#167 0x0806a99e in execpline (state=0xbf99eb60, slcode=90114, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 2
newjob = 3
old_simple_pline = 1
slflags = 0
code = 9795
lastwj = 0
lpforked = 0
#168 0x0806a1e0 in execlist (state=0xbf99eb60, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x907f9d4
code = 90114
ret = 1
cj = 2
csp = 1
ltype = 2
old_pline_level = 2
old_list_pipe = 0
oldlineno = 129
oldnoerrexit = 0
#169 0x08091efe in execfor (state=0xbf99eb60, do_exec=0) at loop.c:159
end = 0x907fa08
loop = 0x907f6c4
code = 27307
iscond = 0
ctok = 0
atok = 0
last = 0
name = 0xb70c8ff8 "tmp"
str = 0xb70c12c0 "_complete"
cond = 0x0
advance = 0x0
val = 0
vars = 0xb70c1250
args = 0xb70c1268
#170 0x0806f5fd in execcmd (state=0xbf99eb60, input=0, output=0, how=2, last1=2) at exec.c:3124
hn = 0x0
args = 0x0
node = 0xbf99e7e0
fn = 0xb5
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151522727
dfil = -1080432656
is_cursh = 1
type = 11
do_exec = 0
redir_err = 0
i = 10
htok = 0
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 0
is_exec = 0
use_defpath = 0
cflags = 0
orig_cflags = 0
checked = 0
oautocont = -1
redir = 0x0
code = 27307
beg = 0x907f6b0
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#171 0x0806b523 in execpline2 (state=0xbf99eb60, pcode=8323, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1223914888
pipes = {2, -1223929856}
#172 0x0806a99e in execpline (state=0xbf99eb60, slcode=220162, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 2
newjob = 2
old_simple_pline = 1
slflags = 0
code = 8323
lastwj = 0
lpforked = 0
#173 0x0806a1e0 in execlist (state=0xbf99eb60, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x907fa08
code = 220162
ret = 1
cj = 1
csp = 0
ltype = 2
old_pline_level = 1
old_list_pipe = 0
oldlineno = 33
oldnoerrexit = 0
#174 0x08069c7a in execode (p=0x8f8a478, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x8f8a478, pc = 0x907f994, strs = 0x9080890 "local"}
zsh_eval_context_len = 32
alen = 1
#175 0x080727e7 in runshfunc (prog=0x8f8a478, wrap=0x0, name=0xb70c5030 "_main_complete") at exec.c:4641
cont = 0
ouu = 3
ou = 0x91165a8 "-w"
#176 0xb7134de8 in comp_wrapper (prog=0x8f8a478, w=0x0, name=0xb70c5030 "_main_complete") at complete.c:1455
opre = 0x908efa0 "fs/adfs/"
oipre = 0x8f02ba0 ""
oqipre = 0x9045598 ""
oqs = 0x9044d30 "\001"
m = 0
pp = 0x90536d4
osuf = 0x9052300 ""
oisuf = 0x9049998 ""
oqisuf = 0x9052310 ""
ocur = 3
orest = 0x0
owords = 0x8f67eb8
oq = 0x8f5e968 ""
oqi = 0x9116bd0 ""
oaq = 0x0
kunset = 0
sm = 512
oredirs = 0x908ffb0
runset = 0
#177 0x08072750 in runshfunc (prog=0x8f8a478, wrap=0xb714ec20, name=0xb70c5030 "_main_complete") at exec.c:4626
cont = -1080431432
ouu = 3
ou = 0x9096640 "-w"
#178 0x080724ef in doshfunc (shfunc=0x8f6a1d8, doshargs=0x0, noreturnval=0) at exec.c:4535
pptab = 0x9049be8
x = 0x8efad08
oargv0 = 0x8f6fe40 "zsh"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = 150140200
oldpipestats = 0x0
saveopts = "\000\001\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\000\000\001\000\000\000\000\001\001\001\001\001\001\000\000\001", '\000' <repeats 15 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\001\000\001"
oldscriptname = 0xb70d9798 "ft-complete"
name = 0x8f6a4d8 "_main_complete"
flags = 270336
fname = 0xb70c5010 "_main_complete"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x8f8a478
fstack = {prev = 0xbf99f9b0, name = 0xb70c5030 "_main_complete",
filename = 0xb70c5040 "/usr/local/share/zsh/4.3.11-dev-2/functions/Completion/Base/_main_complete", caller = 0xb70d97a8 "ft-complete", flineno = 0,
lineno = 33, tp = 1}
funcdepth = 11
#179 0xb7137529 in callcompfunc (s=0xb70d9bc8 "fs/adfs/", fn=0x8fb4b80 "_main_complete") at compcore.c:828
largs = 0x0
olv = 0
_switch_oldheaps = 0xb70d9000
p = 0x8f0f6c4
aadd = 0
rset = 1023
kset = 63959491
ockpms = 0x0
tmp = 0xb70d9be0 "fs/adfs/"
icf = 0
ocrpms = 0x0
usea = 1
osc = 4
shfunc = 0x8f6a1d8
lv = 0
buf = "\350홿>\024\t\b\020\000\000\000\233\325\024\267\020\233\r\267"
#180 0xb7137d94 in makecomplist (s=0xb70d9bc8 "fs/adfs/", incmd=0, lst=0) at compcore.c:979
os = 0x908c1b8 "fs/adfs/"
onm = 0
odm = 0
osi = -1
p = 0x0
owb = 8
owe = 16
ooffs = 8
#181 0xb7135cbb in do_completion (dummy=0xb718c194, dat=0xbf99ef04) at compcore.c:349
ret = 0
lst = 0
incmd = 0
osl = 0
s = 0x908c1b8 "fs/adfs/"
opm = 0x904e7f0 ""
n = 0xb70d9b68
#182 0x080995ec in runhookdef (h=0xb718c194, d=0xbf99ef04) at module.c:996
No locals.
#183 0xb717be14 in docompletion (s=0x908c1b8 "fs/adfs/", lst=0, incmd=0) at zle_tricky.c:2179
dat = {s = 0x908c1b8 "fs/adfs/", lst = 0, incmd = 0}
#184 0xb7177d9a in docomplete (lst=0) at zle_tricky.c:859
active = 1
s = 0x908c1b8 "fs/adfs/"
ol = 0x0
olst = 0
chl = 0
ne = 0
ocs = 16
ret = 0
dat = {-1223845254, -1223845248}
#185 0xb7176448 in completeword (args=0xb718c484) at zle_tricky.c:232
ret = 0
#186 0xb717632e in completecall (args=0xbf99f2a8) at zle_tricky.c:208
No locals.
#187 0xb7165f7b in execzlefunc (func=0xb718a210, args=0xbf99f2a8, set_bindk=1) at zle_main.c:1311
atcurhist = 1
wflags = 134
r = 0
ret = 0
remetafy = 0
w = 0x8fbb330
save_bindk = 0x8fa65a8
#188 0xb7175bf1 in bin_zle_call (name=0xb70d9a70 "zle", args=0xbf99f2a8, ops=0xbf99f2e4, func=0 '\000') at zle_thingy.c:700
t = 0xb718a210
modsave = {flags = 0, mult = 1, tmult = 1, vibuf = 0, base = 10}
ret = -1223845504
saveflag = 0
setbindk = 1
wname = 0xb70d9a90 "complete-word"
keymap_restore = 0x0
keymap_tmp = 0x3 <Address 0x3 out of bounds>
#189 0xb7174d8d in bin_zle (name=0xb70d9a70 "zle", args=0xbf99f2a0, ops=0xbf99f2e4, func=0) at zle_thingy.c:381
opns = {{o = 108 'l', func = 0xb7174d93 <bin_zle_list>, min = 0, max = -1}, {o = 68 'D', func = 0xb7175482 <bin_zle_del>, min = 1, max = -1}, {o = 65 'A',
func = 0xb7175548 <bin_zle_link>, min = 2, max = 2}, {o = 78 'N', func = 0xb7175608 <bin_zle_new>, min = 1, max = 2}, {o = 67 'C',
func = 0xb71756c6 <bin_zle_complete>, min = 3, max = 3}, {o = 82 'R', func = 0xb7174e82 <bin_zle_refresh>, min = 0, max = -1}, {o = 77 'M',
func = 0xb7175029 <bin_zle_mesg>, min = 1, max = 1}, {o = 85 'U', func = 0xb7175093 <bin_zle_unget>, min = 1, max = 1}, {o = 75 'K',
func = 0xb7175114 <bin_zle_keymap>, min = 1, max = 1}, {o = 73 'I', func = 0xb7175c4a <bin_zle_invalidate>, min = 0, max = 0}, {o = 70 'F',
func = 0xb7175cbf <bin_zle_fd>, min = 0, max = 2}, {o = 0 '\000', func = 0xb71758b1 <bin_zle_call>, min = 0, max = -1}}
op = 0xb7188210
opp = 0xbf99f3c8
n = 2
#190 0x08055a26 in execbuiltin (args=0xb70d9a40, bn=0xb718c148) at builtin.c:450
argarr = 0xbf99f2a0
argv = 0xbf99f2a0
pp = 0x0
name = 0xb70d9a70 "zle"
optstr = 0xb718736f "aAcCDFgGIKlLmMNRU"
flags = 8
sense = 0
argc = 2
execop = 149899336
xtr = 0
ops = {ind = '\000' <repeats 127 times>, args = 0x0, argscount = 0, argsalloc = 0}
#191 0x0806f87e in execcmd (state=0xbf99f950, input=0, output=0, how=2, last1=2) at exec.c:3183
restorelist = 0x0
removelist = 0x0
hn = 0xb718c148
args = 0xb70d9a40
node = 0x0
fn = 0xbf99f5f8
mfds = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
text = 0x0
save = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2}
fil = 151298136
dfil = 152160560
is_cursh = 1
type = 6
do_exec = 0
redir_err = 0
i = 10
htok = 1
nullexec = 0
assign = 0
forked = 0
is_shfunc = 0
is_builtin = 1
is_exec = 0
use_defpath = 0
cflags = 8
orig_cflags = 0
checked = 1
oautocont = -1
redir = 0x0
code = 102
beg = 0x8f5e52c
varspc = 0x0
oxtrerr = 0xb766f560
newxtrerr = 0x0
#192 0x0806b523 in execpline2 (state=0xbf99f950, pcode=2179, how=2, input=0, output=0, last1=0) at exec.c:1640
pid = -1080428760
pipes = {1, -1218861410}
#193 0x0806a99e in execpline (state=0xbf99f950, slcode=5122, how=2, last1=0) at exec.c:1424
ipipe = {0, 0}
opipe = {0, 0}
pj = 0
newjob = 1
old_simple_pline = 0
slflags = 0
code = 2179
lastwj = 0
lpforked = 0
#194 0x0806a1e0 in execlist (state=0xbf99f950, dont_change_job=1, exiting=0) at exec.c:1207
donedebug = 0
donetrap = 0
next = 0x8f5e53c
code = 5122
ret = 1
cj = 0
csp = 0
ltype = 2
old_pline_level = 0
old_list_pipe = 0
oldlineno = 2
oldnoerrexit = 0
#195 0x08069c7a in execode (p=0x8f0c578, dont_change_job=1, exiting=0, context=0x80d6bd2 "shfunc") at exec.c:1028
s = {prog = 0x8f0c578, pc = 0x8f5e53c, strs = 0x8f5e558 "setopt"}
zsh_eval_context_len = 32
alen = 0
#196 0x080727e7 in runshfunc (prog=0x8f0c578, wrap=0x0, name=0xb70d97a8 "ft-complete") at exec.c:4641
cont = 1
ouu = 5
ou = 0x904e650 "core"
#197 0x080724ef in doshfunc (shfunc=0x8fa6af8, doshargs=0x0, noreturnval=1) at exec.c:4535
pptab = 0x8ef5198
x = 0x8efad08
oargv0 = 0x8ef5188 "zsh"
oldzoptind = 1
oldlastval = 0
oldoptcind = 0
oldnumpipestats = 1
ret = 0
oldpipestats = 0xb70d9790
saveopts = "\000\001\000\001\000\001\000\000\001\001\000\000\001\001\001\000\001\001\001\000\000\000\000\001\000\001\001\001\000\001\001\001\001\000\001\001\001\000\000\000\000\000\000\000\001\001\001\000\000\001\001\000\001\000\001\001\000\000\000\000\000\000\001\001\001\000\000\000\000\001\001\001\001\000\000\001\000\001\001\000\000\000\000\001\000\001\000\000\000\000\000\000\000\001\000\000\000\001\001\000\000\001\000\000\000\000\001\001\001\001\001\001\000\000\001", '\000' <repeats 15 times>, "\001\000\001\001\001\000\000\001\000\001\000\001\000\000\000\000\000\000\001\000\000\001\000\000\000\000\000\001\000\000\001\000\000\001\000\001"
oldscriptname = 0x0
name = 0x8fbd3a8 "ft-complete"
flags = 0
fname = 0xb70d9780 "ft-complete"
obreaks = 0
saveemulation = 48
savesticky_emulation = 0
restore_sticky = 0
prog = 0x8f0c578
fstack = {prev = 0x0, name = 0xb70d97a8 "ft-complete", filename = 0xb70d97c0 "/home/hawk/.zshrc.d/905-zle_widgets.z", caller = 0xb70d97b8 "zsh",
flineno = 114, lineno = 2, tp = 1}
funcdepth = 11
#198 0xb716628d in execzlefunc (func=0x8fa65a8, args=0xb718c484, set_bindk=0) at zle_main.c:1352
osc = 0
osi = 11
oxt = 0
largs = 0x0
shf = 0x8fa6af8
r = 0
ret = 0
remetafy = 0
w = 0x8fa6590
save_bindk = 0x8fa65a8
#199 0xb716549d in zlecore () at zle_main.c:1058
No locals.
#200 0xb7165b5d in zleread (lp=0x80f3ed8, rp=0x80f3e6c, flags=7, context=0) at zle_main.c:1219
s = 0x0
old_errno = 3
tmout = 0
#201 0xb7167b55 in zle_main_entry (cmd=1, ap=0xbf99fe24 "") at zle_main.c:1874
lp = 0x80f3ed8
rp = 0x80f3e6c
flags = 7
context = 0
#202 0x080865bb in zleentry (cmd=1) at init.c:1374
ret = 0x0
ap = 0xbf99fe14 "\330>\017\bl>\017\b\a"
#203 0x08086e91 in inputline () at input.c:281
flags = 7
ingetcline = 0x0
ingetcpmptl = 0x80f3ed8
ingetcpmptr = 0x80f3e6c
context = 0
#204 0x08086d0c in ingetc () at input.c:217
lastc = 134982438
#205 0x0807cc24 in ihgetc () at hist.c:279
c = 0
#206 0x0808e837 in gettok () at lex.c:717
c = 0
d = 0
peekfd = -1
peek = 0
#207 0x0808e0b5 in zshlex () at lex.c:395
No locals.
#208 0x080a98a9 in parse_event () at parse.c:451
No locals.
#209 0x0808395c in loop (toplevel=1, justonce=0) at init.c:132
prog = 0xb70dd838
err = 50
non_empty = 1
#210 0x08086947 in zsh_main (argc=1, argv=0xbf9a0094) at init.c:1528
t = 0xbf9a0098
runscript = 0x0
t0 = 158
#211 0x0805503f in main (argc=1, argv=0xbf9a0094) at ./main.c:93
No locals.
Current language: auto
The current source language is "auto; currently asm".
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Speed improvement patch for __git_files and __git_files_relative
2011-05-11 13:27 ` Frank Terbeck
@ 2011-05-11 13:44 ` Mikael Magnusson
2011-05-11 14:09 ` Completion crash owing to bad allocation Peter Stephenson
1 sibling, 0 replies; 8+ messages in thread
From: Mikael Magnusson @ 2011-05-11 13:44 UTC (permalink / raw)
To: Frank Terbeck; +Cc: zsh-workers
On 11 May 2011 15:27, Frank Terbeck <ft@bewatermyfriend.org> wrote:
> Nikolai Weibull wrote:
>> I’ve now put together a patch for __git_files and
>> __git_files_relative. __git_files is a lot faster than previous
>> versions and __git_files_relative should be a lot faster too, now that
>> it only uses substitutions. (Well, there’s a for loop that iterates
>> over the file names to determine the common path prefix, but I see no
>> way of avoiding it.)
>>
>> It would be great if this could make it into the 4.3.12 release, so
>> please give it a try as soon as possible.
>
> Alright, I've been trying this. The speed improvement in my linux
> kernel clone is quite impressive.
>
> I'm running into a segfault, though. The git repository is located in
> `/tmp/linux-2.6'. I've changed a file (fs/adfs/dir.c) slightly and I'm
> doing this:
>
> % git add f<tab>
> % git add fs/<tab>
> % git add fs/adfs/<tab>
>
> And that's where the shell crashes. It's a build of today's HEAD.
>
> The kernel repository was cloned from this URI:
> <git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git>
>
> I don't have the time to look into this right now, so here's a back
> trace:
This crash seems to be getting pretty common now...
http://www.zsh.org/mla/workers/2011/msg00391.html
http://www.zsh.org/mla/workers/2011/msg00513.html
--
Mikael Magnusson
^ permalink raw reply [flat|nested] 8+ messages in thread
* Completion crash owing to bad allocation
2011-05-11 13:27 ` Frank Terbeck
2011-05-11 13:44 ` Mikael Magnusson
@ 2011-05-11 14:09 ` Peter Stephenson
2011-05-13 23:26 ` Peter Stephenson
1 sibling, 1 reply; 8+ messages in thread
From: Peter Stephenson @ 2011-05-11 14:09 UTC (permalink / raw)
To: zsh-workers
On Wed, 11 May 2011 15:27:35 +0200
Frank Terbeck <ft@bewatermyfriend.org> wrote:
> I'm running into a segfault, though. The git repository is located in
> `/tmp/linux-2.6'. I've changed a file (fs/adfs/dir.c) slightly and I'm
> doing this:
>
> % git add f<tab>
> % git add fs/<tab>
> % git add fs/adfs/<tab>
>
> And that's where the shell crashes. It's a build of today's HEAD.
This seems to be another variant of the "amatches" problem.
amatches is a global in the completion code that holds one version of
the list of matches during completion. This is on the heap, and because
it's not scoped it's virtually impossible to keep track of the point at
which it becomes invalid. For extra ease of maintainance, at some point
in the procedure it is deliberately set to point to a permanently
allocated copy. When the crash happens we are scanning through
some (possibly subtly disguised) part of amatches and examining some
no longer valid memory.
One way to tackle this would be to add a stack corresponding to the
current heap stack, with each level having a unique (up to 32-bit
integer wrap) ID that tells you if that heap variant is valid. Then
when memory is allocated for use by a Cmgroup it stores the ID
corresponding to the currently pushed heap at the top of the stack
(with a special ID to be used if it was permanently allocated). Every
time amatches is examined the code could report an error if a heap ID
stored somewhere along the list doesn't correspond to one somewhere on
the current heap debug stack. (Unfortunately examining amatches at the
point of a popheap() won't work --- the code is lax about marking
amatches as invalid, it just expects you not to access it in that case,
which is part of the problem.)
I won't be doing the completion code debugging, I'm fed up with days of
my life disappearing into code I never seem to get any closer to
understanding and have quite enough else to manage, but if someone
thinks they might get round to that (understanding is optional for now,
we just need to be able to track what's going on with amatches) I'd be
happy to have a go at writing the tools for heap debugging.
--
Peter Stephenson <pws@csr.com> Software Engineer
Tel: +44 (0)1223 692070 Cambridge Silicon Radio Limited
Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, UK
Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Completion crash owing to bad allocation
2011-05-11 14:09 ` Completion crash owing to bad allocation Peter Stephenson
@ 2011-05-13 23:26 ` Peter Stephenson
2011-05-14 2:56 ` Bart Schaefer
0 siblings, 1 reply; 8+ messages in thread
From: Peter Stephenson @ 2011-05-13 23:26 UTC (permalink / raw)
To: zsh-workers
On Wed, 11 May 2011 15:09:09 +0100
Peter Stephenson <Peter.Stephenson@csr.com> wrote:
> One way to tackle this would be to add a stack corresponding to the
> current heap stack, with each level having a unique (up to 32-bit
> integer wrap) ID that tells you if that heap variant is valid. Then
> when memory is allocated for use by a Cmgroup it stores the ID
> corresponding to the currently pushed heap at the top of the stack
> (with a special ID to be used if it was permanently allocated). Every
> time amatches is examined the code could report an error if a heap ID
> stored somewhere along the list doesn't correspond to one somewhere on
> the current heap debug stack. (Unfortunately examining amatches at the
> point of a popheap() won't work --- the code is lax about marking
> amatches as invalid, it just expects you not to access it in that case,
> which is part of the problem.)
Hmm...
So I added the following code, which seems to working in that it's
performing the checks and not usually reporting errors, and turned it
on, and ... dénouement in the next episode.
Index: configure.ac
===================================================================
RCS file: /cvsroot/zsh/zsh/configure.ac,v
retrieving revision 1.135
diff -p -u -r1.135 configure.ac
--- configure.ac 18 Apr 2011 20:36:31 -0000 1.135
+++ configure.ac 13 May 2011 23:18:30 -0000
@@ -105,6 +105,18 @@ AC_HELP_STRING([--enable-zsh-secure-free
AC_DEFINE(ZSH_SECURE_FREE)
fi])
+dnl Do you want to debug zsh heap allocation?
+dnl Does not depend on zsh-mem.
+ifdef([zsh-heap-debug],[undefine([zsh-heap-debug])])dnl
+AH_TEMPLATE([ZSH_HEAP_DEBUG],
+[Define to 1 if you want to turn on error checking for heap allocation.])
+AC_ARG_ENABLE(zsh-heap-debug,
+AC_HELP_STRING([--enable-zsh-heap-debug],
+[turn on error checking for heap allocation]),
+[if test x$enableval = xyes; then
+ AC_DEFINE(ZSH_HEAP_DEBUG)
+fi])
+
dnl Do you want debugging information on internal hash tables.
dnl This turns on the `hashinfo' builtin command.
ifdef([zsh-hash-debug],[undefine([zsh-hash-debug])])dnl
Index: Src/mem.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/mem.c,v
retrieving revision 1.18
diff -p -u -r1.18 mem.c
--- Src/mem.c 7 May 2011 19:32:57 -0000 1.18
+++ Src/mem.c 13 May 2011 23:18:31 -0000
@@ -123,6 +123,57 @@ static Heap heaps;
static Heap fheap;
+#ifdef ZSH_HEAP_DEBUG
+/*
+ * The heap ID we'll allocate next.
+ *
+ * We'll avoid using 0 as that means zero-initialised memory
+ * containing a heap ID is (correctly) marked as invalid.
+ */
+static Heapid next_heap_id = (Heapid)1;
+
+/*
+ * The ID of the heap from which we last allocated heap memory.
+ * In theory, since we carefully avoid allocating heap memory during
+ * interrupts, after any call to zhalloc() or wrappers this should
+ * be the ID of the heap containing the memory just returned.
+ */
+/**/
+mod_export Heapid last_heap_id;
+
+/*
+ * Stack of heaps saved by new_heaps().
+ * Assumes old_heaps() will come along and restore it later
+ * (outputs an error if old_heaps() is called out of sequence).
+ */
+LinkList heaps_saved;
+
+/*
+ * Debugging verbosity. This must be set from a debugger.
+ * An 'or' of bits from the enum heap_debug_verbosity.
+ */
+volatile int heap_debug_verbosity;
+
+/*
+ * Generate a heap identifier that's unique up to unsigned integer wrap.
+ *
+ * For the purposes of debugging we won't bother trying to make a
+ * heap_id globally unique, which would require checking all existing
+ * heaps every time we create an ID and still wouldn't do what we
+ * ideally want, which is to make sure the IDs of valid heaps are
+ * different from the IDs of no-longer-valid heaps. Given that,
+ * we'll just assume that if we haven't tracked the problem when the
+ * ID wraps we're out of luck. We could change the type to a long long
+ * if we wanted more room
+ */
+
+static Heapid
+new_heap_id(void)
+{
+ return next_heap_id++;
+}
+#endif
+
/* Use new heaps from now on. This returns the old heap-list. */
/**/
@@ -137,6 +188,15 @@ new_heaps(void)
fheap = heaps = NULL;
unqueue_signals();
+#ifdef ZSH_HEAP_DEBUG
+ if (heap_debug_verbosity & HDV_NEW) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT
+ " saved, new heaps created.\n", h->heap_id);
+ }
+ if (!heaps_saved)
+ heaps_saved = znewlinklist();
+ zpushnode(heaps_saved, h);
+#endif
return h;
}
@@ -152,6 +212,12 @@ old_heaps(Heap old)
for (h = heaps; h; h = n) {
n = h->next;
DPUTS(h->sp, "BUG: old_heaps() with pushed heaps");
+#ifdef ZSH_HEAP_DEBUG
+ if (heap_debug_verbosity & HDV_FREE) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT
+ "freed in old_heaps().\n", h->heap_id);
+ }
+#endif
#ifdef USE_MMAP
munmap((void *) h, h->size);
#else
@@ -159,6 +225,21 @@ old_heaps(Heap old)
#endif
}
heaps = old;
+#ifdef ZSH_HEAP_DEBUG
+ if (heap_debug_verbosity & HDV_OLD) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT
+ "restored.\n", heaps->heap_id);
+ }
+ {
+ Heap myold = heaps_saved ? getlinknode(heaps_saved) : NULL;
+ if (old != myold)
+ {
+ fprintf(stderr, "HEAP DEBUG: invalid old heap " HEAPID_FMT
+ ", expecting " HEAPID_FMT ".\n", old->heap_id,
+ myold->heap_id);
+ }
+ }
+#endif
fheap = NULL;
unqueue_signals();
}
@@ -174,6 +255,12 @@ switch_heaps(Heap new)
queue_signals();
h = heaps;
+#ifdef ZSH_HEAP_DEBUG
+ if (heap_debug_verbosity & HDV_SWITCH) {
+ fprintf(stderr, "HEAP DEBUG: heap temporarily switched from "
+ HEAPID_FMT " to " HEAPID_FMT ".\n", h->heap_id, new->heap_id);
+ }
+#endif
heaps = new;
fheap = NULL;
unqueue_signals();
@@ -202,6 +289,15 @@ pushheap(void)
hs->next = h->sp;
h->sp = hs;
hs->used = h->used;
+#ifdef ZSH_HEAP_DEBUG
+ hs->heap_id = h->heap_id;
+ h->heap_id = new_heap_id();
+ if (heap_debug_verbosity & HDV_PUSH) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT " pushed, new id is "
+ HEAPID_FMT ".\n",
+ hs->heap_id, h->heap_id);
+ }
+#endif
}
unqueue_signals();
}
@@ -251,6 +347,22 @@ freeheap(void)
if (!fheap && h->used < ARENA_SIZEOF(h))
fheap = h;
hl = h;
+#ifdef ZSH_HEAP_DEBUG
+ /*
+ * As the free makes the heap invalid, give it a new
+ * identifier. We're not popping it, so don't use
+ * the one in the heap stack.
+ */
+ {
+ Heapid new_id = new_heap_id();
+ if (heap_debug_verbosity & HDV_FREE) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT
+ " freed, new id is " HEAPID_FMT ".\n",
+ h->heap_id, new_id);
+ }
+ h->heap_id = new_id;
+ }
+#endif
} else {
#ifdef USE_MMAP
munmap((void *) h, h->size);
@@ -291,6 +403,14 @@ popheap(void)
memset(arena(h) + hs->used, 0xff, h->used - hs->used);
#endif
h->used = hs->used;
+#ifdef ZSH_HEAP_DEBUG
+ if (heap_debug_verbosity & HDV_POP) {
+ fprintf(stderr, "HEAP DEBUG: heap " HEAPID_FMT
+ " popped, old heap was " HEAPID_FMT ".\n",
+ h->heap_id, hs->heap_id);
+ }
+ h->heap_id = hs->heap_id;
+#endif
if (!fheap && h->used < ARENA_SIZEOF(h))
fheap = h;
zfree(hs, sizeof(*hs));
@@ -393,6 +513,13 @@ zhalloc(size_t size)
h->used = n;
ret = arena(h) + n - size;
unqueue_signals();
+#ifdef ZSH_HEAP_DEBUG
+ last_heap_id = h->heap_id;
+ if (heap_debug_verbosity & HDV_ALLOC) {
+ fprintf(stderr, "HEAP DEBUG: allocated memory from heap "
+ HEAPID_FMT ".\n", h->heap_id);
+ }
+#endif
return ret;
}
}
@@ -424,6 +551,13 @@ zhalloc(size_t size)
h->used = size;
h->next = NULL;
h->sp = NULL;
+#ifdef ZSH_HEAP_DEBUG
+ h->heap_id = new_heap_id();
+ if (heap_debug_verbosity & HDV_CREATE) {
+ fprintf(stderr, "HEAP DEBUG: create new heap " HEAPID_FMT ".\n",
+ h->heap_id);
+ }
+#endif
if (hp)
hp->next = h;
@@ -432,6 +566,13 @@ zhalloc(size_t size)
fheap = h;
unqueue_signals();
+#ifdef ZSH_HEAP_DEBUG
+ last_heap_id = h->heap_id;
+ if (heap_debug_verbosity & HDV_ALLOC) {
+ fprintf(stderr, "HEAP DEBUG: allocated memory from heap "
+ HEAPID_FMT ".\n", h->heap_id);
+ }
+#endif
return arena(h);
}
}
@@ -495,6 +636,9 @@ hrealloc(char *p, size_t old, size_t new
* don't use the heap for anything else.)
*/
if (p == arena(h)) {
+#ifdef ZSH_HEAP_DEBUG
+ Heapid heap_id = h->heap_id;
+#endif
/*
* Zero new seems to be a special case saying we've finished
* with the specially reallocated memory, see scanner() in glob.c.
@@ -554,6 +698,9 @@ hrealloc(char *p, size_t old, size_t new
heaps = h;
}
h->used = new;
+#ifdef ZSH_HEAP_DEBUG
+ h->heap_id = heap_id;
+#endif
unqueue_signals();
return arena(h);
}
@@ -576,6 +723,53 @@ hrealloc(char *p, size_t old, size_t new
}
}
+#ifdef ZSH_HEAP_DEBUG
+/*
+ * Check if heap_id is the identifier of a currently valid heap,
+ * including any heap buried on the stack, or of permanent memory.
+ * Return 0 if so, else 1.
+ *
+ * This gets confused by use of switch_heaps(). That's because so do I.
+ */
+
+/**/
+mod_export int
+memory_validate(Heapid heap_id)
+{
+ Heap h;
+ Heapstack hs;
+ LinkNode node;
+
+ if (heap_id == HEAPID_PERMANENT)
+ return 0;
+
+ queue_signals();
+ for (h = heaps; h; h = h->next) {
+ if (h->heap_id == heap_id)
+ return 0;
+ for (hs = heaps->sp; hs; hs = hs->next) {
+ if (hs->heap_id == heap_id)
+ return 0;
+ }
+ }
+
+ if (heaps_saved) {
+ for (node = firstnode(heaps_saved); node; incnode(node)) {
+ for (h = (Heap)getdata(node); h; h = h->next) {
+ if (h->heap_id == heap_id)
+ return 0;
+ for (hs = heaps->sp; hs; hs = hs->next) {
+ if (hs->heap_id == heap_id)
+ return 0;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+#endif
+
/* allocate memory from the current memory pool and clear it */
/**/
Index: Src/zsh.h
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/zsh.h,v
retrieving revision 1.174
diff -p -u -r1.174 zsh.h
--- Src/zsh.h 19 Jan 2011 12:42:53 -0000 1.174
+++ Src/zsh.h 13 May 2011 23:18:31 -0000
@@ -2327,11 +2327,67 @@ enum {
* Memory management *
*********************/
+#ifdef ZSH_HEAP_DEBUG
+/*
+ * A Heapid is a type for identifying, uniquely up to the point where
+ * the count of new identifiers wraps. all heaps that are or
+ * (importantly) have been valid. Each valid heap is given an
+ * identifier, and every time we push a heap we save the old identifier
+ * and give the heap a new identifier so that when the heap is popped
+ * or freed we can spot anything using invalid memory from the popped
+ * heap.
+ *
+ * We could make this unsigned long long if we wanted a big range.
+ */
+typedef unsigned int Heapid;
+
+/* printf format specifier corresponding to Heapid */
+#define HEAPID_FMT "%x"
+
+/* Marker that memory is permanently allocated */
+#define HEAPID_PERMANENT (UINT_MAX)
+
+/*
+ * Heap debug verbosity.
+ * Bits to be 'or'ed into the variable also called heap_debug_verbosity.
+ */
+enum heap_debug_verbosity {
+ /* Report when we push a heap */
+ HDV_PUSH = 0x01,
+ /* Report when we pop a heap */
+ HDV_POP = 0x02,
+ /* Report when we create a new heap from which to allocate */
+ HDV_CREATE = 0x04,
+ /* Report every time we free a complete heap */
+ HDV_FREE = 0x08,
+ /* Report when we temporarily install a new set of heaps */
+ HDV_NEW = 0x10,
+ /* Report when we restore an old set of heaps */
+ HDV_OLD = 0x20,
+ /* Report when we temporarily switch heaps */
+ HDV_SWITCH = 0x40,
+ /*
+ * Report every time we allocate memory from the heap.
+ * This is very verbose, and arguably not very useful: we
+ * would expect to allocate memory from a heap we create.
+ * For much debugging heap_debug_verbosity = 0x7f should be sufficient.
+ */
+ HDV_ALLOC = 0x80
+};
+
+#define HEAP_ERROR(heap_id) \
+ fprintf(stderr, "%s:%d: HEAP DEBUG: invalid heap: " HEAPID_FMT ".\n", \
+ __FILE__, __LINE__, heap_id)
+#endif
+
/* heappush saves the current heap state using this structure */
struct heapstack {
struct heapstack *next; /* next one in list for this heap */
size_t used;
+#ifdef ZSH_HEAP_DEBUG
+ Heapid heap_id;
+#endif
};
/* A zsh heap. */
@@ -2342,6 +2398,10 @@ struct heap {
size_t used; /* bytes used from the heap */
struct heapstack *sp; /* used by pushheap() to save the value used */
+#ifdef ZSH_HEAP_DEBUG
+ unsigned int heap_id;
+#endif
+
/* Uncomment the following if the struct needs padding to 64-bit size. */
/* Make sure sizeof(heap) is a multiple of 8
#if defined(PAD_64_BIT) && !defined(__GNUC__)
Index: Src/Zle/comp.h
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/comp.h,v
retrieving revision 1.20
diff -p -u -r1.20 comp.h
--- Src/Zle/comp.h 9 May 2011 09:49:09 -0000 1.20
+++ Src/Zle/comp.h 13 May 2011 23:18:31 -0000
@@ -76,6 +76,9 @@ struct cmgroup {
int totl; /* total length */
int shortest; /* length of shortest match */
Cmgroup perm; /* perm. alloced version of this group */
+#ifdef ZSH_HEAP_DEBUG
+ Heapid heap_id;
+#endif
};
Index: Src/Zle/compcore.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/compcore.c,v
retrieving revision 1.105
diff -p -u -r1.105 compcore.c
--- Src/Zle/compcore.c 18 Feb 2011 22:08:46 -0000 1.105
+++ Src/Zle/compcore.c 13 May 2011 23:18:31 -0000
@@ -405,6 +405,11 @@ do_completion(UNUSED(Hookdef dummy), Com
} else if (nmatches == 1 || (nmatches > 1 && !diffmatches)) {
/* Only one match. */
Cmgroup m = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(m->heap_id)) {
+ HEAP_ERROR(m->heap_id);
+ }
+#endif
while (!m->mcount)
m = m->next;
@@ -509,6 +514,11 @@ after_complete(UNUSED(Hookdef dummy), in
int ret;
cdat.matches = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(cdat.matches->heap_id)) {
+ HEAP_ERROR(cdat.matches->heap_id);
+ }
+#endif
cdat.num = nmatches;
cdat.nmesg = nmessages;
cdat.cur = NULL;
@@ -987,6 +997,11 @@ makecomplist(char *s, int incmd, int lst
diffmatches = odm;
validlist = 1;
amatches = lastmatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(amatches->heap_id)) {
+ HEAP_ERROR(amatches->heap_id);
+ }
+#endif
lmatches = lastlmatches;
if (pmatches) {
freematches(pmatches, 1);
@@ -2959,6 +2974,11 @@ begcmgroup(char *n, int flags)
Cmgroup p = amatches;
while (p) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(p->heap_id)) {
+ HEAP_ERROR(p->heap_id);
+ }
+#endif
if (p->name &&
flags == (p->flags & (CGF_NOSORT|CGF_UNIQALL|CGF_UNIQCON)) &&
!strcmp(n, p->name)) {
@@ -2975,6 +2995,9 @@ begcmgroup(char *n, int flags)
}
}
mgroup = (Cmgroup) zhalloc(sizeof(struct cmgroup));
+#ifdef ZSH_HEAP_DEBUG
+ mgroup->heap_id = last_heap_id;
+#endif
mgroup->name = dupstring(n);
mgroup->lcount = mgroup->llcount = mgroup->mcount = mgroup->ecount =
mgroup->ccount = 0;
@@ -3295,6 +3318,11 @@ permmatches(int last)
fi = 1;
}
while (g) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
if (fi != ofi || !g->perm || g->new) {
if (fi)
/* We have no matches, try ignoring fignore. */
@@ -3323,6 +3351,9 @@ permmatches(int last)
diffmatches = 1;
n = (Cmgroup) zshcalloc(sizeof(struct cmgroup));
+#ifdef ZSH_HEAP_DEBUG
+ n->heap_id = HEAPID_PERMANENT;
+#endif
if (g->perm) {
g->perm->next = NULL;
Index: Src/Zle/compctl.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/compctl.c,v
retrieving revision 1.40
diff -p -u -r1.40 compctl.c
--- Src/Zle/compctl.c 14 Dec 2010 10:35:39 -0000 1.40
+++ Src/Zle/compctl.c 13 May 2011 23:18:31 -0000
@@ -1838,6 +1838,11 @@ ccmakehookfn(UNUSED(Hookdef dummy), stru
diffmatches = odm;
validlist = 1;
amatches = lastmatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(amatches->heap_id)) {
+ HEAP_ERROR(amatches->heap_id);
+ }
+#endif
lmatches = lastlmatches;
if (pmatches) {
freematches(pmatches, 1);
Index: Src/Zle/complist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/complist.c,v
retrieving revision 1.125
diff -p -u -r1.125 complist.c
--- Src/Zle/complist.c 9 May 2011 09:49:09 -0000 1.125
+++ Src/Zle/complist.c 13 May 2011 23:18:32 -0000
@@ -1363,6 +1363,11 @@ compprintlist(int showall)
while (g) {
char **pp = g->ylist;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
if ((e = g->expls)) {
int l;
@@ -1952,6 +1957,11 @@ complistmatches(UNUSED(Hookdef dummy), C
Cmgroup oamatches = amatches;
amatches = dat->matches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(amatches->heap_id)) {
+ HEAP_ERROR(amatches->heap_id);
+ }
+#endif
noselect = 0;
@@ -2640,6 +2650,11 @@ domenuselect(Hookdef dummy, Chdata dat)
s->mlbeg = mlbeg;
memcpy(&(s->info), &minfo, sizeof(struct menuinfo));
s->amatches = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(amatches->heap_id)) {
+ HEAP_ERROR(amatches->heap_id);
+ }
+#endif
s->pmatches = pmatches;
s->lastmatches = lastmatches;
s->lastlmatches = lastlmatches;
@@ -2835,6 +2850,11 @@ domenuselect(Hookdef dummy, Chdata dat)
if (lastmatches)
freematches(lastmatches, 0);
amatches = u->amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(amatches->heap_id)) {
+ HEAP_ERROR(amatches->heap_id);
+ }
+#endif
pmatches = u->pmatches;
lastmatches = u->lastmatches;
lastlmatches = u->lastlmatches;
Index: Src/Zle/compresult.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/compresult.c,v
retrieving revision 1.81
diff -p -u -r1.81 compresult.c
--- Src/Zle/compresult.c 9 May 2011 09:49:09 -0000 1.81
+++ Src/Zle/compresult.c 13 May 2011 23:18:32 -0000
@@ -906,7 +906,14 @@ do_allmatches(UNUSED(int end))
for (minfo.group = amatches;
minfo.group && !(minfo.group)->mcount;
- minfo.group = (minfo.group)->next);
+ minfo.group = (minfo.group)->next) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(minfo.group->heap_id)) {
+ HEAP_ERROR(minfo.group->heap_id);
+ }
+#endif
+ }
+
mc = (minfo.group)->matches;
@@ -1172,6 +1179,11 @@ do_single(Cmatch m)
struct chdata dat;
dat.matches = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(dat.matches->heap_id)) {
+ HEAP_ERROR(dat.matches->heap_id);
+ }
+#endif
dat.num = nmatches;
dat.cur = m;
@@ -1210,8 +1222,14 @@ do_menucmp(int lst)
do {
if (!*++(minfo.cur)) {
do {
- if (!(minfo.group = (minfo.group)->next))
+ if (!(minfo.group = (minfo.group)->next)) {
minfo.group = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(minfo.group->heap_id)) {
+ HEAP_ERROR(minfo.group->heap_id);
+ }
+#endif
+ }
} while (!(minfo.group)->mcount);
minfo.cur = minfo.group->matches;
}
@@ -1291,12 +1309,18 @@ accept_last(void)
Cmgroup g;
Cmatch *m;
- for (g = amatches, m = NULL; g && (!m || !*m); g = g->next)
+ for (g = amatches, m = NULL; g && (!m || !*m); g = g->next) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
for (m = g->matches; *m; m++)
if (!hasbrpsfx(*m, minfo.prebr, minfo.postbr)) {
showinglist = -2;
break;
}
+ }
}
}
menuacc++;
@@ -1381,7 +1405,13 @@ do_ambig_menu(void)
insgnum = comp_mod(insgnum, lastpermgnum);
for (minfo.group = amatches;
minfo.group && (minfo.group)->num != insgnum + 1;
- minfo.group = (minfo.group)->next);
+ minfo.group = (minfo.group)->next) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(minfo.group->heap_id)) {
+ HEAP_ERROR(minfo.group->heap_id);
+ }
+#endif
+ }
if (!minfo.group || !(minfo.group)->mcount) {
minfo.cur = NULL;
minfo.asked = 0;
@@ -1393,8 +1423,14 @@ do_ambig_menu(void)
insmnum = comp_mod(insmnum, lastpermmnum);
for (minfo.group = amatches;
minfo.group && (minfo.group)->mcount <= insmnum;
- minfo.group = (minfo.group)->next)
+ minfo.group = (minfo.group)->next) {
insmnum -= (minfo.group)->mcount;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(minfo.group->heap_id)) {
+ HEAP_ERROR(minfo.group->heap_id);
+ }
+#endif
+ }
if (!minfo.group) {
minfo.cur = NULL;
minfo.asked = 0;
@@ -1483,6 +1519,11 @@ calclist(int showall)
int nl = 0, l, glong = 1, gshort = zterm_columns, ndisp = 0, totl = 0;
int hasf = 0;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
g->flags |= CGF_PACKED | CGF_ROWS;
if (!onlyexpl && pp) {
@@ -1624,6 +1665,11 @@ calclist(int showall)
for (g = amatches; g; g = g->next) {
glines = 0;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
zfree(g->widths, 0);
g->widths = NULL;
@@ -1858,6 +1904,11 @@ calclist(int showall)
else
for (g = amatches; g; g = g->next)
{
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
zfree(g->widths, 0);
g->widths = NULL;
}
@@ -1945,6 +1996,11 @@ printlist(int over, CLPrintFunc printm,
for (g = amatches; g; g = g->next) {
char **pp = g->ylist;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
if ((e = g->expls)) {
int l;
@@ -2144,7 +2200,13 @@ bld_all_str(Cmatch all)
buf[0] = '\0';
- for (g = amatches; g && !g->mcount; g = g->next);
+ for (g = amatches; g && !g->mcount; g = g->next) {
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(g->heap_id)) {
+ HEAP_ERROR(g->heap_id);
+ }
+#endif
+ }
mp = g->matches;
while (1) {
@@ -2262,6 +2324,11 @@ list_matches(UNUSED(Hookdef dummy), UNUS
#endif
dat.matches = amatches;
+#ifdef ZSH_HEAP_DEBUG
+ if (memory_validate(dat.matches->heap_id)) {
+ HEAP_ERROR(dat.matches->heap_id);
+ }
+#endif
dat.num = nmatches;
dat.cur = NULL;
ret = runhookdef(COMPLISTMATCHESHOOK, (void *) &dat);
--
Peter Stephenson <p.w.stephenson@ntlworld.com>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Completion crash owing to bad allocation
2011-05-13 23:26 ` Peter Stephenson
@ 2011-05-14 2:56 ` Bart Schaefer
0 siblings, 0 replies; 8+ messages in thread
From: Bart Schaefer @ 2011-05-14 2:56 UTC (permalink / raw)
To: zsh-workers
On May 14, 12:26am, Peter Stephenson wrote:
}
} So I added the following code
Phileas Fogg appeared, followed by an excited crowd who had forced
their way through the club doors, and in his calm voice, said,
"Here I am, gentlemen!"
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Speed improvement patch for __git_files and __git_files_relative
2011-05-06 13:03 Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
2011-05-11 13:27 ` Frank Terbeck
@ 2011-05-17 12:55 ` Nikolai Weibull
2011-05-17 13:01 ` Frank Terbeck
1 sibling, 1 reply; 8+ messages in thread
From: Nikolai Weibull @ 2011-05-17 12:55 UTC (permalink / raw)
To: Zsh Workers
On Fri, May 6, 2011 at 15:03, Nikolai Weibull <now@bitwi.se> wrote:
> Hi!
>
> I’ve now put together a patch for __git_files and
> __git_files_relative. __git_files is a lot faster than previous
> versions and __git_files_relative should be a lot faster too, now that
> it only uses substitutions. (Well, there’s a for loop that iterates
> over the file names to determine the common path prefix, but I see no
> way of avoiding it.)
>
> It would be great if this could make it into the 4.3.12 release, so
> please give it a try as soon as possible.
It seems that no one is having any problems with this patch, so could
someone please apply it?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Speed improvement patch for __git_files and __git_files_relative
2011-05-17 12:55 ` Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
@ 2011-05-17 13:01 ` Frank Terbeck
0 siblings, 0 replies; 8+ messages in thread
From: Frank Terbeck @ 2011-05-17 13:01 UTC (permalink / raw)
To: Nikolai Weibull; +Cc: Zsh Workers
Nikolai Weibull wrote:
[...]
> It seems that no one is having any problems with this patch, so could
> someone please apply it?
I was planing to do that in the evening (MEST). ...unless somebody beats
me to it now.
Regards, Frank
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-05-17 13:19 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-06 13:03 Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
2011-05-11 13:27 ` Frank Terbeck
2011-05-11 13:44 ` Mikael Magnusson
2011-05-11 14:09 ` Completion crash owing to bad allocation Peter Stephenson
2011-05-13 23:26 ` Peter Stephenson
2011-05-14 2:56 ` Bart Schaefer
2011-05-17 12:55 ` Speed improvement patch for __git_files and __git_files_relative Nikolai Weibull
2011-05-17 13:01 ` Frank Terbeck
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).