summaryrefslogtreecommitdiff
path: root/sys/src/cmd/snap/take.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-11-22 10:30:45 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2018-11-22 10:30:45 +0100
commit56927887249d8529afa57c38d7935edb2d9cc49f (patch)
tree65248daca3413f5af6ec0c79ee33215ae79fc058 /sys/src/cmd/snap/take.c
parent1f464e0013ddc9b5901a50d11d4ef5bd570be39c (diff)
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.
Diffstat (limited to 'sys/src/cmd/snap/take.c')
-rw-r--r--sys/src/cmd/snap/take.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/src/cmd/snap/take.c b/sys/src/cmd/snap/take.c
index 80ba72eed..3ef884fd8 100644
--- a/sys/src/cmd/snap/take.c
+++ b/sys/src/cmd/snap/take.c
@@ -20,7 +20,7 @@ sumr(ulong sum, void *buf, int n)
return sum;
}
-static int npage;
+static ulong npage;
static Page *pgtab[1<<10];
Page*
@@ -32,7 +32,7 @@ datapage(char *p, long len)
int iszero;
if(len > Pagesize) {
- fprint(2, "datapage cannot handle pages > 1024\n");
+ fprint(2, "datapage cannot handle pages > %d\n", Pagesize);
exits("datapage");
}
@@ -277,14 +277,14 @@ snap(long pid, int usetext)
if(stacklen) {
sp = stackptr(proc, fd);
if(stackoff <= sp && sp < stackoff+stacklen) {
- off = (sp - Pagesize) & ~(Pagesize - 1);
- if(off < stackoff)
- off = stackoff;
- len = stacklen - (off - stackoff);
+ off = sp - 8*1024;
} else { /* stack pointer not in segment. thread library? */
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");
}