LCOV - code coverage report
Current view: top level - zephyr/arch/arm64 - thread_stack.h Coverage Total Hit
Test: new.info Lines: 14.3 % 7 1
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2020 Carlo Caione <ccaione@baylibre.com>
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_ARCH_ARM64_THREAD_STACK_H_
       8              : #define ZEPHYR_INCLUDE_ARCH_ARM64_THREAD_STACK_H_
       9              : 
      10              : #include <zephyr/arch/arm64/mm.h>
      11              : 
      12            0 : #define ARCH_STACK_PTR_ALIGN                    16
      13              : 
      14              : #if defined(CONFIG_USERSPACE) || defined(CONFIG_ARM64_STACK_PROTECTION)
      15              : #define Z_ARM64_STACK_BASE_ALIGN                MEM_DOMAIN_ALIGN_AND_SIZE
      16              : #define Z_ARM64_STACK_SIZE_ALIGN                MEM_DOMAIN_ALIGN_AND_SIZE
      17              : #else
      18              : #define Z_ARM64_STACK_BASE_ALIGN                ARCH_STACK_PTR_ALIGN
      19              : #define Z_ARM64_STACK_SIZE_ALIGN                ARCH_STACK_PTR_ALIGN
      20              : #endif
      21              : 
      22              : #if defined(CONFIG_ARM64_STACK_PROTECTION)
      23              : #define Z_ARM64_STACK_GUARD_SIZE                MEM_DOMAIN_ALIGN_AND_SIZE
      24              : #define Z_ARM64_K_STACK_BASE_ALIGN              MEM_DOMAIN_ALIGN_AND_SIZE
      25              : #else
      26              : #define Z_ARM64_STACK_GUARD_SIZE                0
      27              : #define Z_ARM64_K_STACK_BASE_ALIGN              ARCH_STACK_PTR_ALIGN
      28              : #endif
      29              : 
      30              : /*
      31              :  * [ see also comments in arch/arm64/core/thread.c ]
      32              :  *
      33              :  * High memory addresses
      34              :  *
      35              :  * +-------------------+ <- thread.stack_info.start + thread.stack_info.size
      36              :  * |       TLS         |
      37              :  * +-------------------+ <- initial sp (computable with thread.stack_info.delta)
      38              :  * |                   |
      39              :  * |    Used stack     |
      40              :  * |                   |
      41              :  * +...................+ <- thread's current stack pointer
      42              :  * |                   |
      43              :  * |   Unused stack    |
      44              :  * |                   |
      45              :  * +-------------------+ <- thread.stack_info.start
      46              :  * | Privileged stack  | } K_(THREAD|KERNEL)_STACK_RESERVED
      47              :  * +-------------------+ <- thread stack limit (update on every context switch)
      48              :  * |    Stack guard    | } Z_ARM64_STACK_GUARD_SIZE (protected by MMU/MPU)
      49              :  * +-------------------+ <- thread.stack_obj
      50              :  *
      51              :  * Low Memory addresses
      52              :  */
      53              : 
      54              : /* thread stack */
      55            0 : #define ARCH_THREAD_STACK_OBJ_ALIGN(size)       Z_ARM64_STACK_BASE_ALIGN
      56            0 : #define ARCH_THREAD_STACK_SIZE_ADJUST(size)     \
      57              :         ROUND_UP((size), Z_ARM64_STACK_SIZE_ALIGN)
      58            0 : #define ARCH_THREAD_STACK_RESERVED              CONFIG_PRIVILEGED_STACK_SIZE + \
      59              :         Z_ARM64_STACK_GUARD_SIZE
      60              : 
      61              : /* kernel stack */
      62            1 : #define ARCH_KERNEL_STACK_RESERVED              Z_ARM64_STACK_GUARD_SIZE
      63            0 : #define ARCH_KERNEL_STACK_OBJ_ALIGN             Z_ARM64_K_STACK_BASE_ALIGN
      64              : 
      65              : #ifndef _ASMLANGUAGE
      66              : 
      67              : struct z_arm64_thread_stack_header {
      68              :         char privilege_stack[CONFIG_PRIVILEGED_STACK_SIZE];
      69              : } __packed __aligned(Z_ARM64_STACK_BASE_ALIGN);
      70              : 
      71              : #endif /* _ASMLANGUAGE */
      72              : 
      73              : #endif /* ZEPHYR_INCLUDE_ARCH_ARM64_THREAD_STACK_H_ */
        

Generated by: LCOV version 2.0-1