/*
 * Copyright (c) 2018 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _ZEPHYR_EXC_HANDLE_H_
#define _ZEPHYR_EXC_HANDLE_H_

/*
 * This is used by some architectures to define code ranges which may
 * perform operations that could generate a CPU exception that should not
 * be fatal. Instead, the exception should return but set the program
 * counter to a 'fixup' memory address which will gracefully error out.
 *
 * For example, in the case where user mode passes in a C string via
 * system call, the length of that string needs to be measured. A specially
 * written assembly language version of strlen (z_arch_user_string_len)
 * defines start and end symbols where the memory in the string is examined;
 * if this generates a fault, jumping to the fixup symbol within the same
 * function will return an error result to the caller.
 *
 * To ensure precise control of the state of registers and the stack pointer,
 * these functions need to be written in assembly.
 *
 * The arch-specific fault handling code will define an array of these
 * z_exc_handle structures and return from the exception with the PC updated
 * to the fixup address if a match is found.
 */

struct z_exc_handle {
	void *start;
	void *end;
	void *fixup;
};

#define Z_EXC_HANDLE(name) \
	{ &name ## _fault_start, &name ## _fault_end, &name ## _fixup }

#define Z_EXC_DECLARE(name) \
	extern void (*name ## _fault_start)(void); \
	extern void (*name ## _fault_end)(void); \
	extern void (*name ## _fixup)(void)

#endif /* _ZEPHYR_EXC_HANDLE_H_ */
