Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at fa4144b758d58341d4e082ac2af259e97fbcbeee 122 lines 3.3 kB view raw
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#include <linux/errno.h> 9#include <linux/stddef.h> 10 11#define KSYM_NAME_LEN 128 12#define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \ 13 2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + 1) 14 15#ifdef CONFIG_KALLSYMS 16/* Lookup the address for a symbol. Returns 0 if not found. */ 17unsigned long kallsyms_lookup_name(const char *name); 18 19extern int kallsyms_lookup_size_offset(unsigned long addr, 20 unsigned long *symbolsize, 21 unsigned long *offset); 22 23/* Lookup an address. modname is set to NULL if it's in the kernel. */ 24const char *kallsyms_lookup(unsigned long addr, 25 unsigned long *symbolsize, 26 unsigned long *offset, 27 char **modname, char *namebuf); 28 29/* Look up a kernel symbol and return it in a text buffer. */ 30extern int sprint_symbol(char *buffer, unsigned long address); 31 32/* Look up a kernel symbol and print it to the kernel messages. */ 33extern void __print_symbol(const char *fmt, unsigned long address); 34 35int lookup_symbol_name(unsigned long addr, char *symname); 36int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name); 37 38#else /* !CONFIG_KALLSYMS */ 39 40static inline unsigned long kallsyms_lookup_name(const char *name) 41{ 42 return 0; 43} 44 45static inline int kallsyms_lookup_size_offset(unsigned long addr, 46 unsigned long *symbolsize, 47 unsigned long *offset) 48{ 49 return 0; 50} 51 52static inline const char *kallsyms_lookup(unsigned long addr, 53 unsigned long *symbolsize, 54 unsigned long *offset, 55 char **modname, char *namebuf) 56{ 57 return NULL; 58} 59 60static inline int sprint_symbol(char *buffer, unsigned long addr) 61{ 62 *buffer = '\0'; 63 return 0; 64} 65 66static inline int lookup_symbol_name(unsigned long addr, char *symname) 67{ 68 return -ERANGE; 69} 70 71static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name) 72{ 73 return -ERANGE; 74} 75 76/* Stupid that this does nothing, but I didn't create this mess. */ 77#define __print_symbol(fmt, addr) 78#endif /*CONFIG_KALLSYMS*/ 79 80/* This macro allows us to keep printk typechecking */ 81static void __check_printsym_format(const char *fmt, ...) 82__attribute__((format(printf,1,2))); 83static inline void __check_printsym_format(const char *fmt, ...) 84{ 85} 86 87static inline void print_symbol(const char *fmt, unsigned long addr) 88{ 89 __check_printsym_format(fmt, ""); 90 __print_symbol(fmt, (unsigned long) 91 __builtin_extract_return_addr((void *)addr)); 92} 93 94/* 95 * Pretty-print a function pointer. 96 * 97 * ia64 and ppc64 function pointers are really function descriptors, 98 * which contain a pointer the real address. 99 */ 100static inline void print_fn_descriptor_symbol(const char *fmt, void *addr) 101{ 102#if defined(CONFIG_IA64) || defined(CONFIG_PPC64) 103 addr = *(void **)addr; 104#endif 105 print_symbol(fmt, (unsigned long)addr); 106} 107 108#ifndef CONFIG_64BIT 109#define print_ip_sym(ip) \ 110do { \ 111 printk("[<%08lx>]", ip); \ 112 print_symbol(" %s\n", ip); \ 113} while(0) 114#else 115#define print_ip_sym(ip) \ 116do { \ 117 printk("[<%016lx>]", ip); \ 118 print_symbol(" %s\n", ip); \ 119} while(0) 120#endif 121 122#endif /*_LINUX_KALLSYMS_H*/