LCOV - code coverage report
Current view: top level - include/linux - elfcore.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 4 0.0 %
Date: 2023-04-06 08:38:28 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_ELFCORE_H
       3             : #define _LINUX_ELFCORE_H
       4             : 
       5             : #include <linux/user.h>
       6             : #include <linux/bug.h>
       7             : #include <linux/sched/task_stack.h>
       8             : #include <linux/types.h>
       9             : #include <linux/signal.h>
      10             : #include <linux/time.h>
      11             : #include <linux/ptrace.h>
      12             : #include <linux/fs.h>
      13             : #include <linux/elf.h>
      14             : 
      15             : struct coredump_params;
      16             : 
      17             : struct elf_siginfo
      18             : {
      19             :         int     si_signo;                       /* signal number */
      20             :         int     si_code;                        /* extra code */
      21             :         int     si_errno;                       /* errno */
      22             : };
      23             : 
      24             : /*
      25             :  * Definitions to generate Intel SVR4-like core files.
      26             :  * These mostly have the same names as the SVR4 types with "elf_"
      27             :  * tacked on the front to prevent clashes with linux definitions,
      28             :  * and the typedef forms have been avoided.  This is mostly like
      29             :  * the SVR4 structure, but more Linuxy, with things that Linux does
      30             :  * not support and which gdb doesn't really use excluded.
      31             :  */
      32             : struct elf_prstatus_common
      33             : {
      34             :         struct elf_siginfo pr_info;     /* Info associated with signal */
      35             :         short   pr_cursig;              /* Current signal */
      36             :         unsigned long pr_sigpend;       /* Set of pending signals */
      37             :         unsigned long pr_sighold;       /* Set of held signals */
      38             :         pid_t   pr_pid;
      39             :         pid_t   pr_ppid;
      40             :         pid_t   pr_pgrp;
      41             :         pid_t   pr_sid;
      42             :         struct __kernel_old_timeval pr_utime;   /* User time */
      43             :         struct __kernel_old_timeval pr_stime;   /* System time */
      44             :         struct __kernel_old_timeval pr_cutime;  /* Cumulative user time */
      45             :         struct __kernel_old_timeval pr_cstime;  /* Cumulative system time */
      46             : };
      47             : 
      48             : struct elf_prstatus
      49             : {
      50             :         struct elf_prstatus_common common;
      51             :         elf_gregset_t pr_reg;   /* GP registers */
      52             :         int pr_fpvalid;         /* True if math co-processor being used.  */
      53             : };
      54             : 
      55             : #define ELF_PRARGSZ     (80)    /* Number of chars for args */
      56             : 
      57             : struct elf_prpsinfo
      58             : {
      59             :         char    pr_state;       /* numeric process state */
      60             :         char    pr_sname;       /* char for pr_state */
      61             :         char    pr_zomb;        /* zombie */
      62             :         char    pr_nice;        /* nice val */
      63             :         unsigned long pr_flag;  /* flags */
      64             :         __kernel_uid_t  pr_uid;
      65             :         __kernel_gid_t  pr_gid;
      66             :         pid_t   pr_pid, pr_ppid, pr_pgrp, pr_sid;
      67             :         /* Lots missing */
      68             :         /*
      69             :          * The hard-coded 16 is derived from TASK_COMM_LEN, but it can't be
      70             :          * changed as it is exposed to userspace. We'd better make it hard-coded
      71             :          * here.
      72             :          */
      73             :         char    pr_fname[16];   /* filename of executable */
      74             :         char    pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
      75             : };
      76             : 
      77           0 : static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
      78             : {
      79             : #ifdef ELF_CORE_COPY_REGS
      80           0 :         ELF_CORE_COPY_REGS((*elfregs), regs)
      81             : #else
      82             :         BUG_ON(sizeof(*elfregs) != sizeof(*regs));
      83             :         *(struct pt_regs *)elfregs = *regs;
      84             : #endif
      85           0 : }
      86             : 
      87             : static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs)
      88             : {
      89             : #if defined (ELF_CORE_COPY_TASK_REGS)
      90             :         return ELF_CORE_COPY_TASK_REGS(t, elfregs);
      91             : #else
      92           0 :         elf_core_copy_regs(elfregs, task_pt_regs(t));
      93             : #endif
      94             :         return 0;
      95             : }
      96             : 
      97             : int elf_core_copy_task_fpregs(struct task_struct *t, elf_fpregset_t *fpu);
      98             : 
      99             : #ifdef CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS
     100             : /*
     101             :  * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
     102             :  * extra segments containing the gate DSO contents.  Dumping its
     103             :  * contents makes post-mortem fully interpretable later without matching up
     104             :  * the same kernel and hardware config to see what PC values meant.
     105             :  * Dumping its extra ELF program headers includes all the other information
     106             :  * a debugger needs to easily find how the gate DSO was being used.
     107             :  */
     108             : extern Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm);
     109             : extern int
     110             : elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
     111             : extern int
     112             : elf_core_write_extra_data(struct coredump_params *cprm);
     113             : extern size_t elf_core_extra_data_size(struct coredump_params *cprm);
     114             : #else
     115             : static inline Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm)
     116             : {
     117             :         return 0;
     118             : }
     119             : 
     120             : static inline int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
     121             : {
     122             :         return 1;
     123             : }
     124             : 
     125             : static inline int elf_core_write_extra_data(struct coredump_params *cprm)
     126             : {
     127             :         return 1;
     128             : }
     129             : 
     130             : static inline size_t elf_core_extra_data_size(struct coredump_params *cprm)
     131             : {
     132             :         return 0;
     133             : }
     134             : #endif /* CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS */
     135             : 
     136             : #endif /* _LINUX_ELFCORE_H */

Generated by: LCOV version 1.14