Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

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


 * 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)          \
	void name ## _fault_start(void); \
	void name ## _fault_end(void);   \
	void name ## _fixup(void)