elf coredump: replace ELF_CORE_EXTRA_* macros by functions
elf_core_dump() and elf_fdpic_core_dump() use #ifdef and the corresponding macro for hiding _multiline_ logics in functions. This patch removes #ifdef and replaces ELF_CORE_EXTRA_* by corresponding functions. For architectures not implemeonting ELF_CORE_EXTRA_*, we use weak functions in order to reduce a range of modification. This cleanup is for my next patches, but I think this cleanup itself is worth doing regardless of my firnal purpose. Signed-off-by: Daisuke HATAYAMA <d.hatayama@jp.fujitsu.com> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Jeff Dike <jdike@addtoit.com> Cc: David Howells <dhowells@redhat.com> Cc: Greg Ungerer <gerg@snapgear.com> Cc: Roland McGrath <roland@redhat.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Andi Kleen <andi@firstfloor.org> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: <linux-arch@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
088e7af73a
commit
1fcccbac89
@@ -219,54 +219,6 @@ do { \
|
||||
NEW_AUX_ENT(AT_SYSINFO_EHDR, (unsigned long) GATE_EHDR); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* These macros 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.
|
||||
*/
|
||||
#define ELF_CORE_EXTRA_PHDRS (GATE_EHDR->e_phnum)
|
||||
#define ELF_CORE_WRITE_EXTRA_PHDRS \
|
||||
do { \
|
||||
const struct elf_phdr *const gate_phdrs = \
|
||||
(const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff); \
|
||||
int i; \
|
||||
Elf64_Off ofs = 0; \
|
||||
for (i = 0; i < GATE_EHDR->e_phnum; ++i) { \
|
||||
struct elf_phdr phdr = gate_phdrs[i]; \
|
||||
if (phdr.p_type == PT_LOAD) { \
|
||||
phdr.p_memsz = PAGE_ALIGN(phdr.p_memsz); \
|
||||
phdr.p_filesz = phdr.p_memsz; \
|
||||
if (ofs == 0) { \
|
||||
ofs = phdr.p_offset = offset; \
|
||||
offset += phdr.p_filesz; \
|
||||
} \
|
||||
else \
|
||||
phdr.p_offset = ofs; \
|
||||
} \
|
||||
else \
|
||||
phdr.p_offset += ofs; \
|
||||
phdr.p_paddr = 0; /* match other core phdrs */ \
|
||||
DUMP_WRITE(&phdr, sizeof(phdr)); \
|
||||
} \
|
||||
} while (0)
|
||||
#define ELF_CORE_WRITE_EXTRA_DATA \
|
||||
do { \
|
||||
const struct elf_phdr *const gate_phdrs = \
|
||||
(const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff); \
|
||||
int i; \
|
||||
for (i = 0; i < GATE_EHDR->e_phnum; ++i) { \
|
||||
if (gate_phdrs[i].p_type == PT_LOAD) { \
|
||||
DUMP_WRITE((void *) gate_phdrs[i].p_vaddr, \
|
||||
PAGE_ALIGN(gate_phdrs[i].p_memsz)); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* format for entries in the Global Offset Table
|
||||
*/
|
||||
|
Reference in New Issue
Block a user