sh: gcc4 support.
This fixes up the kernel for gcc4. The existing exception handlers needed some wrapping for pt_regs access, acessing the registers via a RELOC_HIDE() pointer. The strcpy() issues popped up here too, so add -ffreestanding and kill off the symbol export. Signed-off-by: Stuart Menefy <stuart.menefy@st.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
committed by
Paul Mundt
parent
53644087a6
commit
f0bc814cfb
@@ -296,16 +296,17 @@ ieee_fpe_handler (struct pt_regs *regs)
|
||||
}
|
||||
|
||||
asmlinkage void
|
||||
do_fpu_error(unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7,
|
||||
struct pt_regs regs)
|
||||
do_fpu_error(unsigned long r4, unsigned long r5, unsigned long r6,
|
||||
unsigned long r7, struct pt_regs __regs)
|
||||
{
|
||||
struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
|
||||
struct task_struct *tsk = current;
|
||||
|
||||
if (ieee_fpe_handler (®s))
|
||||
if (ieee_fpe_handler(regs))
|
||||
return;
|
||||
|
||||
regs.pc += 2;
|
||||
save_fpu(tsk, ®s);
|
||||
regs->pc += 2;
|
||||
save_fpu(tsk, regs);
|
||||
tsk->thread.trap_no = 11;
|
||||
tsk->thread.error_code = 0;
|
||||
force_sig(SIGFPE, tsk);
|
||||
@@ -313,12 +314,13 @@ do_fpu_error(unsigned long r4, unsigned long r5, unsigned long r6, unsigned long
|
||||
|
||||
asmlinkage void
|
||||
do_fpu_state_restore(unsigned long r4, unsigned long r5, unsigned long r6,
|
||||
unsigned long r7, struct pt_regs regs)
|
||||
unsigned long r7, struct pt_regs __regs)
|
||||
{
|
||||
struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
|
||||
struct task_struct *tsk = current;
|
||||
|
||||
grab_fpu(®s);
|
||||
if (!user_mode(®s)) {
|
||||
grab_fpu(regs);
|
||||
if (!user_mode(regs)) {
|
||||
printk(KERN_ERR "BUG: FPU is used in kernel mode.\n");
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user