kallsyms.h

来自「linux 内核源代码」· C头文件 代码 · 共 119 行

H
119
字号
/* Rewritten and vastly simplified by Rusty Russell for in-kernel * module loader: *   Copyright 2002 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation */#ifndef _LINUX_KALLSYMS_H#define _LINUX_KALLSYMS_H#include <linux/errno.h>#include <linux/stddef.h>#define KSYM_NAME_LEN 128#define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \			 2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + 1)#ifdef CONFIG_KALLSYMS/* Lookup the address for a symbol. Returns 0 if not found. */unsigned long kallsyms_lookup_name(const char *name);extern int kallsyms_lookup_size_offset(unsigned long addr,				  unsigned long *symbolsize,				  unsigned long *offset);/* Lookup an address.  modname is set to NULL if it's in the kernel. */const char *kallsyms_lookup(unsigned long addr,			    unsigned long *symbolsize,			    unsigned long *offset,			    char **modname, char *namebuf);/* Look up a kernel symbol and return it in a text buffer. */extern int sprint_symbol(char *buffer, unsigned long address);/* Look up a kernel symbol and print it to the kernel messages. */extern void __print_symbol(const char *fmt, unsigned long address);int lookup_symbol_name(unsigned long addr, char *symname);int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);#else /* !CONFIG_KALLSYMS */static inline unsigned long kallsyms_lookup_name(const char *name){	return 0;}static inline int kallsyms_lookup_size_offset(unsigned long addr,					      unsigned long *symbolsize,					      unsigned long *offset){	return 0;}static inline const char *kallsyms_lookup(unsigned long addr,					  unsigned long *symbolsize,					  unsigned long *offset,					  char **modname, char *namebuf){	return NULL;}static inline int sprint_symbol(char *buffer, unsigned long addr){	*buffer = '\0';	return 0;}static inline int lookup_symbol_name(unsigned long addr, char *symname){	return -ERANGE;}static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name){	return -ERANGE;}/* Stupid that this does nothing, but I didn't create this mess. */#define __print_symbol(fmt, addr)#endif /*CONFIG_KALLSYMS*//* This macro allows us to keep printk typechecking */static void __check_printsym_format(const char *fmt, ...)__attribute__((format(printf,1,2)));static inline void __check_printsym_format(const char *fmt, ...){}/* ia64 and ppc64 use function descriptors, which contain the real address */#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)#define print_fn_descriptor_symbol(fmt, addr)		\do {						\	unsigned long *__faddr = (unsigned long*) addr;		\	print_symbol(fmt, __faddr[0]);		\} while (0)#else#define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr)#endifstatic inline void print_symbol(const char *fmt, unsigned long addr){	__check_printsym_format(fmt, "");	__print_symbol(fmt, (unsigned long)		       __builtin_extract_return_addr((void *)addr));}#ifndef CONFIG_64BIT#define print_ip_sym(ip)		\do {					\	printk("[<%08lx>]", ip);	\	print_symbol(" %s\n", ip);	\} while(0)#else#define print_ip_sym(ip)		\do {					\	printk("[<%016lx>]", ip);	\	print_symbol(" %s\n", ip);	\} while(0)#endif#endif /*_LINUX_KALLSYMS_H*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?