LCOV - code coverage report
Current view: top level - zephyr/sys - libc-hooks.h Coverage Total Hit
Test: new.info Lines: 0.0 % 2 0
Test Date: 2025-09-05 16:43:28

            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_SYS_LIBC_HOOKS_H_
       8              : #define ZEPHYR_INCLUDE_SYS_LIBC_HOOKS_H_
       9              : 
      10              : #include <zephyr/toolchain.h>
      11              : #include <zephyr/app_memory/app_memdomain.h>
      12              : #include <stdio.h>
      13              : #include <stddef.h>
      14              : 
      15              : #ifdef __cplusplus
      16              : extern "C" {
      17              : #endif
      18              : 
      19              : /*
      20              :  * Private header for specifying accessory functions to the C library internals
      21              :  * that need to call into the kernel as system calls
      22              :  */
      23              : 
      24              : #if defined(CONFIG_NEWLIB_LIBC) || defined(CONFIG_ARCMWDT_LIBC)
      25              : 
      26              : /* syscall generation ignores preprocessor, ensure this is defined to ensure
      27              :  * we don't have compile errors
      28              :  */
      29              : __syscall int zephyr_read_stdin(char *buf, int nbytes);
      30              : 
      31              : __syscall int zephyr_write_stdout(const void *buf, int nbytes);
      32              : 
      33              : #else
      34              : /* Minimal libc and picolibc */
      35              : 
      36            0 : __syscall int zephyr_fputc(int c, FILE * stream);
      37              : 
      38              : #ifdef CONFIG_MINIMAL_LIBC
      39              : /* Minimal libc only */
      40              : 
      41              : __syscall size_t zephyr_fwrite(const void *ZRESTRICT ptr, size_t size,
      42              :                                 size_t nitems, FILE *ZRESTRICT stream);
      43              : #endif
      44              : 
      45              : #endif /* CONFIG_NEWLIB_LIBC */
      46              : 
      47              : void __stdout_hook_install(int (*hook)(int));
      48              : 
      49              : #ifdef CONFIG_USERSPACE
      50              : #ifdef CONFIG_COMMON_LIBC_MALLOC
      51              : 
      52              : /* When using the common malloc implementation with CONFIG_USERSPACE, the
      53              :  * heap will be in a separate partition when there's an MPU or MMU
      54              :  * available.
      55              :  */
      56              : #if CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE != 0 && \
      57              : (defined(CONFIG_MPU) || defined(CONFIG_MMU))
      58              : #define Z_MALLOC_PARTITION_EXISTS 1
      59              : #endif
      60              : 
      61              : #elif defined(CONFIG_NEWLIB_LIBC) && !defined(CONFIG_NEWLIB_LIBC_CUSTOM_SBRK)
      62              : /* If we are using newlib, the heap arena is in one of two areas:
      63              :  *  - If we have an MPU that requires power of two alignment, the heap bounds
      64              :  *    must be specified in Kconfig via CONFIG_NEWLIB_LIBC_ALIGNED_HEAP_SIZE.
      65              :  *  - Otherwise, the heap arena on most arches starts at a suitably
      66              :  *    aligned base address after the `_end` linker symbol, through to the end
      67              :  *    of system RAM.
      68              :  */
      69              : #if (!defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT) || \
      70              :      (defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT) && \
      71              :       CONFIG_NEWLIB_LIBC_ALIGNED_HEAP_SIZE))
      72              : #define Z_MALLOC_PARTITION_EXISTS 1
      73              : #endif
      74              : 
      75              : #endif /* CONFIG_NEWLIB_LIBC */
      76              : 
      77              : #ifdef Z_MALLOC_PARTITION_EXISTS
      78              : /* Memory partition containing the libc malloc arena. Configuration controls
      79              :  * whether this is available, and an arena size may need to be set.
      80              :  */
      81              : extern struct k_mem_partition z_malloc_partition;
      82              : #endif
      83              : 
      84              : #ifdef CONFIG_NEED_LIBC_MEM_PARTITION
      85              : /* - All newlib globals will be placed into z_libc_partition.
      86              :  * - Minimal C library globals, if any, will be placed into
      87              :  *   z_libc_partition.
      88              :  * - Stack canary globals will be placed into z_libc_partition since
      89              :  *   it is not worth placing in its own partition.
      90              :  * - Some architectures may place the global pointer to the thread local
      91              :  *   storage in z_libc_partition since it is not worth placing in its
      92              :  *   own partition.
      93              :  */
      94              : #define Z_LIBC_PARTITION_EXISTS 1
      95              : 
      96              : /* C library globals, except the malloc arena */
      97              : extern struct k_mem_partition z_libc_partition;
      98              : #endif
      99              : #endif /* CONFIG_USERSPACE */
     100              : 
     101              : #include <zephyr/syscalls/libc-hooks.h>
     102              : 
     103              : /* C library memory partitions */
     104              : #define Z_LIBC_DATA K_APP_DMEM(z_libc_partition)
     105              : 
     106              : #ifdef __cplusplus
     107              : }
     108              : #endif
     109              : 
     110              : #endif /* ZEPHYR_INCLUDE_SYS_LIBC_HOOKS_H_ */
        

Generated by: LCOV version 2.0-1