LCOV - code coverage report
Current view: top level - zephyr/arch/common - exc_handle.h Hit Total Coverage
Test: new.info Lines: 0 1 0.0 %
Date: 2025-01-09 03:30:05

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2018 Intel Corporation.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_EXC_HANDLE_H_
       8             : #define ZEPHYR_INCLUDE_EXC_HANDLE_H_
       9             : 
      10             : /*
      11             :  * This is used by some architectures to define code ranges which may
      12             :  * perform operations that could generate a CPU exception that should not
      13             :  * be fatal. Instead, the exception should return but set the program
      14             :  * counter to a 'fixup' memory address which will gracefully error out.
      15             :  *
      16             :  * For example, in the case where user mode passes in a C string via
      17             :  * system call, the length of that string needs to be measured. A specially
      18             :  * written assembly language version of strlen (arch_user_string_len)
      19             :  * defines start and end symbols where the memory in the string is examined;
      20             :  * if this generates a fault, jumping to the fixup symbol within the same
      21             :  * function will return an error result to the caller.
      22             :  *
      23             :  * To ensure precise control of the state of registers and the stack pointer,
      24             :  * these functions need to be written in assembly.
      25             :  *
      26             :  * The arch-specific fault handling code will define an array of these
      27             :  * z_exc_handle structures and return from the exception with the PC updated
      28             :  * to the fixup address if a match is found.
      29             :  */
      30             : 
      31             : struct z_exc_handle {
      32             :         void *start;
      33             :         void *end;
      34             :         void *fixup;
      35             : };
      36             : 
      37             : #define Z_EXC_HANDLE(name) \
      38             :         { name ## _fault_start, name ## _fault_end, name ## _fixup }
      39             : 
      40             : #define Z_EXC_DECLARE(name)          \
      41             :         void name ## _fault_start(void); \
      42             :         void name ## _fault_end(void);   \
      43             :         void name ## _fixup(void)
      44             : 
      45             : #endif /* ZEPHYR_INCLUDE_EXC_HANDLE_H_ */

Generated by: LCOV version 1.14