* [PATCH] elf, coredump: Extract only the active register set during core dump
@ 2014-05-23 5:16 Anshuman Khandual
2014-05-27 17:44 ` Pedro Alves
0 siblings, 1 reply; 2+ messages in thread
From: Anshuman Khandual @ 2014-05-23 5:16 UTC (permalink / raw)
To: viro; +Cc: linux-fsdevel, linux-kernel, palves, Anshuman Khandual
Regset active hooks provide a way to query how many registers in the
register set are active at any point of time. Currently this information
is being ignored while creating core dump sections corresponding to any
core note register set. This way the core dump will contain data which are
not part of the active context of the process and may not be useful. This
patch will make sure that only the active part of the register set are
captured during the core dump process which will reduce the core dump
size.
Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
---
NOTE:
Pedro Alves has mentioned that producing smaller note sections in the core
dump may break some existing consumers. I request suggestions, reviews and
test reports on different architectures to prove that this patch does not
break any existing consumer. Thank you.
Please find the previous discussion here
https://lkml.org/lkml/2014/5/20/185
Regards
Anshuman
fs/binfmt_elf.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index aa3cb62..00aba07 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1551,10 +1551,18 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
const struct user_regset *regset = &view->regsets[i];
do_thread_regset_writeback(t->task, regset);
if (regset->core_note_type && regset->get &&
- (!regset->active || regset->active(t->task, regset))) {
+ (!regset->active || regset->active(t->task, regset) > 0)) {
int ret;
- size_t size = regset->n * regset->size;
- void *data = kmalloc(size, GFP_KERNEL);
+ size_t size;
+ void *data;
+
+ if (!regset->active)
+ size = regset->n * regset->size;
+ else
+ size = regset->active(t->task, regset)
+ * regset->size;
+
+ data = kmalloc(size, GFP_KERNEL);
if (unlikely(!data))
return 0;
ret = regset->get(t->task, regset,
--
1.7.11.7
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] elf, coredump: Extract only the active register set during core dump
2014-05-23 5:16 [PATCH] elf, coredump: Extract only the active register set during core dump Anshuman Khandual
@ 2014-05-27 17:44 ` Pedro Alves
0 siblings, 0 replies; 2+ messages in thread
From: Pedro Alves @ 2014-05-27 17:44 UTC (permalink / raw)
To: Anshuman Khandual, viro; +Cc: linux-fsdevel, linux-kernel
On 05/23/2014 06:16 AM, Anshuman Khandual wrote:
> Regset active hooks provide a way to query how many registers in the
> register set are active at any point of time. Currently this information
> is being ignored while creating core dump sections corresponding to any
> core note register set. This way the core dump will contain data which are
> not part of the active context of the process and may not be useful. This
> patch will make sure that only the active part of the register set are
> captured during the core dump process which will reduce the core dump
> size.
>
> Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> ---
> NOTE:
> Pedro Alves has mentioned that producing smaller note sections in the core
> dump may break some existing consumers. I request suggestions, reviews and
> test reports on different architectures to prove that this patch does not
> break any existing consumer. Thank you.
Yeah, FYI, I mentioned that after noticing that ia64 does:
mainline/linux-2.6/arch/ia64/kernel/ptrace.c:
static int
fpregs_active(struct task_struct *target, const struct user_regset *regset)
{
return (target->thread.flags & IA64_THREAD_FPH_VALID) ? 128 : 32;
}
And it's likely that tools expect fpregset_t to have a fixed size.
include/uapi/linux/elfcore.h:
22 typedef elf_fpregset_t fpregset_t;
arch/ia64/include/asm/elf.h:
186 typedef struct ia64_fpreg elf_fpreg_t;
187 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
arch/ia64/include/asm/elf.h:
154 #define ELF_NGREG 128 /* we really need just 72 but let's leave some headroom... */
155 #define ELF_NFPREG 128 /* f0 and f1 could be omitted, but so what... */
I haven't done an exhaustive look over ports.
--
Pedro Alves
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-05-27 17:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-23 5:16 [PATCH] elf, coredump: Extract only the active register set during core dump Anshuman Khandual
2014-05-27 17:44 ` Pedro Alves
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).