1 // SPDX-License-Identifier: GPL-2.0
3 #include <linux/coredump.h>
10 Elf64_Half
elf_core_extra_phdrs(void)
12 return GATE_EHDR
->e_phnum
;
15 int elf_core_write_extra_phdrs(struct coredump_params
*cprm
, loff_t offset
)
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 if (!dump_emit(cprm
, &phdr
, sizeof(phdr
)))
44 int elf_core_write_extra_data(struct coredump_params
*cprm
)
46 const struct elf_phdr
*const gate_phdrs
=
47 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
50 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
51 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
52 void *addr
= (void *)gate_phdrs
[i
].p_vaddr
;
53 size_t memsz
= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);
55 if (!dump_emit(cprm
, addr
, memsz
))
63 size_t elf_core_extra_data_size(void)
65 const struct elf_phdr
*const gate_phdrs
=
66 (const struct elf_phdr
*) (GATE_ADDR
+ GATE_EHDR
->e_phoff
);
70 for (i
= 0; i
< GATE_EHDR
->e_phnum
; ++i
) {
71 if (gate_phdrs
[i
].p_type
== PT_LOAD
) {
72 size
+= PAGE_ALIGN(gate_phdrs
[i
].p_memsz
);