⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extable.c

📁 linux-2.6.15.6
💻 C
字号:
/* * linux/arch/sparc/mm/extable.c */#include <linux/config.h>#include <linux/module.h>#include <asm/uaccess.h>void sort_extable(struct exception_table_entry *start,		  struct exception_table_entry *finish){}/* Caller knows they are in a range if ret->fixup == 0 */const struct exception_table_entry *search_extable(const struct exception_table_entry *start,	       const struct exception_table_entry *last,	       unsigned long value){	const struct exception_table_entry *walk;	/* Single insn entries are encoded as:	 *	word 1:	insn address	 *	word 2:	fixup code address	 *	 * Range entries are encoded as:	 *	word 1: first insn address	 *	word 2: 0	 *	word 3: last insn address + 4 bytes	 *	word 4: fixup code address	 *	 * See asm/uaccess.h for more details.	 */	/* 1. Try to find an exact match. */	for (walk = start; walk <= last; walk++) {		if (walk->fixup == 0) {			/* A range entry, skip both parts. */			walk++;			continue;		}		if (walk->insn == value)			return walk;	}	/* 2. Try to find a range match. */	for (walk = start; walk <= (last - 1); walk++) {		if (walk->fixup)			continue;		if (walk[0].insn <= value && walk[1].insn > value)			return walk;		walk++;	}        return NULL;}/* Special extable search, which handles ranges.  Returns fixup */unsigned long search_extables_range(unsigned long addr, unsigned long *g2){	const struct exception_table_entry *entry;	entry = search_exception_tables(addr);	if (!entry)		return 0;	/* Inside range?  Fix g2 and return correct fixup */	if (!entry->fixup) {		*g2 = (addr - entry->insn) / 4;		return (entry + 1)->fixup;	}	return entry->fixup;}

⌨️ 快捷键说明

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