linux/include/linux/elfcore.h

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_ELFCORE_H
#define _LINUX_ELFCORE_H

#include <linux/user.h>
#include <linux/bug.h>
#include <linux/sched/task_stack.h>
#include <linux/types.h>
#include <linux/signal.h>
#include <linux/time.h>
#include <linux/ptrace.h>
#include <linux/fs.h>
#include <linux/elf.h>

struct coredump_params;

struct elf_siginfo
{};

/*
 * 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.
 */
struct elf_prstatus_common
{};

struct elf_prstatus
{};

#define ELF_PRARGSZ

struct elf_prpsinfo
{};

static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
{}

static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs)
{}

int elf_core_copy_task_fpregs(struct task_struct *t, elf_fpregset_t *fpu);

#ifdef CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS
/*
 * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
 * extra segments containing the gate DSO contents.  Dumping its
 * contents makes post-mortem fully interpretable later without matching up
 * the same kernel and hardware config to see what PC values meant.
 * Dumping its extra ELF program headers includes all the other information
 * a debugger needs to easily find how the gate DSO was being used.
 */
extern Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm);
extern int
elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset);
extern int
elf_core_write_extra_data(struct coredump_params *cprm);
extern size_t elf_core_extra_data_size(struct coredump_params *cprm);
#else
static inline Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm)
{}

static inline int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
{}

static inline int elf_core_write_extra_data(struct coredump_params *cprm)
{}

static inline size_t elf_core_extra_data_size(struct coredump_params *cprm)
{}
#endif /* CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS */

#endif /* _LINUX_ELFCORE_H */