2 #include <linux/coredump.h>
9 Elf64_Half
elf_core_extra_phdrs(void)
11 return GATE_EHDR
->e_phnum
;
14 int elf_core_write_extra_phdrs(struct file
*file
, loff_t offset
, size_t *size
,
17 const struct elf_phdr
*const gate_phdrs
=
18 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
22 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
23 struct elf_phdr phdr
= gate_phdrs
[i
];
25 if (phdr
.p_type
== PT_LOAD
) {
26 phdr
.p_memsz
= PAGE_ALIGN(phdr
.p_memsz
);
27 phdr
.p_filesz
= phdr
.p_memsz
;
29 ofs
= phdr
.p_offset
= offset
;
30 offset
+= phdr
.p_filesz
;
37 phdr
.p_paddr
= 0; /* match other core phdrs */
38 *size
+= sizeof(phdr
);
39 if (*size
> limit
|| !dump_write(file
, &phdr
, sizeof(phdr
)))
45 int elf_core_write_extra_data(struct file
*file
, size_t *size
,
48 const struct elf_phdr
*const gate_phdrs
=
49 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
52 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
53 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
54 void *addr
= (void *)gate_phdrs
[i
].p_vaddr
;
55 size_t memsz
= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);
58 if (*size
> limit
|| !dump_write(file
, addr
, memsz
))
66 size_t elf_core_extra_data_size(void)
68 const struct elf_phdr
*const gate_phdrs
=
69 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
73 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
74 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
75 size
+= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);