summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2017-06-19 17:22:41 +0000
committeraiju <devnull@localhost>2017-06-19 17:22:41 +0000
commita83ce26b41be995bcde2b8f6bec6f93522f4f514 (patch)
tree9d104fb873fe58c508cbe8a2febfd3470e77225f
parentf1cc75b5473f938b573b133be43f5d4f368d696f (diff)
ktrace(1): handle amd64 stacktraces correctly
-rw-r--r--sys/src/cmd/ktrace.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/src/cmd/ktrace.c b/sys/src/cmd/ktrace.c
index d816d57e5..86ff89569 100644
--- a/sys/src/cmd/ktrace.c
+++ b/sys/src/cmd/ktrace.c
@@ -370,7 +370,7 @@ getval(uvlong a)
{
char buf[256];
int i, n;
- uvlong r;
+ uvlong r, m;
if(interactive){
print("// data at %#8.8llux? ", a);
@@ -379,17 +379,25 @@ getval(uvlong a)
return 0;
buf[n] = '\0';
r = strtoull(buf, 0, 16);
+ }else{
+ r = 0;
switch(fhdr.magic){
case S_MAGIC:
- r = (long)r; // sign extend
+ m = 0xffffffff00000000ULL;
break;
+ default:
+ m = 0;
}
- }else{
- r = 0;
for(i=0; i<naddr; i++)
- if(addr[i] == a)
+ if((addr[i]|m) == a)
r = val[i];
}
+ switch(fhdr.magic){
+ case S_MAGIC:
+ r = (long)r; // sign extend
+ break;
+ }
+
return r;
}