Merge branch 'regset.followup' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull regset updates from Al Viro: "Dead code removal, mostly. The only exception is a bit of cleanups on itanic (getting rid of redundant stack unwinds - each access_uarea() call does it and we call that 7 times in a row in ptrace_[sg]etregs(), *after* having done it ourselves in the caller; location where the user registers have been spilled won't change under us, and we can bloody well just call access_elf_reg() directly, giving it the unw_frame_info we'd calculated for our own purposes)" * 'regset.followup' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: c6x: kill ELF_CORE_COPY_FPREGS whack-a-mole: USE_ELF_CORE_DUMP [ia64] ptrace_[sg]etregs(): use access_elf_reg() instead of access_uarea() [ia64] missed cleanups from switch to regset coredumps arm: kill dump_task_regs()
This commit is contained in:
@@ -111,10 +111,6 @@ extern int elf_check_arch(const struct elf32_hdr *);
|
|||||||
extern int arm_elf_read_implies_exec(int);
|
extern int arm_elf_read_implies_exec(int);
|
||||||
#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(stk)
|
#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(stk)
|
||||||
|
|
||||||
struct task_struct;
|
|
||||||
int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
|
|
||||||
#define ELF_CORE_COPY_TASK_REGS dump_task_regs
|
|
||||||
|
|
||||||
#define CORE_DUMP_USE_REGSET
|
#define CORE_DUMP_USE_REGSET
|
||||||
#define ELF_EXEC_PAGESIZE 4096
|
#define ELF_EXEC_PAGESIZE 4096
|
||||||
|
|
||||||
|
|||||||
@@ -272,15 +272,6 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill in the task's elfregs structure for a core dump.
|
|
||||||
*/
|
|
||||||
int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs)
|
|
||||||
{
|
|
||||||
elf_core_copy_regs(elfregs, task_pt_regs(t));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
struct stackframe frame;
|
struct stackframe frame;
|
||||||
|
|||||||
@@ -39,8 +39,6 @@ do { \
|
|||||||
|
|
||||||
#define ELF_FDPIC_CORE_EFLAGS 0
|
#define ELF_FDPIC_CORE_EFLAGS 0
|
||||||
|
|
||||||
#define ELF_CORE_COPY_FPREGS(...) 0 /* No FPU regs to copy */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are used to set parameters in the core dumps.
|
* These are used to set parameters in the core dumps.
|
||||||
*/
|
*/
|
||||||
@@ -56,7 +54,6 @@ do { \
|
|||||||
/* Nothing for now. Need to setup DP... */
|
/* Nothing for now. Need to setup DP... */
|
||||||
#define ELF_PLAT_INIT(_r)
|
#define ELF_PLAT_INIT(_r)
|
||||||
|
|
||||||
#define USE_ELF_CORE_DUMP
|
|
||||||
#define ELF_EXEC_PAGESIZE 4096
|
#define ELF_EXEC_PAGESIZE 4096
|
||||||
|
|
||||||
#define ELF_CORE_COPY_REGS(_dest, _regs) \
|
#define ELF_CORE_COPY_REGS(_dest, _regs) \
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
|||||||
/*
|
/*
|
||||||
* These are used to set parameters in the core dumps.
|
* These are used to set parameters in the core dumps.
|
||||||
*/
|
*/
|
||||||
#define USE_ELF_CORE_DUMP
|
|
||||||
#define ELF_EXEC_PAGESIZE 4096
|
#define ELF_EXEC_PAGESIZE 4096
|
||||||
#define ELF_CLASS ELFCLASS32
|
#define ELF_CLASS ELFCLASS32
|
||||||
#define ELF_PLAT_INIT(_r, load_addr) { _r->a0 = 0; }
|
#define ELF_PLAT_INIT(_r, load_addr) { _r->a0 = 0; }
|
||||||
|
|||||||
@@ -181,7 +181,6 @@ do { \
|
|||||||
*/
|
*/
|
||||||
#define ELF_PLAT_INIT(regs, load_addr) do { } while (0)
|
#define ELF_PLAT_INIT(regs, load_addr) do { } while (0)
|
||||||
|
|
||||||
#define USE_ELF_CORE_DUMP
|
|
||||||
#define CORE_DUMP_USE_REGSET
|
#define CORE_DUMP_USE_REGSET
|
||||||
|
|
||||||
/* Hrm is this going to cause problems for changing PAGE_SIZE? */
|
/* Hrm is this going to cause problems for changing PAGE_SIZE? */
|
||||||
|
|||||||
@@ -487,7 +487,7 @@ do_copy_task_regs (struct task_struct *task, struct unw_frame_info *info, void *
|
|||||||
unw_get_ar(info, UNW_AR_SSD, &dst[56]);
|
unw_get_ar(info, UNW_AR_SSD, &dst[56]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
do_copy_regs (struct unw_frame_info *info, void *arg)
|
do_copy_regs (struct unw_frame_info *info, void *arg)
|
||||||
{
|
{
|
||||||
do_copy_task_regs(current, info, arg);
|
do_copy_task_regs(current, info, arg);
|
||||||
|
|||||||
@@ -817,8 +817,8 @@ access_nat_bits (struct task_struct *child, struct pt_regs *pt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
access_uarea (struct task_struct *child, unsigned long addr,
|
access_elf_reg(struct task_struct *target, struct unw_frame_info *info,
|
||||||
unsigned long *data, int write_access);
|
unsigned long addr, unsigned long *data, int write_access);
|
||||||
|
|
||||||
static long
|
static long
|
||||||
ptrace_getregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
ptrace_getregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
||||||
@@ -847,13 +847,13 @@ ptrace_getregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (access_uarea(child, PT_CR_IPSR, &psr, 0) < 0
|
if (access_elf_reg(child, &info, ELF_CR_IPSR_OFFSET, &psr, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_AR_EC, &ec, 0) < 0
|
access_elf_reg(child, &info, ELF_AR_EC_OFFSET, &ec, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_AR_LC, &lc, 0) < 0
|
access_elf_reg(child, &info, ELF_AR_LC_OFFSET, &lc, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_AR_RNAT, &rnat, 0) < 0
|
access_elf_reg(child, &info, ELF_AR_RNAT_OFFSET, &rnat, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_AR_BSP, &bsp, 0) < 0
|
access_elf_reg(child, &info, ELF_AR_BSP_OFFSET, &bsp, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_CFM, &cfm, 0)
|
access_elf_reg(child, &info, ELF_CFM_OFFSET, &cfm, 0) < 0 ||
|
||||||
|| access_uarea(child, PT_NAT_BITS, &nat_bits, 0))
|
access_elf_reg(child, &info, ELF_NAT_OFFSET, &nat_bits, 0) < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
/* control regs */
|
/* control regs */
|
||||||
@@ -972,7 +972,7 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
struct switch_stack *sw;
|
struct switch_stack *sw;
|
||||||
struct ia64_fpreg fpval;
|
struct ia64_fpreg fpval;
|
||||||
struct pt_regs *pt;
|
struct pt_regs *pt;
|
||||||
long ret, retval = 0;
|
long retval = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset(&fpval, 0, sizeof(fpval));
|
memset(&fpval, 0, sizeof(fpval));
|
||||||
@@ -1097,17 +1097,16 @@ ptrace_setregs (struct task_struct *child, struct pt_all_user_regs __user *ppr)
|
|||||||
|
|
||||||
retval |= __get_user(nat_bits, &ppr->nat);
|
retval |= __get_user(nat_bits, &ppr->nat);
|
||||||
|
|
||||||
retval |= access_uarea(child, PT_CR_IPSR, &psr, 1);
|
retval |= access_elf_reg(child, &info, ELF_CR_IPSR_OFFSET, &psr, 1);
|
||||||
retval |= access_uarea(child, PT_AR_RSC, &rsc, 1);
|
retval |= access_elf_reg(child, &info, ELF_AR_RSC_OFFSET, &rsc, 1);
|
||||||
retval |= access_uarea(child, PT_AR_EC, &ec, 1);
|
retval |= access_elf_reg(child, &info, ELF_AR_EC_OFFSET, &ec, 1);
|
||||||
retval |= access_uarea(child, PT_AR_LC, &lc, 1);
|
retval |= access_elf_reg(child, &info, ELF_AR_LC_OFFSET, &lc, 1);
|
||||||
retval |= access_uarea(child, PT_AR_RNAT, &rnat, 1);
|
retval |= access_elf_reg(child, &info, ELF_AR_RNAT_OFFSET, &rnat, 1);
|
||||||
retval |= access_uarea(child, PT_AR_BSP, &bsp, 1);
|
retval |= access_elf_reg(child, &info, ELF_AR_BSP_OFFSET, &bsp, 1);
|
||||||
retval |= access_uarea(child, PT_CFM, &cfm, 1);
|
retval |= access_elf_reg(child, &info, ELF_CFM_OFFSET, &cfm, 1);
|
||||||
retval |= access_uarea(child, PT_NAT_BITS, &nat_bits, 1);
|
retval |= access_elf_reg(child, &info, ELF_NAT_OFFSET, &nat_bits, 1);
|
||||||
|
|
||||||
ret = retval ? -EIO : 0;
|
return retval ? -EIO : 0;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1150,6 +1149,10 @@ ptrace_disable (struct task_struct *child)
|
|||||||
user_disable_single_step(child);
|
user_disable_single_step(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
access_uarea (struct task_struct *child, unsigned long addr,
|
||||||
|
unsigned long *data, int write_access);
|
||||||
|
|
||||||
long
|
long
|
||||||
arch_ptrace (struct task_struct *child, long request,
|
arch_ptrace (struct task_struct *child, long request,
|
||||||
unsigned long addr, unsigned long data)
|
unsigned long addr, unsigned long data)
|
||||||
@@ -1491,7 +1494,7 @@ struct regset_membuf {
|
|||||||
int ret;
|
int ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
void do_gpregs_get(struct unw_frame_info *info, void *arg)
|
static void do_gpregs_get(struct unw_frame_info *info, void *arg)
|
||||||
{
|
{
|
||||||
struct regset_membuf *dst = arg;
|
struct regset_membuf *dst = arg;
|
||||||
struct membuf to = dst->to;
|
struct membuf to = dst->to;
|
||||||
@@ -1524,7 +1527,7 @@ void do_gpregs_get(struct unw_frame_info *info, void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_gpregs_set(struct unw_frame_info *info, void *arg)
|
static void do_gpregs_set(struct unw_frame_info *info, void *arg)
|
||||||
{
|
{
|
||||||
struct regset_getset *dst = arg;
|
struct regset_getset *dst = arg;
|
||||||
|
|
||||||
@@ -1569,7 +1572,7 @@ void do_gpregs_set(struct unw_frame_info *info, void *arg)
|
|||||||
|
|
||||||
#define ELF_FP_OFFSET(i) (i * sizeof(elf_fpreg_t))
|
#define ELF_FP_OFFSET(i) (i * sizeof(elf_fpreg_t))
|
||||||
|
|
||||||
void do_fpregs_get(struct unw_frame_info *info, void *arg)
|
static void do_fpregs_get(struct unw_frame_info *info, void *arg)
|
||||||
{
|
{
|
||||||
struct task_struct *task = info->task;
|
struct task_struct *task = info->task;
|
||||||
struct regset_membuf *dst = arg;
|
struct regset_membuf *dst = arg;
|
||||||
@@ -1603,7 +1606,7 @@ void do_fpregs_get(struct unw_frame_info *info, void *arg)
|
|||||||
membuf_zero(&to, 96 * sizeof(reg));
|
membuf_zero(&to, 96 * sizeof(reg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_fpregs_set(struct unw_frame_info *info, void *arg)
|
static void do_fpregs_set(struct unw_frame_info *info, void *arg)
|
||||||
{
|
{
|
||||||
struct regset_getset *dst = arg;
|
struct regset_getset *dst = arg;
|
||||||
elf_fpreg_t fpreg, tmp[30];
|
elf_fpreg_t fpreg, tmp[30];
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ struct elf32_hdr;
|
|||||||
#define ELF_DATA ELFDATA2LSB
|
#define ELF_DATA ELFDATA2LSB
|
||||||
#endif
|
#endif
|
||||||
#define ELF_ARCH EM_NDS32
|
#define ELF_ARCH EM_NDS32
|
||||||
#define USE_ELF_CORE_DUMP
|
|
||||||
#define ELF_EXEC_PAGESIZE PAGE_SIZE
|
#define ELF_EXEC_PAGESIZE PAGE_SIZE
|
||||||
|
|
||||||
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
|
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
|
||||||
|
|||||||
Reference in New Issue
Block a user