Intro | Functions | Defines | Enumerations | Enumeration Values

io.c

Go to the documentation of this file.
00001 
00011 void dlog (const char *fmt, ...)
00012 {
00013   va_list args;
00014   printk("STP: ");
00015   va_start(args, fmt);
00016   vprintk(fmt, args);
00017   va_end(args);
00018 }
00019 
00020 
00021 static const char * (*_stp_kallsyms_lookup)(unsigned long addr,
00022                             unsigned long *symbolsize,
00023                             unsigned long *offset,
00024                             char **modname, char *namebuf)=(void *)KALLSYMS_LOOKUP;
00025 
00026 
00027 #define STP_BUF_LEN 8191
00028 
00029 /* FIXME. These need to be per-cpu */
00030 static char _stp_pbuf[STP_BUF_LEN+1];
00031 static int _stp_pbuf_len = STP_BUF_LEN;
00032 
00033 void _stp_print_buf (const char *fmt, ...)
00034 {
00035   int num;
00036   va_list args;
00037   char *buf = _stp_pbuf + STP_BUF_LEN - _stp_pbuf_len;
00038   va_start(args, fmt);
00039   num = vscnprintf(buf, _stp_pbuf_len, fmt, args);
00040   va_end(args);
00041   if (num > 0)
00042     _stp_pbuf_len -= num;
00043 }
00044 
00045 void _stp_print_buf_init (void)
00046 {
00047   _stp_pbuf_len = STP_BUF_LEN;
00048   _stp_pbuf[0] = 0;
00049 }
00050 
00051 void _stp_print_symbol(const char *fmt, unsigned long address)
00052 {
00053         char *modname;
00054         const char *name;
00055         unsigned long offset, size;
00056         char namebuf[KSYM_NAME_LEN+1];
00057 
00058         name = _stp_kallsyms_lookup(address, &size, &offset, &modname, namebuf);
00059 
00060         if (!name)
00061                 _stp_print_buf("0x%lx", address);
00062         else {
00063           if (modname)
00064             _stp_print_buf("%s+%#lx/%#lx [%s]", name, offset,
00065                            size, modname);
00066           else
00067             _stp_print_buf("%s+%#lx/%#lx", name, offset, size);
00068         }
00069 }
00070 
00071  
00072 unsigned long cur_ret_addr (struct pt_regs *regs)
00073 {
00074 #ifdef __x86_64__
00075   unsigned long *ra = (unsigned long *)regs->rsp;
00076 #else
00077   unsigned long *ra = (unsigned long *)regs->esp;
00078 #endif
00079   if (ra)
00080     return *ra;
00081   else
00082     return 0;
00083 }

Generated on Mon Mar 21 13:29:45 2005 for SystemTap by  doxygen 1.4.1