Merge branch 'for-linus' of git://linux-nfs.org/~bfields/linux
[pandora-kernel.git] / arch / arm / kernel / process.c
index 5d6e652..46bf2ed 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/unistd.h>
 #include <linux/slab.h>
 #include <linux/user.h>
-#include <linux/a.out.h>
 #include <linux/delay.h>
 #include <linux/reboot.h>
 #include <linux/interrupt.h>
@@ -28,6 +27,7 @@
 #include <linux/elfcore.h>
 #include <linux/pm.h>
 #include <linux/tick.h>
+#include <linux/utsname.h>
 
 #include <asm/leds.h>
 #include <asm/processor.h>
@@ -43,6 +43,10 @@ static const char *processor_modes[] = {
   "UK8_32" , "UK9_32" , "UK10_32", "UND_32" , "UK12_32", "UK13_32", "UK14_32", "SYS_32"
 };
 
+static const char *isa_modes[] = {
+  "ARM" , "Thumb" , "Jazelle", "ThumbEE"
+};
+
 extern void setup_mm_for_reboot(char mode);
 
 static volatile int hlt_counter;
@@ -199,16 +203,19 @@ void machine_restart(char * __unused)
 
 void __show_regs(struct pt_regs *regs)
 {
-       unsigned long flags = condition_codes(regs);
+       unsigned long flags;
+       char buf[64];
 
-       printk("CPU: %d\n", smp_processor_id());
+       printk("CPU: %d    %s  (%s %.*s)\n",
+               smp_processor_id(), print_tainted(), init_utsname()->release,
+               (int)strcspn(init_utsname()->version, " "),
+               init_utsname()->version);
        print_symbol("PC is at %s\n", instruction_pointer(regs));
        print_symbol("LR is at %s\n", regs->ARM_lr);
-       printk("pc : [<%08lx>]    lr : [<%08lx>]    %s\n"
+       printk("pc : [<%08lx>]    lr : [<%08lx>]    psr: %08lx\n"
               "sp : %08lx  ip : %08lx  fp : %08lx\n",
-               instruction_pointer(regs),
-               regs->ARM_lr, print_tainted(), regs->ARM_sp,
-               regs->ARM_ip, regs->ARM_fp);
+               regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr,
+               regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);
        printk("r10: %08lx  r9 : %08lx  r8 : %08lx\n",
                regs->ARM_r10, regs->ARM_r9,
                regs->ARM_r8);
@@ -218,43 +225,46 @@ void __show_regs(struct pt_regs *regs)
        printk("r3 : %08lx  r2 : %08lx  r1 : %08lx  r0 : %08lx\n",
                regs->ARM_r3, regs->ARM_r2,
                regs->ARM_r1, regs->ARM_r0);
-       printk("Flags: %c%c%c%c",
-               flags & PSR_N_BIT ? 'N' : 'n',
-               flags & PSR_Z_BIT ? 'Z' : 'z',
-               flags & PSR_C_BIT ? 'C' : 'c',
-               flags & PSR_V_BIT ? 'V' : 'v');
-       printk("  IRQs o%s  FIQs o%s  Mode %s%s  Segment %s\n",
-               interrupts_enabled(regs) ? "n" : "ff",
+
+       flags = regs->ARM_cpsr;
+       buf[0] = flags & PSR_N_BIT ? 'N' : 'n';
+       buf[1] = flags & PSR_Z_BIT ? 'Z' : 'z';
+       buf[2] = flags & PSR_C_BIT ? 'C' : 'c';
+       buf[3] = flags & PSR_V_BIT ? 'V' : 'v';
+       buf[4] = '\0';
+
+       printk("Flags: %s  IRQs o%s  FIQs o%s  Mode %s  ISA %s  Segment %s\n",
+               buf, interrupts_enabled(regs) ? "n" : "ff",
                fast_interrupts_enabled(regs) ? "n" : "ff",
                processor_modes[processor_mode(regs)],
-               thumb_mode(regs) ? " (T)" : "",
+               isa_modes[isa_mode(regs)],
                get_fs() == get_ds() ? "kernel" : "user");
-#if CONFIG_CPU_CP15
+#ifdef CONFIG_CPU_CP15
        {
                unsigned int ctrl;
-                 __asm__ (
-               "       mrc p15, 0, %0, c1, c0\n"
-               : "=r" (ctrl));
-               printk("Control: %04X\n", ctrl);
-       }
+
+               buf[0] = '\0';
 #ifdef CONFIG_CPU_CP15_MMU
-       {
-               unsigned int transbase, dac;
-                 __asm__ (
-               "       mrc p15, 0, %0, c2, c0\n"
-               "       mrc p15, 0, %1, c3, c0\n"
-               : "=r" (transbase), "=r" (dac));
-               printk("Table: %08X  DAC: %08X\n",
-                       transbase, dac);
-       }
+               {
+                       unsigned int transbase, dac;
+                       asm("mrc p15, 0, %0, c2, c0\n\t"
+                           "mrc p15, 0, %1, c3, c0\n"
+                           : "=r" (transbase), "=r" (dac));
+                       snprintf(buf, sizeof(buf), "  Table: %08x  DAC: %08x",
+                               transbase, dac);
+               }
 #endif
+               asm("mrc p15, 0, %0, c1, c0\n" : "=r" (ctrl));
+
+               printk("Control: %08x%s\n", ctrl, buf);
+       }
 #endif
 }
 
 void show_regs(struct pt_regs * regs)
 {
        printk("\n");
-       printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
+       printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);
        __show_regs(regs);
        __backtrace();
 }
@@ -356,35 +366,6 @@ int dump_fpu (struct pt_regs *regs, struct user_fp *fp)
 }
 EXPORT_SYMBOL(dump_fpu);
 
-/*
- * fill in the user structure for a core dump..
- */
-void dump_thread(struct pt_regs * regs, struct user * dump)
-{
-       struct task_struct *tsk = current;
-
-       dump->magic = CMAGIC;
-       dump->start_code = tsk->mm->start_code;
-       dump->start_stack = regs->ARM_sp & ~(PAGE_SIZE - 1);
-
-       dump->u_tsize = (tsk->mm->end_code - tsk->mm->start_code) >> PAGE_SHIFT;
-       dump->u_dsize = (tsk->mm->brk - tsk->mm->start_data + PAGE_SIZE - 1) >> PAGE_SHIFT;
-       dump->u_ssize = 0;
-
-       dump->u_debugreg[0] = tsk->thread.debug.bp[0].address;
-       dump->u_debugreg[1] = tsk->thread.debug.bp[1].address;
-       dump->u_debugreg[2] = tsk->thread.debug.bp[0].insn.arm;
-       dump->u_debugreg[3] = tsk->thread.debug.bp[1].insn.arm;
-       dump->u_debugreg[4] = tsk->thread.debug.nsaved;
-
-       if (dump->start_stack < 0x04000000)
-               dump->u_ssize = (0x04000000 - dump->start_stack) >> PAGE_SHIFT;
-
-       dump->regs = *regs;
-       dump->u_fpvalid = dump_fpu (regs, &dump->u_fp);
-}
-EXPORT_SYMBOL(dump_thread);
-
 /*
  * Shuffle the argument into the correct register before calling the
  * thread function.  r1 is the thread argument, r2 is the pointer to