Commit 175fca3b authored by Sven Schnelle's avatar Sven Schnelle Committed by Helge Deller

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: default avatarSven Schnelle <svens@stackframe.org>
Reviewed-by: default avatarThiago Jung Bauermann <bauerman@linux.ibm.com>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 544f4485
...@@ -18,6 +18,9 @@ config KEXEC_CORE ...@@ -18,6 +18,9 @@ config KEXEC_CORE
select CRASH_CORE select CRASH_CORE
bool bool
config KEXEC_ELF
bool
config HAVE_IMA_KEXEC config HAVE_IMA_KEXEC
bool bool
......
...@@ -512,6 +512,7 @@ config KEXEC_FILE ...@@ -512,6 +512,7 @@ config KEXEC_FILE
select KEXEC_CORE select KEXEC_CORE
select HAVE_IMA_KEXEC select HAVE_IMA_KEXEC
select BUILD_BIN2C select BUILD_BIN2C
select KEXEC_ELF
depends on PPC64 depends on PPC64
depends on CRYPTO=y depends on CRYPTO=y
depends on CRYPTO_SHA256=y depends on CRYPTO_SHA256=y
......
This diff is collapsed.
...@@ -216,6 +216,30 @@ extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map, ...@@ -216,6 +216,30 @@ extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
void **addr, unsigned long *sz); void **addr, unsigned long *sz);
#endif /* CONFIG_KEXEC_FILE */ #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 { struct kimage {
kimage_entry_t head; kimage_entry_t head;
kimage_entry_t *entry; kimage_entry_t *entry;
......
...@@ -64,6 +64,7 @@ obj-$(CONFIG_CRASH_CORE) += crash_core.o ...@@ -64,6 +64,7 @@ obj-$(CONFIG_CRASH_CORE) += crash_core.o
obj-$(CONFIG_KEXEC_CORE) += kexec_core.o obj-$(CONFIG_KEXEC_CORE) += kexec_core.o
obj-$(CONFIG_KEXEC) += kexec.o obj-$(CONFIG_KEXEC) += kexec.o
obj-$(CONFIG_KEXEC_FILE) += kexec_file.o obj-$(CONFIG_KEXEC_FILE) += kexec_file.o
obj-$(CONFIG_KEXEC_ELF) += kexec_elf.o
obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o
obj-$(CONFIG_COMPAT) += compat.o obj-$(CONFIG_COMPAT) += compat.o
obj-$(CONFIG_CGROUPS) += cgroup/ obj-$(CONFIG_CGROUPS) += cgroup/
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment