diff options
author | aiju <devnull@localhost> | 2017-06-19 17:22:41 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2017-06-19 17:22:41 +0000 |
commit | a83ce26b41be995bcde2b8f6bec6f93522f4f514 (patch) | |
tree | 9d104fb873fe58c508cbe8a2febfd3470e77225f /sys/src | |
parent | f1cc75b5473f938b573b133be43f5d4f368d696f (diff) |
ktrace(1): handle amd64 stacktraces correctly
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/ktrace.c | 18 |
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; } |