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 coredump_params
*cprm
, loff_t offset
)
16 const struct elf_phdr
*const gate_phdrs
=
17 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
21 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
22 struct elf_phdr phdr
= gate_phdrs
[i
];
24 if (phdr
.p_type
== PT_LOAD
) {
25 phdr
.p_memsz
= PAGE_ALIGN(phdr
.p_memsz
);
26 phdr
.p_filesz
= phdr
.p_memsz
;
28 ofs
= phdr
.p_offset
= offset
;
29 offset
+= phdr
.p_filesz
;
36 phdr
.p_paddr
= 0; /* match other core phdrs */
37 if (!dump_emit(cprm
, &phdr
, sizeof(phdr
)))
43 int elf_core_write_extra_data(struct coredump_params
*cprm
)
45 const struct elf_phdr
*const gate_phdrs
=
46 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
49 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
50 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
51 void *addr
= (void *)gate_phdrs
[i
].p_vaddr
;
52 size_t memsz
= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);
54 if (!dump_emit(cprm
, addr
, memsz
))
62 size_t elf_core_extra_data_size(void)
64 const struct elf_phdr
*const gate_phdrs
=
65 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
69 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
70 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
71 size
+= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);