Kernel debugging helpers
[akaros.git] / kern / src / kdebug.c
1 /* Copyright (c) 2011 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Arch-independent kernel debugging */
6
7 #include <kdebug.h>
8 #include <kmalloc.h>
9 #include <string.h>
10 #include <assert.h>
11
12 /* Returns a null-terminated string with the function name for a given PC /
13  * instruction pointer.  kfree() the result. */
14 char *get_fn_name(uintptr_t pc)
15 {
16         struct eipdebuginfo debuginfo;
17         char *buf;
18         if (debuginfo_eip(pc, &debuginfo))
19                 return 0;
20         buf = kmalloc(debuginfo.eip_fn_namelen + 1, 0);
21         if (!buf)
22                 return 0;
23         assert(debuginfo.eip_fn_name);
24         strncpy(buf, debuginfo.eip_fn_name, debuginfo.eip_fn_namelen);
25         buf[debuginfo.eip_fn_namelen] = 0;
26         return buf;
27 }