LCOV - code coverage report
Current view: top level - test - checktools.inc (source / functions) Hit Total Coverage
Test: mkernel.info Lines: 17 18 94.4 %
Date: 2024-12-05 21:00:54 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /**
       2             :  *    @file  checktools.inc
       3             :  *   @brief 
       4             :  *
       5             :  *  @author  François Cerbelle (Fanfan), francois@cerbelle.net
       6             :  *
       7             :  *  @internal
       8             :  *       Created:  19/07/2024
       9             :  *      Revision:  none
      10             :  * Last modified:  2024-11-20 22:48
      11             :  *      Compiler:  gcc
      12             :  *  Organization:  Cerbelle.net
      13             :  *     Copyright:  Copyright (c) 2024, François Cerbelle
      14             :  *
      15             :  *  This source code is released for free distribution under the terms of the
      16             :  *  GNU General Public License as published by the Free Software Foundation.
      17             :  */
      18             : 
      19             : 
      20             : #ifdef HAVE_CONFIG_H
      21             : #include "config.h"
      22             : #endif
      23             : 
      24             : #include <unistd.h>                             /* pid_t getpid() */
      25             : #include <sys/stat.h>                           /* mkdir(), chdir(), mode_t */
      26             : 
      27             : #ifdef NDEBUG
      28             : /* Operating system / libc catched */
      29             : #define SIG_ABRTSEGV 11
      30             : #else
      31             : /* Assertion catched */
      32             : #define SIG_ABRTSEGV 6
      33             : #endif
      34             : 
      35             : #if GPROF
      36             : #include <stdio.h>
      37             : #include <stdlib.h>
      38             : #endif
      39             : 
      40             : #ifdef GCOV
      41             : #include <signal.h>                             /* signal(), SIGABRT, SIG_DFL */
      42             : #include <stdio.h>
      43             : #include <stdlib.h>
      44             : void __gcov_dump();
      45          80 : static void signals_handler(int sig)
      46             : {
      47             :     (void)sig;
      48          80 :     signal(SIGABRT,SIG_DFL);
      49          80 :     signal(SIGSEGV,SIG_DFL);
      50          80 :     __gcov_dump();
      51           0 : }
      52             : #endif /* GCOV */
      53             : 
      54         363 : static void signals_catch() {
      55             : #ifdef GCOV
      56         363 :     signal(SIGABRT,signals_handler);
      57         363 :     signal(SIGSEGV,signals_handler);
      58             : #endif
      59         363 : }
      60             : 
      61         283 : static void signals_release() {
      62             : #ifdef GCOV
      63         283 :     signal(SIGABRT,SIG_DFL);
      64         283 :     signal(SIGSEGV,SIG_DFL);
      65             : #endif
      66         283 : }
      67             : 
      68             : static pid_t _forktest_pid;
      69             : 
      70         307 : static void forktest_init() {
      71         307 :     _forktest_pid = getpid();
      72         307 : }
      73             : 
      74             : #define forktest_only if (_forktest_pid==getpid()) return
      75             : 
      76         363 : static void forktest_gprofdir() {
      77             : #ifdef GPROF
      78             :     if (_forktest_pid!=getpid()) {
      79             :         /* Forked : mkdir/chdir to a subdir for gmon.out */
      80             :         char dirname[20];
      81             :         int result = snprintf(dirname, 20, "%d", getpid());
      82             :         if ((0<result)&&(20>result)) {
      83             :             mkdir("gprof", S_IRWXU);
      84             :             chdir("gprof");
      85             :             mkdir(dirname, S_IRWXU);
      86             :             chdir(dirname);
      87             :         } else {
      88             :             fprintf(stderr,"Unable to create GPROF/gmon.out subdir\n");
      89             :             abort();
      90             :         }
      91             :     }
      92             : #endif /* GPROF */
      93         363 : }
      94             : 
      95             : /* vim:se filetype=c : */

Generated by: LCOV version 1.16