summaryrefslogtreecommitdiff
path: root/arch/arm26/mm/extable.c
blob: 38e1958d9538ed778ea43f595a545c6893ef1fd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
 *  linux/arch/arm26/mm/extable.c
 */

#include <linux/module.h>
#include <asm/uaccess.h>

int fixup_exception(struct pt_regs *regs)
{
        const struct exception_table_entry *fixup;

        fixup = search_exception_tables(instruction_pointer(regs));

	/*
	 * The kernel runs in SVC mode - make sure we keep running in SVC mode
	 * by frobbing the PSR appropriately (PSR and PC are in the same reg.
	 * on ARM26)
	 */
        if (fixup)
                regs->ARM_pc = fixup->fixup | PSR_I_BIT | MODE_SVC26;

        return fixup != NULL;
}