patch-2.4.6 linux/arch/arm/kernel/traps.c
Next file: linux/arch/arm/mach-ebsa110/arch.c
Previous file: linux/arch/arm/kernel/sys_arm.c
Back to the patch index
Back to the overall index
- Lines: 68
- Date:
Wed Jun 27 14:12:04 2001
- Orig file:
v2.4.5/linux/arch/arm/kernel/traps.c
- Orig date:
Thu Feb 8 16:32:44 2001
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
@@ -20,6 +20,7 @@
#include <linux/mm.h>
#include <linux/spinlock.h>
#include <linux/ptrace.h>
+#include <linux/elf.h>
#include <linux/init.h>
#include <asm/atomic.h>
@@ -27,6 +28,7 @@
#include <asm/pgtable.h>
#include <asm/system.h>
#include <asm/uaccess.h>
+#include <asm/unistd.h>
#include "ptrace.h"
@@ -143,12 +145,24 @@
c_backtrace(fp, processor_mode(regs));
}
+/*
+ * This is called from SysRq-T (show_task) to display the current
+ * call trace for each process. Very useful.
+ */
+void show_trace_task(struct task_struct *tsk)
+{
+ if (tsk != current) {
+ unsigned int fp = tsk->thread.save->fp;
+ c_backtrace(fp, 0x10);
+ }
+}
+
spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
/*
* This function is protected against re-entrancy.
*/
-void die(const char *str, struct pt_regs *regs, int err)
+NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
{
struct task_struct *tsk = current;
@@ -173,9 +187,9 @@
fs = get_fs();
set_fs(KERNEL_DS);
- dump_instr(regs);
dump_stack(tsk, (unsigned long)(regs + 1));
dump_backtrace(regs, tsk);
+ dump_instr(regs);
set_fs(fs);
}
@@ -448,9 +462,12 @@
void __init trap_init(void)
{
- extern void __trap_init(void);
+ extern void __trap_init(void *);
- __trap_init();
+ __trap_init((void *)vectors_base());
+ if (vectors_base() != 0)
+ printk("Relocating machine vectors to 0x%08x\n",
+ vectors_base());
#ifdef CONFIG_CPU_32
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)