• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/um/sys-i386/
1#include <linux/elf.h>
2#include <linux/coredump.h>
3#include <linux/fs.h>
4#include <linux/mm.h>
5
6#include <asm/elf.h>
7
8
9Elf32_Half elf_core_extra_phdrs(void)
10{
11	return vsyscall_ehdr ? (((struct elfhdr *)vsyscall_ehdr)->e_phnum) : 0;
12}
13
14int elf_core_write_extra_phdrs(struct file *file, loff_t offset, size_t *size,
15			       unsigned long limit)
16{
17	if ( vsyscall_ehdr ) {
18		const struct elfhdr *const ehdrp =
19			(struct elfhdr *) vsyscall_ehdr;
20		const struct elf_phdr *const phdrp =
21			(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
22		int i;
23		Elf32_Off ofs = 0;
24
25		for (i = 0; i < ehdrp->e_phnum; ++i) {
26			struct elf_phdr phdr = phdrp[i];
27
28			if (phdr.p_type == PT_LOAD) {
29				ofs = phdr.p_offset = offset;
30				offset += phdr.p_filesz;
31			} else {
32				phdr.p_offset += ofs;
33			}
34			phdr.p_paddr = 0; /* match other core phdrs */
35			*size += sizeof(phdr);
36			if (*size > limit
37			    || !dump_write(file, &phdr, sizeof(phdr)))
38				return 0;
39		}
40	}
41	return 1;
42}
43
44int elf_core_write_extra_data(struct file *file, size_t *size,
45			      unsigned long limit)
46{
47	if ( vsyscall_ehdr ) {
48		const struct elfhdr *const ehdrp =
49			(struct elfhdr *) vsyscall_ehdr;
50		const struct elf_phdr *const phdrp =
51			(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
52		int i;
53
54		for (i = 0; i < ehdrp->e_phnum; ++i) {
55			if (phdrp[i].p_type == PT_LOAD) {
56				void *addr = (void *) phdrp[i].p_vaddr;
57				size_t filesz = phdrp[i].p_filesz;
58
59				*size += filesz;
60				if (*size > limit
61				    || !dump_write(file, addr, filesz))
62					return 0;
63			}
64		}
65	}
66	return 1;
67}
68
69size_t elf_core_extra_data_size(void)
70{
71	if ( vsyscall_ehdr ) {
72		const struct elfhdr *const ehdrp =
73			(struct elfhdr *)vsyscall_ehdr;
74		const struct elf_phdr *const phdrp =
75			(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
76		int i;
77
78		for (i = 0; i < ehdrp->e_phnum; ++i)
79			if (phdrp[i].p_type == PT_LOAD)
80				return (size_t) phdrp[i].p_filesz;
81	}
82	return 0;
83}
84