aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/addr2line
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-07-18 10:12:28 -0400
committerRuss Cox <rsc@golang.org>2013-07-18 10:12:28 -0400
commit08ce3c313376b6d600c08b977103d6c51350b3f6 (patch)
treee23fb56b03dc63d9f4564173e89c36d08a7e686c /src/cmd/addr2line
parentd7b4a09ca8037d91a5a89ea0e9ab36cef37cef74 (diff)
downloadgo-08ce3c313376b6d600c08b977103d6c51350b3f6.tar.gz
go-08ce3c313376b6d600c08b977103d6c51350b3f6.zip
libmach: update for Go 1.2 pcln table
The change to addr2line makes it easy to test by hand. R=golang-dev, r CC=golang-dev https://golang.org/cl/11485044
Diffstat (limited to 'src/cmd/addr2line')
-rw-r--r--src/cmd/addr2line/main.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/addr2line/main.c b/src/cmd/addr2line/main.c
index 9faadc27bb..54c4d90b5c 100644
--- a/src/cmd/addr2line/main.c
+++ b/src/cmd/addr2line/main.c
@@ -31,7 +31,7 @@ void
main(int argc, char **argv)
{
int fd;
- char *p;
+ char *p, *q;
uvlong pc;
Symbol s;
Fhdr fhdr;
@@ -67,6 +67,17 @@ main(int argc, char **argv)
if(p == nil)
break;
p[Blinelen(&bin)-1] = '\0';
+ q = strchr(p, ':');
+ if(q != nil) {
+ // reverse: translate file:line to pc
+ *q++ = '\0';
+ pc = file2pc(p, atoi(q));
+ if(pc == ~(uvlong)0)
+ Bprint(&bout, "!%r\n");
+ else
+ Bprint(&bout, "0x%llux\n", pc);
+ continue;
+ }
pc = strtoull(p, 0, 16);
if(!findsym(pc, CTEXT, &s))
s.name = "??";