sparc: Validate that kprobe address is 4-byte aligned.
[safe/jmp/linux-2.6] / arch / sparc / kernel / process_32.c
index e8c43ff..2830b41 100644 (file)
@@ -44,6 +44,7 @@
  * Set in pm platform drivers (apc.c and pmc.c)
  */
 void (*pm_idle)(void);
+EXPORT_SYMBOL(pm_idle);
 
 /* 
  * Power-off handler instantiation for pm.h compliance
@@ -168,11 +169,9 @@ void machine_restart(char * cmd)
 
 void machine_power_off(void)
 {
-#ifdef CONFIG_SUN_AUXIO
        if (auxio_power_register &&
            (strcmp(of_console_device->type, "serial") || scons_pwroff))
                *auxio_power_register |= AUXIO_POWER_OFF;
-#endif
        machine_halt();
 }
 
@@ -182,13 +181,13 @@ static DEFINE_SPINLOCK(sparc_backtrace_lock);
 
 void __show_backtrace(unsigned long fp)
 {
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        unsigned long flags;
        int cpu = smp_processor_id();
 
        spin_lock_irqsave(&sparc_backtrace_lock, flags);
 
-       rw = (struct reg_window *)fp;
+       rw = (struct reg_window32 *)fp;
         while(rw && (((unsigned long) rw) >= PAGE_OFFSET) &&
             !(((unsigned long) rw) & 0x7)) {
                printk("CPU[%d]: ARGS[%08lx,%08lx,%08lx,%08lx,%08lx,%08lx] "
@@ -198,7 +197,7 @@ void __show_backtrace(unsigned long fp)
                       rw->ins[6],
                       rw->ins[7]);
                printk("%pS\n", (void *) rw->ins[7]);
-               rw = (struct reg_window *) rw->ins[6];
+               rw = (struct reg_window32 *) rw->ins[6];
        }
        spin_unlock_irqrestore(&sparc_backtrace_lock, flags);
 }
@@ -260,7 +259,7 @@ void show_stackframe(struct sparc_stackf *sf)
 
 void show_regs(struct pt_regs *r)
 {
-       struct reg_window *rw = (struct reg_window *) r->u_regs[14];
+       struct reg_window32 *rw = (struct reg_window32 *) r->u_regs[14];
 
         printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx    %s\n",
               r->psr, r->pc, r->npc, r->y, print_tainted());
@@ -289,7 +288,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
 {
        unsigned long pc, fp;
        unsigned long task_base;
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        int count = 0;
 
        if (tsk != NULL)
@@ -303,7 +302,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
                if (fp < (task_base + sizeof(struct thread_info)) ||
                    fp >= (task_base + (PAGE_SIZE << 1)))
                        break;
-               rw = (struct reg_window *) fp;
+               rw = (struct reg_window32 *) fp;
                pc = rw->ins[7];
                printk("[%08lx : ", pc);
                printk("%pS ] ", (void *) pc);
@@ -456,7 +455,7 @@ asmlinkage int sparc_do_fork(unsigned long clone_flags,
  */
 extern void ret_from_fork(void);
 
-int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
+int copy_thread(unsigned long clone_flags, unsigned long sp,
                unsigned long unused,
                struct task_struct *p, struct pt_regs *regs)
 {
@@ -675,13 +674,14 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
                             "g1", "g2", "g3", "o0", "o1", "memory", "cc");
        return retval;
 }
+EXPORT_SYMBOL(kernel_thread);
 
 unsigned long get_wchan(struct task_struct *task)
 {
        unsigned long pc, fp, bias = 0;
        unsigned long task_base = (unsigned long) task;
         unsigned long ret = 0;
-       struct reg_window *rw;
+       struct reg_window32 *rw;
        int count = 0;
 
        if (!task || task == current ||
@@ -694,7 +694,7 @@ unsigned long get_wchan(struct task_struct *task)
                if (fp < (task_base + sizeof(struct thread_info)) ||
                    fp >= (task_base + (2 * PAGE_SIZE)))
                        break;
-               rw = (struct reg_window *) fp;
+               rw = (struct reg_window32 *) fp;
                pc = rw->ins[7];
                if (!in_sched_functions(pc)) {
                        ret = pc;