summaryrefslogtreecommitdiff
path: root/linux/kexec.h
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2014-02-05 13:48:26 +0000
committerDmitry V. Levin <ldv@altlinux.org>2014-02-05 14:25:20 +0000
commit90aa9f4d72e26581ea0a39c02db625d7bd4e2962 (patch)
tree3bab8cebbe335010cb7ee1402904320e78e649e7 /linux/kexec.h
parentd21f186a94086fae25788e14c584fcce52bd67b6 (diff)
downloadstrace-90aa9f4d72e26581ea0a39c02db625d7bd4e2962.tar.gz
strace-90aa9f4d72e26581ea0a39c02db625d7bd4e2962.tar.bz2
strace-90aa9f4d72e26581ea0a39c02db625d7bd4e2962.tar.xz
Implement kexec_load decoding
* kexec.c: New file. * linux/kexec.h: Likewise. * Makefile.am (strace_SOURCES): Add kexec.c. (EXTRA_DIST): Add linux/kexec.h. * linux/dummy.h (sys_kexec_load): Remove. * linux/syscall.h (sys_kexec_load): New prototype.
Diffstat (limited to 'linux/kexec.h')
-rw-r--r--linux/kexec.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/linux/kexec.h b/linux/kexec.h
new file mode 100644
index 0000000..767ccb5
--- /dev/null
+++ b/linux/kexec.h
@@ -0,0 +1,50 @@
+#ifndef LINUX_KEXEC_H
+#define LINUX_KEXEC_H
+
+/* kexec system call - It loads the new kernel to boot into.
+ * kexec does not sync, or unmount filesystems so if you need
+ * that to happen you need to do that yourself.
+ */
+
+/* kexec flags for different usage scenarios */
+#define KEXEC_ON_CRASH 0x00000001
+#define KEXEC_PRESERVE_CONTEXT 0x00000002
+#define KEXEC_ARCH_MASK 0xffff0000
+
+/* These values match the ELF architecture values.
+ * Unless there is a good reason that should continue to be the case.
+ */
+#define KEXEC_ARCH_DEFAULT ( 0 << 16)
+#define KEXEC_ARCH_386 ( 3 << 16)
+#define KEXEC_ARCH_X86_64 (62 << 16)
+#define KEXEC_ARCH_PPC (20 << 16)
+#define KEXEC_ARCH_PPC64 (21 << 16)
+#define KEXEC_ARCH_IA_64 (50 << 16)
+#define KEXEC_ARCH_ARM (40 << 16)
+#define KEXEC_ARCH_S390 (22 << 16)
+#define KEXEC_ARCH_SH (42 << 16)
+#define KEXEC_ARCH_MIPS_LE (10 << 16)
+#define KEXEC_ARCH_MIPS ( 8 << 16)
+
+/* The artificial cap on the number of segments passed to kexec_load. */
+#define KEXEC_SEGMENT_MAX 16
+
+/*
+ * This structure is used to hold the arguments that are used when
+ * loading kernel binaries.
+ */
+struct kexec_segment {
+ const void *buf;
+ size_t bufsz;
+ const void *mem;
+ size_t memsz;
+};
+
+/* Load a new kernel image as described by the kexec_segment array
+ * consisting of passed number of segments at the entry-point address.
+ * The flags allow different useage types.
+ */
+extern int kexec_load(void *, size_t, struct kexec_segment *,
+ unsigned long int);
+
+#endif /* LINUX_KEXEC_H */