mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
kexec: add KEXEC_ELF
Right now powerpc provides an implementation to read elf files with the kexec_file_load() syscall. Make that available as a public kexec interface so it can be re-used on other architectures. Signed-off-by: Sven Schnelle <svens@stackframe.org> Reviewed-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
committed by
Helge Deller
parent
544f448599
commit
175fca3bf9
@@ -18,6 +18,9 @@ config KEXEC_CORE
|
||||
select CRASH_CORE
|
||||
bool
|
||||
|
||||
config KEXEC_ELF
|
||||
bool
|
||||
|
||||
config HAVE_IMA_KEXEC
|
||||
bool
|
||||
|
||||
|
||||
@@ -512,6 +512,7 @@ config KEXEC_FILE
|
||||
select KEXEC_CORE
|
||||
select HAVE_IMA_KEXEC
|
||||
select BUILD_BIN2C
|
||||
select KEXEC_ELF
|
||||
depends on PPC64
|
||||
depends on CRYPTO=y
|
||||
depends on CRYPTO_SHA256=y
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -216,6 +216,30 @@ extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
|
||||
void **addr, unsigned long *sz);
|
||||
#endif /* CONFIG_KEXEC_FILE */
|
||||
|
||||
#ifdef CONFIG_KEXEC_ELF
|
||||
struct kexec_elf_info {
|
||||
/*
|
||||
* Where the ELF binary contents are kept.
|
||||
* Memory managed by the user of the struct.
|
||||
*/
|
||||
const char *buffer;
|
||||
|
||||
const struct elfhdr *ehdr;
|
||||
const struct elf_phdr *proghdrs;
|
||||
struct elf_shdr *sechdrs;
|
||||
};
|
||||
|
||||
int kexec_build_elf_info(const char *buf, size_t len, struct elfhdr *ehdr,
|
||||
struct kexec_elf_info *elf_info);
|
||||
|
||||
int kexec_elf_load(struct kimage *image, struct elfhdr *ehdr,
|
||||
struct kexec_elf_info *elf_info,
|
||||
struct kexec_buf *kbuf,
|
||||
unsigned long *lowest_load_addr);
|
||||
|
||||
void kexec_free_elf_info(struct kexec_elf_info *elf_info);
|
||||
int kexec_elf_probe(const char *buf, unsigned long len);
|
||||
#endif
|
||||
struct kimage {
|
||||
kimage_entry_t head;
|
||||
kimage_entry_t *entry;
|
||||
|
||||
@@ -64,6 +64,7 @@ obj-$(CONFIG_CRASH_CORE) += crash_core.o
|
||||
obj-$(CONFIG_KEXEC_CORE) += kexec_core.o
|
||||
obj-$(CONFIG_KEXEC) += kexec.o
|
||||
obj-$(CONFIG_KEXEC_FILE) += kexec_file.o
|
||||
obj-$(CONFIG_KEXEC_ELF) += kexec_elf.o
|
||||
obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o
|
||||
obj-$(CONFIG_COMPAT) += compat.o
|
||||
obj-$(CONFIG_CGROUPS) += cgroup/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user