Commit 28570e8d authored by Max Filippov's avatar Max Filippov Committed by Chris Zankel
Browse files

xtensa: add trap_set_handler function



trap_set_handler sets new C-handler in the exception table and returns
previous handler.

Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
Signed-off-by: default avatarChris Zankel <chris@zankel.net>
parent c622b29d
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
/*
 * arch/xtensa/include/asm/traps.h
 *
 * 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.
 *
 * Copyright (C) 2012 Tensilica Inc.
 */
#ifndef _XTENSA_TRAPS_H
#define _XTENSA_TRAPS_H

#include <asm/ptrace.h>

/*
 * handler must be either of the following:
 *  void (*)(struct pt_regs *regs);
 *  void (*)(struct pt_regs *regs, unsigned long exccause);
 */
extern void * __init trap_set_handler(int cause, void *handler);
extern void do_unhandled(struct pt_regs *regs, unsigned long exccause);

#endif /* _XTENSA_TRAPS_H */
+11 −0
Original line number Diff line number Diff line
@@ -293,6 +293,17 @@ do_debug(struct pt_regs *regs)
}


/* Set exception C handler - for temporary use when probing exceptions */

void * __init trap_set_handler(int cause, void *handler)
{
	unsigned long *entry = &exc_table[EXC_TABLE_DEFAULT / 4 + cause];
	void *previous = (void *)*entry;
	*entry = (unsigned long)handler;
	return previous;
}


/*
 * Initialize dispatch tables.
 *