mirror of
https://github.com/torvalds/linux.git
synced 2024-12-23 19:31:53 +00:00
7fa3031500
Suppress A.OUT library support if CONFIG_ARCH_SUPPORTS_AOUT is not set. Not all architectures support the A.OUT binfmt, so the ELF binfmt should not be permitted to go looking for A.OUT libraries to load in such a case. Not only that, but under such conditions A.OUT core dumps are not produced either. To make this work, this patch also does the following: (1) Makes the existence of the contents of linux/a.out.h contingent on CONFIG_ARCH_SUPPORTS_AOUT. (2) Renames dump_thread() to aout_dump_thread() as it's only called by A.OUT core dumping code. (3) Moves aout_dump_thread() into asm/a.out-core.h and makes it inline. This is then included only where needed. This means that this bit of arch code will be stored in the appropriate A.OUT binfmt module rather than the core kernel. (4) Drops A.OUT support for Blackfin (according to Mike Frysinger it's not needed) and FRV. This patch depends on the previous patch to move STACK_TOP[_MAX] out of asm/a.out.h and into asm/processor.h as they're required whether or not A.OUT format is available. [jdike@addtoit.com: uml: re-remove accidentally restored code] Signed-off-by: David Howells <dhowells@redhat.com> Cc: <linux-arch@vger.kernel.org> Signed-off-by: Jeff Dike <jdike@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
68 lines
2.0 KiB
C
68 lines
2.0 KiB
C
/* a.out coredump register dumper
|
|
*
|
|
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
|
* Written by David Howells (dhowells@redhat.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public Licence
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the Licence, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _ASM_A_OUT_CORE_H
|
|
#define _ASM_A_OUT_CORE_H
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/user.h>
|
|
#include <linux/elfcore.h>
|
|
|
|
/*
|
|
* fill in the user structure for an a.out core dump
|
|
*/
|
|
static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
|
{
|
|
struct switch_stack *sw;
|
|
|
|
/* changed the size calculations - should hopefully work better. lbt */
|
|
dump->magic = CMAGIC;
|
|
dump->start_code = 0;
|
|
dump->start_stack = rdusp() & ~(PAGE_SIZE - 1);
|
|
dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
|
|
dump->u_dsize = ((unsigned long) (current->mm->brk +
|
|
(PAGE_SIZE-1))) >> PAGE_SHIFT;
|
|
dump->u_dsize -= dump->u_tsize;
|
|
dump->u_ssize = 0;
|
|
|
|
if (dump->start_stack < TASK_SIZE)
|
|
dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
|
|
|
|
dump->u_ar0 = offsetof(struct user, regs);
|
|
sw = ((struct switch_stack *)regs) - 1;
|
|
dump->regs.d1 = regs->d1;
|
|
dump->regs.d2 = regs->d2;
|
|
dump->regs.d3 = regs->d3;
|
|
dump->regs.d4 = regs->d4;
|
|
dump->regs.d5 = regs->d5;
|
|
dump->regs.d6 = sw->d6;
|
|
dump->regs.d7 = sw->d7;
|
|
dump->regs.a0 = regs->a0;
|
|
dump->regs.a1 = regs->a1;
|
|
dump->regs.a2 = regs->a2;
|
|
dump->regs.a3 = sw->a3;
|
|
dump->regs.a4 = sw->a4;
|
|
dump->regs.a5 = sw->a5;
|
|
dump->regs.a6 = sw->a6;
|
|
dump->regs.d0 = regs->d0;
|
|
dump->regs.orig_d0 = regs->orig_d0;
|
|
dump->regs.stkadj = regs->stkadj;
|
|
dump->regs.sr = regs->sr;
|
|
dump->regs.pc = regs->pc;
|
|
dump->regs.fmtvec = (regs->format << 12) | regs->vector;
|
|
/* dump floating point stuff */
|
|
dump->u_fpvalid = dump_fpu (regs, &dump->m68kfp);
|
|
}
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _ASM_A_OUT_CORE_H */
|