mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 17:25:38 +00:00
9ffc6724a3
This will address below -Wmissing-prototypes warnings: arch/um/kernel/mem.c:202:8: warning: no previous prototype for ‘pgd_alloc’ [-Wmissing-prototypes] arch/um/kernel/mem.c:215:7: warning: no previous prototype for ‘uml_kmalloc’ [-Wmissing-prototypes] arch/um/kernel/process.c:207:6: warning: no previous prototype for ‘arch_cpu_idle’ [-Wmissing-prototypes] arch/um/kernel/process.c:328:15: warning: no previous prototype for ‘arch_align_stack’ [-Wmissing-prototypes] arch/um/kernel/reboot.c:45:6: warning: no previous prototype for ‘machine_restart’ [-Wmissing-prototypes] arch/um/kernel/reboot.c:51:6: warning: no previous prototype for ‘machine_power_off’ [-Wmissing-prototypes] arch/um/kernel/reboot.c:57:6: warning: no previous prototype for ‘machine_halt’ [-Wmissing-prototypes] arch/um/kernel/skas/mmu.c:17:5: warning: no previous prototype for ‘init_new_context’ [-Wmissing-prototypes] arch/um/kernel/skas/mmu.c:60:6: warning: no previous prototype for ‘destroy_context’ [-Wmissing-prototypes] arch/um/kernel/skas/process.c:36:12: warning: no previous prototype for ‘start_uml’ [-Wmissing-prototypes] arch/um/kernel/time.c:807:15: warning: no previous prototype for ‘calibrate_delay_is_known’ [-Wmissing-prototypes] arch/um/kernel/tlb.c:594:6: warning: no previous prototype for ‘force_flush_all’ [-Wmissing-prototypes] arch/x86/um/bugs_32.c:22:6: warning: no previous prototype for ‘arch_check_bugs’ [-Wmissing-prototypes] arch/x86/um/bugs_32.c:44:6: warning: no previous prototype for ‘arch_examine_signal’ [-Wmissing-prototypes] arch/x86/um/bugs_64.c:9:6: warning: no previous prototype for ‘arch_check_bugs’ [-Wmissing-prototypes] arch/x86/um/bugs_64.c:13:6: warning: no previous prototype for ‘arch_examine_signal’ [-Wmissing-prototypes] arch/x86/um/elfcore.c:10:12: warning: no previous prototype for ‘elf_core_extra_phdrs’ [-Wmissing-prototypes] arch/x86/um/elfcore.c:15:5: warning: no previous prototype for ‘elf_core_write_extra_phdrs’ [-Wmissing-prototypes] arch/x86/um/elfcore.c:42:5: warning: no previous prototype for ‘elf_core_write_extra_data’ [-Wmissing-prototypes] arch/x86/um/elfcore.c:63:8: warning: no previous prototype for ‘elf_core_extra_data_size’ [-Wmissing-prototypes] arch/x86/um/fault.c:18:5: warning: no previous prototype for ‘arch_fixup’ [-Wmissing-prototypes] arch/x86/um/os-Linux/mcontext.c:7:6: warning: no previous prototype for ‘get_regs_from_mc’ [-Wmissing-prototypes] arch/x86/um/os-Linux/tls.c:22:6: warning: no previous prototype for ‘check_host_supports_tls’ [-Wmissing-prototypes] Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com> Signed-off-by: Richard Weinberger <richard@nod.at>
79 lines
1.8 KiB
C
79 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include <linux/elf.h>
|
|
#include <linux/elfcore.h>
|
|
#include <linux/coredump.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/mm.h>
|
|
|
|
#include <asm/elf.h>
|
|
|
|
|
|
Elf32_Half elf_core_extra_phdrs(struct coredump_params *cprm)
|
|
{
|
|
return vsyscall_ehdr ? (((struct elfhdr *)vsyscall_ehdr)->e_phnum) : 0;
|
|
}
|
|
|
|
int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
|
|
{
|
|
if ( vsyscall_ehdr ) {
|
|
const struct elfhdr *const ehdrp =
|
|
(struct elfhdr *) vsyscall_ehdr;
|
|
const struct elf_phdr *const phdrp =
|
|
(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
|
|
int i;
|
|
Elf32_Off ofs = 0;
|
|
|
|
for (i = 0; i < ehdrp->e_phnum; ++i) {
|
|
struct elf_phdr phdr = phdrp[i];
|
|
|
|
if (phdr.p_type == PT_LOAD) {
|
|
ofs = phdr.p_offset = offset;
|
|
offset += phdr.p_filesz;
|
|
} else {
|
|
phdr.p_offset += ofs;
|
|
}
|
|
phdr.p_paddr = 0; /* match other core phdrs */
|
|
if (!dump_emit(cprm, &phdr, sizeof(phdr)))
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int elf_core_write_extra_data(struct coredump_params *cprm)
|
|
{
|
|
if ( vsyscall_ehdr ) {
|
|
const struct elfhdr *const ehdrp =
|
|
(struct elfhdr *) vsyscall_ehdr;
|
|
const struct elf_phdr *const phdrp =
|
|
(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
|
|
int i;
|
|
|
|
for (i = 0; i < ehdrp->e_phnum; ++i) {
|
|
if (phdrp[i].p_type == PT_LOAD) {
|
|
void *addr = (void *) phdrp[i].p_vaddr;
|
|
size_t filesz = phdrp[i].p_filesz;
|
|
if (!dump_emit(cprm, addr, filesz))
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
size_t elf_core_extra_data_size(struct coredump_params *cprm)
|
|
{
|
|
if ( vsyscall_ehdr ) {
|
|
const struct elfhdr *const ehdrp =
|
|
(struct elfhdr *)vsyscall_ehdr;
|
|
const struct elf_phdr *const phdrp =
|
|
(const struct elf_phdr *) (vsyscall_ehdr + ehdrp->e_phoff);
|
|
int i;
|
|
|
|
for (i = 0; i < ehdrp->e_phnum; ++i)
|
|
if (phdrp[i].p_type == PT_LOAD)
|
|
return (size_t) phdrp[i].p_filesz;
|
|
}
|
|
return 0;
|
|
}
|