home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / kallsyms.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  67 lines

  1. /* Rewritten and vastly simplified by Rusty Russell for in-kernel
  2.  * module loader:
  3.  *   Copyright 2002 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation
  4.  */
  5. #ifndef _LINUX_KALLSYMS_H
  6. #define _LINUX_KALLSYMS_H
  7.  
  8.  
  9. #define KSYM_NAME_LEN 127
  10.  
  11. #ifdef CONFIG_KALLSYMS
  12. /* Lookup the address for a symbol. Returns 0 if not found. */
  13. unsigned long kallsyms_lookup_name(const char *name);
  14.  
  15. /* Lookup an address.  modname is set to NULL if it's in the kernel. */
  16. const char *kallsyms_lookup(unsigned long addr,
  17.                 unsigned long *symbolsize,
  18.                 unsigned long *offset,
  19.                 char **modname, char *namebuf);
  20.  
  21. /* Replace "%s" in format with address, if found */
  22. extern void __print_symbol(const char *fmt, unsigned long address);
  23.  
  24. #else /* !CONFIG_KALLSYMS */
  25.  
  26. static inline unsigned long kallsyms_lookup_name(const char *name)
  27. {
  28.     return 0;
  29. }
  30.  
  31. static inline const char *kallsyms_lookup(unsigned long addr,
  32.                       unsigned long *symbolsize,
  33.                       unsigned long *offset,
  34.                       char **modname, char *namebuf)
  35. {
  36.     return NULL;
  37. }
  38.  
  39. /* Stupid that this does nothing, but I didn't create this mess. */
  40. #define __print_symbol(fmt, addr)
  41. #endif /*CONFIG_KALLSYMS*/
  42.  
  43. /* This macro allows us to keep printk typechecking */
  44. static void __check_printsym_format(const char *fmt, ...)
  45. __attribute__((format(printf,1,2)));
  46. static inline void __check_printsym_format(const char *fmt, ...)
  47. {
  48. }
  49. /* ia64 and ppc64 use function descriptors, which contain the real address */
  50. #if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
  51. #define print_fn_descriptor_symbol(fmt, addr)        \
  52. do {                        \
  53.     unsigned long *__faddr = (unsigned long*) addr;        \
  54.     print_symbol(fmt, __faddr[0]);        \
  55. } while (0)
  56. #else
  57. #define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr)
  58. #endif
  59.  
  60. #define print_symbol(fmt, addr)            \
  61. do {                        \
  62.     __check_printsym_format(fmt, "");    \
  63.     __print_symbol(fmt, addr);        \
  64. } while(0)
  65.  
  66. #endif /*_LINUX_KALLSYMS_H*/
  67.