snap: be more conservative taking stack snapshot
include up to 8k below the stack to get some more context. don't assume stack is at least 16K.
This commit is contained in:
parent
1f464e0013
commit
5692788724
|
@ -20,7 +20,7 @@ sumr(ulong sum, void *buf, int n)
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int npage;
|
static ulong npage;
|
||||||
static Page *pgtab[1<<10];
|
static Page *pgtab[1<<10];
|
||||||
|
|
||||||
Page*
|
Page*
|
||||||
|
@ -32,7 +32,7 @@ datapage(char *p, long len)
|
||||||
int iszero;
|
int iszero;
|
||||||
|
|
||||||
if(len > Pagesize) {
|
if(len > Pagesize) {
|
||||||
fprint(2, "datapage cannot handle pages > 1024\n");
|
fprint(2, "datapage cannot handle pages > %d\n", Pagesize);
|
||||||
exits("datapage");
|
exits("datapage");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,14 +277,14 @@ snap(long pid, int usetext)
|
||||||
if(stacklen) {
|
if(stacklen) {
|
||||||
sp = stackptr(proc, fd);
|
sp = stackptr(proc, fd);
|
||||||
if(stackoff <= sp && sp < stackoff+stacklen) {
|
if(stackoff <= sp && sp < stackoff+stacklen) {
|
||||||
off = (sp - Pagesize) & ~(Pagesize - 1);
|
off = sp - 8*1024;
|
||||||
if(off < stackoff)
|
|
||||||
off = stackoff;
|
|
||||||
len = stacklen - (off - stackoff);
|
|
||||||
} else { /* stack pointer not in segment. thread library? */
|
} else { /* stack pointer not in segment. thread library? */
|
||||||
off = stackoff + stacklen - 16*1024;
|
off = stackoff + stacklen - 16*1024;
|
||||||
len = 16*1024;
|
|
||||||
}
|
}
|
||||||
|
off &= ~((uvlong)Pagesize-1);
|
||||||
|
if(off < stackoff)
|
||||||
|
off = stackoff;
|
||||||
|
len = stacklen - (off - stackoff);
|
||||||
s[stacki] = readseg(fd, off, len, "Stack");
|
s[stacki] = readseg(fd, off, len, "Stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue