File Index
Files and directories
Sign in
FILE

elfcore.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/elfcore.h C
  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
 15struct coredump_params;
 16
 17struct 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 */
 32struct 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
 48struct 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
 57struct 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
 77static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
 78{
 79#ifdef ELF_CORE_COPY_REGS
 80	ELF_CORE_COPY_REGS((*elfregs), regs)
 81#else
 82	BUG_ON(sizeof(*elfregs) != sizeof(*regs));
 83	*(struct pt_regs *)elfregs = *regs;
 84#endif
 85}
 86
 87static 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	elf_core_copy_regs(elfregs, task_pt_regs(t));
 93#endif
 94	return 0;
 95}
 96
 97int 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 */
108extern Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm);
109extern int
110elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
111extern int
112elf_core_write_extra_data(struct coredump_params *cprm);
113extern size_t elf_core_extra_data_size(struct coredump_params *cprm);
114#else
115static inline Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm)
116{
117	return 0;
118}
119
120static inline int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
121{
122	return 1;
123}
124
125static inline int elf_core_write_extra_data(struct coredump_params *cprm)
126{
127	return 1;
128}
129
130static 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 */
~/ Read-only file preview.