forked from Minki/linux
m68k: switch to generic extable.h
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
d597580d37
commit
68acfdcb47
@ -5,6 +5,7 @@ generic-y += device.h
|
||||
generic-y += emergency-restart.h
|
||||
generic-y += errno.h
|
||||
generic-y += exec.h
|
||||
generic-y += extable.h
|
||||
generic-y += futex.h
|
||||
generic-y += hw_irq.h
|
||||
generic-y += ioctl.h
|
||||
|
@ -122,16 +122,6 @@ static inline void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||
wrusp(usp);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
extern int handle_kernel_fault(struct pt_regs *regs);
|
||||
#else
|
||||
static inline int handle_kernel_fault(struct pt_regs *regs)
|
||||
{
|
||||
/* Any fault in kernel is fatal on non-mmu */
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Forward declaration, a strange C thing */
|
||||
struct task_struct;
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <asm/uaccess_mm.h>
|
||||
#endif
|
||||
|
||||
#include <asm/extable.h>
|
||||
#ifdef CONFIG_CPU_HAS_NO_UNALIGNED
|
||||
#include <asm-generic/uaccess-unaligned.h>
|
||||
#else
|
||||
|
@ -31,24 +31,6 @@ static inline int access_ok(int type, const void __user *addr,
|
||||
#define MOVES "move"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The exception table consists of pairs of addresses: the first is the
|
||||
* address of an instruction that is allowed to fault, and the second is
|
||||
* the address at which the program should continue. No registers are
|
||||
* modified, so it is entirely up to the continuation code to figure out
|
||||
* what to do.
|
||||
*
|
||||
* All the routines below use bits of fixup code that are out of line
|
||||
* with the main instruction path. This means when everything is well,
|
||||
* we don't even have to jump over them. Further, they do not intrude
|
||||
* on our cache or tlb entries.
|
||||
*/
|
||||
|
||||
struct exception_table_entry
|
||||
{
|
||||
unsigned long insn, fixup;
|
||||
};
|
||||
|
||||
extern int __put_user_bad(void);
|
||||
extern int __get_user_bad(void);
|
||||
|
||||
|
@ -22,25 +22,6 @@ static inline int _access_ok(unsigned long addr, unsigned long size)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* The exception table consists of pairs of addresses: the first is the
|
||||
* address of an instruction that is allowed to fault, and the second is
|
||||
* the address at which the program should continue. No registers are
|
||||
* modified, so it is entirely up to the continuation code to figure out
|
||||
* what to do.
|
||||
*
|
||||
* All the routines below use bits of fixup code that are out of line
|
||||
* with the main instruction path. This means when everything is well,
|
||||
* we don't even have to jump over them. Further, they do not intrude
|
||||
* on our cache or tlb entries.
|
||||
*/
|
||||
|
||||
struct exception_table_entry
|
||||
{
|
||||
unsigned long insn, fixup;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* These are the main single-value transfer routines. They automatically
|
||||
* use the right size if we just have the right pointer type.
|
||||
|
@ -88,7 +88,7 @@ static inline int frame_extra_sizes(int f)
|
||||
return frame_size_change[f];
|
||||
}
|
||||
|
||||
int handle_kernel_fault(struct pt_regs *regs)
|
||||
int fixup_exception(struct pt_regs *regs)
|
||||
{
|
||||
const struct exception_table_entry *fixup;
|
||||
struct pt_regs *tregs;
|
||||
|
@ -1016,8 +1016,13 @@ asmlinkage void trap_c(struct frame *fp)
|
||||
/* traced a trapping instruction on a 68020/30,
|
||||
* real exception will be executed afterwards.
|
||||
*/
|
||||
} else if (!handle_kernel_fault(&fp->ptregs))
|
||||
bad_super_trap(fp);
|
||||
return;
|
||||
}
|
||||
#ifdef CONFIG_MMU
|
||||
if (fixup_exception(&fp->ptregs))
|
||||
return;
|
||||
#endif
|
||||
bad_super_trap(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ int send_fault_sig(struct pt_regs *regs)
|
||||
force_sig_info(siginfo.si_signo,
|
||||
&siginfo, current);
|
||||
} else {
|
||||
if (handle_kernel_fault(regs))
|
||||
if (fixup_exception(regs))
|
||||
return -1;
|
||||
|
||||
//if (siginfo.si_signo == SIGBUS)
|
||||
|
Loading…
Reference in New Issue
Block a user