Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a4f7c66 authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: Share bug/debug traps across _32 and _64.



Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 811d50cb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ extra-y := head_32.o init_task.o vmlinux.lds

obj-y	:= debugtraps.o io.o io_generic.o irq.o machvec.o process_32.o \
	   ptrace_32.o semaphore.o setup.o signal_32.o sys_sh.o sys_sh32.o \
	   syscalls_32.o time.o topology.o traps_32.o
	   syscalls_32.o time.o topology.o traps.o traps_32.o

obj-y				+= cpu/ timers/
obj-$(CONFIG_VSYSCALL)		+= vsyscall/
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ extra-y := head_64.o init_task.o vmlinux.lds

obj-y	:= debugtraps.o io.o io_generic.o irq.o machvec.o process_64.o \
	   ptrace_64.o semaphore.o setup.o signal_64.o sys_sh.o sys_sh64.o \
	   syscalls_64.o time.o topology.o traps_64.o
	   syscalls_64.o time.o topology.o traps.o traps_64.o

obj-y				+= cpu/ timers/
obj-$(CONFIG_VSYSCALL)		+= vsyscall/
+1 −1
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ ENTRY(sh_bios_handler)
1:	.long	gdb_vbr_vector
#endif /* CONFIG_SH_STANDARD_BIOS */

ENTRY(address_error_handler)
ENTRY(address_error_trap_handler)
	mov	r15,r4				! regs
	add	#4,r4
	mov	#OFF_PC,r0
+0 −46
Original line number Diff line number Diff line
@@ -482,49 +482,3 @@ asmlinkage void break_point_trap(void)

	force_sig(SIGTRAP, current);
}

/*
 * Generic trap handler.
 */
asmlinkage void debug_trap_handler(unsigned long r4, unsigned long r5,
				   unsigned long r6, unsigned long r7,
				   struct pt_regs __regs)
{
	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);

	/* Rewind */
	regs->pc -= instruction_size(ctrl_inw(regs->pc - 4));

	if (notify_die(DIE_TRAP, "debug trap", regs, 0, regs->tra & 0xff,
		       SIGTRAP) == NOTIFY_STOP)
		return;

	force_sig(SIGTRAP, current);
}

/*
 * Special handler for BUG() traps.
 */
asmlinkage void bug_trap_handler(unsigned long r4, unsigned long r5,
				 unsigned long r6, unsigned long r7,
				 struct pt_regs __regs)
{
	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);

	/* Rewind */
	regs->pc -= instruction_size(ctrl_inw(regs->pc - 4));

	if (notify_die(DIE_TRAP, "bug trap", regs, 0, TRAPA_BUG_OPCODE & 0xff,
		       SIGTRAP) == NOTIFY_STOP)
		return;

#ifdef CONFIG_BUG
	if (__kernel_text_address(instruction_pointer(regs))) {
		u16 insn = *(u16 *)instruction_pointer(regs);
		if (insn == TRAPA_BUG_OPCODE)
			handle_BUG(regs);
	}
#endif

	force_sig(SIGTRAP, current);
}
+6 −9
Original line number Diff line number Diff line
/*
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 * arch/sh/kernel/process_64.c
 *
 * arch/sh64/kernel/process.c
 * This file handles the architecture-dependent parts of process handling..
 *
 * Copyright (C) 2000, 2001  Paolo Alberelli
 * Copyright (C) 2003  Paul Mundt
 * Copyright (C) 2003 - 2007  Paul Mundt
 * Copyright (C) 2003, 2004 Richard Curnow
 *
 * Started from SH3/4 version:
@@ -15,10 +13,9 @@
 *   In turn started from i386 version:
 *     Copyright (C) 1995  Linus Torvalds
 *
 */

/*
 * This file handles the architecture-dependent parts of process handling..
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 */
#include <linux/mm.h>
#include <linux/fs.h>
Loading