take fdpic-related parts of elf_prstatus out
The only architecture where we might end up using both is arm, and there we definitely don't want fdpic-related fields in elf_prstatus - coredump layout of ELF binaries should not depend upon having the kernel built with the support of ELF_FDPIC ones. Just move the fdpic-modified variant into binfmt_elf_fdpic.c (and call it elf_prstatus_fdpic there) [name stolen from nico] Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1e6b57d642
commit
16aead8101
|
@ -1189,6 +1189,32 @@ static int elf_fdpic_map_file_by_direct_mmap(struct elf_fdpic_params *params,
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_ELF_CORE
|
#ifdef CONFIG_ELF_CORE
|
||||||
|
|
||||||
|
struct elf_prstatus_fdpic
|
||||||
|
{
|
||||||
|
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 */
|
||||||
|
pid_t pr_pid;
|
||||||
|
pid_t pr_ppid;
|
||||||
|
pid_t pr_pgrp;
|
||||||
|
pid_t pr_sid;
|
||||||
|
struct __kernel_old_timeval pr_utime; /* User time */
|
||||||
|
struct __kernel_old_timeval pr_stime; /* System time */
|
||||||
|
struct __kernel_old_timeval pr_cutime; /* Cumulative user time */
|
||||||
|
struct __kernel_old_timeval pr_cstime; /* Cumulative system time */
|
||||||
|
elf_gregset_t pr_reg; /* GP registers */
|
||||||
|
/* 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;
|
||||||
|
int pr_fpvalid; /* True if math co-processor being used. */
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decide whether a segment is worth dumping; default is yes to be
|
* Decide whether a segment is worth dumping; default is yes to be
|
||||||
* sure (missing info is worse than too much; etc).
|
* sure (missing info is worse than too much; etc).
|
||||||
|
@ -1345,7 +1371,7 @@ static inline void fill_note(struct memelfnote *note, const char *name, int type
|
||||||
* fill up all the fields in prstatus from the given task struct, except
|
* fill up all the fields in prstatus from the given task struct, except
|
||||||
* registers which need to be filled up separately.
|
* registers which need to be filled up separately.
|
||||||
*/
|
*/
|
||||||
static void fill_prstatus(struct elf_prstatus *prstatus,
|
static void fill_prstatus(struct elf_prstatus_fdpic *prstatus,
|
||||||
struct task_struct *p, long signr)
|
struct task_struct *p, long signr)
|
||||||
{
|
{
|
||||||
prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
|
prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
|
||||||
|
@ -1428,7 +1454,7 @@ static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
|
||||||
struct elf_thread_status
|
struct elf_thread_status
|
||||||
{
|
{
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct elf_prstatus prstatus; /* NT_PRSTATUS */
|
struct elf_prstatus_fdpic prstatus; /* NT_PRSTATUS */
|
||||||
elf_fpregset_t fpu; /* NT_PRFPREG */
|
elf_fpregset_t fpu; /* NT_PRFPREG */
|
||||||
struct task_struct *thread;
|
struct task_struct *thread;
|
||||||
#ifdef ELF_CORE_COPY_XFPREGS
|
#ifdef ELF_CORE_COPY_XFPREGS
|
||||||
|
@ -1562,7 +1588,7 @@ static int elf_fdpic_core_dump(struct coredump_params *cprm)
|
||||||
loff_t offset = 0, dataoff;
|
loff_t offset = 0, dataoff;
|
||||||
int numnote;
|
int numnote;
|
||||||
struct memelfnote *notes = NULL;
|
struct memelfnote *notes = NULL;
|
||||||
struct elf_prstatus *prstatus = NULL; /* NT_PRSTATUS */
|
struct elf_prstatus_fdpic *prstatus = NULL; /* NT_PRSTATUS */
|
||||||
struct elf_prpsinfo *psinfo = NULL; /* NT_PRPSINFO */
|
struct elf_prpsinfo *psinfo = NULL; /* NT_PRPSINFO */
|
||||||
LIST_HEAD(thread_list);
|
LIST_HEAD(thread_list);
|
||||||
struct list_head *t;
|
struct list_head *t;
|
||||||
|
|
|
@ -32,10 +32,6 @@ struct compat_elf_prstatus
|
||||||
struct old_timeval32 pr_cutime;
|
struct old_timeval32 pr_cutime;
|
||||||
struct old_timeval32 pr_cstime;
|
struct old_timeval32 pr_cstime;
|
||||||
compat_elf_gregset_t pr_reg;
|
compat_elf_gregset_t pr_reg;
|
||||||
#ifdef CONFIG_BINFMT_ELF_FDPIC
|
|
||||||
compat_ulong_t pr_exec_fdpic_loadmap;
|
|
||||||
compat_ulong_t pr_interp_fdpic_loadmap;
|
|
||||||
#endif
|
|
||||||
compat_int_t pr_fpvalid;
|
compat_int_t pr_fpvalid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -44,16 +44,6 @@ struct elf_prstatus
|
||||||
struct __kernel_old_timeval pr_cutime; /* Cumulative user time */
|
struct __kernel_old_timeval pr_cutime; /* Cumulative user time */
|
||||||
struct __kernel_old_timeval pr_cstime; /* Cumulative system time */
|
struct __kernel_old_timeval pr_cstime; /* Cumulative system time */
|
||||||
elf_gregset_t pr_reg; /* GP registers */
|
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. */
|
int pr_fpvalid; /* True if math co-processor being used. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue