hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _UAPI_LINUX_ELFCORE_H
#define _UAPI_LINUX_ELFCORE_H
 
#include <linux/types.h>
#include <linux/signal.h>
#include <linux/time.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
#include <linux/fs.h>
 
struct elf_siginfo
{
   int    si_signo;            /* signal number */
   int    si_code;            /* extra code */
   int    si_errno;            /* errno */
};
 
 
#ifndef __KERNEL__
typedef elf_greg_t greg_t;
typedef elf_gregset_t gregset_t;
typedef elf_fpregset_t fpregset_t;
typedef elf_fpxregset_t fpxregset_t;
#define NGREG ELF_NGREG
#endif
 
/*
 * Definitions to generate Intel SVR4-like core files.
 * These mostly have the same names as the SVR4 types with "elf_"
 * tacked on the front to prevent clashes with linux definitions,
 * and the typedef forms have been avoided.  This is mostly like
 * the SVR4 structure, but more Linuxy, with things that Linux does
 * not support and which gdb doesn't really use excluded.
 * Fields present but not used are marked with "XXX".
 */
struct elf_prstatus
{
#if 0
   long    pr_flags;    /* XXX Process flags */
   short    pr_why;        /* XXX Reason for process halt */
   short    pr_what;    /* XXX More detailed reason */
#endif
   struct elf_siginfo pr_info;    /* Info associated with signal */
   short    pr_cursig;        /* Current signal */
   unsigned long pr_sigpend;    /* Set of pending signals */
   unsigned long pr_sighold;    /* Set of held signals */
#if 0
   struct sigaltstack pr_altstack;    /* Alternate stack info */
   struct sigaction pr_action;    /* Signal action for current sig */
#endif
   pid_t    pr_pid;
   pid_t    pr_ppid;
   pid_t    pr_pgrp;
   pid_t    pr_sid;
   struct timeval pr_utime;    /* User time */
   struct timeval pr_stime;    /* System time */
   struct timeval pr_cutime;    /* Cumulative user time */
   struct timeval pr_cstime;    /* Cumulative system time */
#if 0
   long    pr_instr;        /* Current instruction */
#endif
   elf_gregset_t pr_reg;    /* GP registers */
#ifdef CONFIG_BINFMT_ELF_FDPIC
   /* When using FDPIC, the loadmap addresses need to be communicated
    * to GDB in order for GDB to do the necessary relocations.  The
    * fields (below) used to communicate this information are placed
    * immediately after ``pr_reg'', so that the loadmap addresses may
    * be viewed as part of the register set if so desired.
    */
   unsigned long pr_exec_fdpic_loadmap;
   unsigned long pr_interp_fdpic_loadmap;
#endif
   int pr_fpvalid;        /* True if math co-processor being used.  */
};
 
#define ELF_PRARGSZ    (80)    /* Number of chars for args */
 
struct elf_prpsinfo
{
   char    pr_state;    /* numeric process state */
   char    pr_sname;    /* char for pr_state */
   char    pr_zomb;    /* zombie */
   char    pr_nice;    /* nice val */
   unsigned long pr_flag;    /* flags */
   __kernel_uid_t    pr_uid;
   __kernel_gid_t    pr_gid;
   pid_t    pr_pid, pr_ppid, pr_pgrp, pr_sid;
   /* Lots missing */
   char    pr_fname[16];    /* filename of executable */
   char    pr_psargs[ELF_PRARGSZ];    /* initial part of arg list */
};
 
#ifndef __KERNEL__
typedef struct elf_prstatus prstatus_t;
typedef struct elf_prpsinfo prpsinfo_t;
#define PRARGSZ ELF_PRARGSZ 
#endif
 
 
#endif /* _UAPI_LINUX_ELFCORE_H */