3 #include "xlat/kexec_load_flags.h"
4 #include "xlat/kexec_arch_values.h"
6 #ifndef KEXEC_ARCH_MASK
7 # define KEXEC_ARCH_MASK 0xffff0000
9 #ifndef KEXEC_SEGMENT_MAX
10 # define KEXEC_SEGMENT_MAX 16
14 print_seg(const unsigned long *seg)
18 tprintf(", %lu, ", seg[1]);
20 tprintf(", %lu}", seg[3]);
24 print_kexec_segments(struct tcb *tcp, const unsigned long addr,
25 const unsigned long len)
28 const size_t sizeof_seg = ARRAY_SIZE(seg) * current_wordsize;
36 if (len > KEXEC_SEGMENT_MAX) {
41 if (umove_ulong_array_or_printaddr(tcp, addr, seg, ARRAY_SIZE(seg)))
47 for (i = 1; i < len; ++i) {
49 if (umove_ulong_array_or_printaddr(tcp,
50 addr + i * sizeof_seg,
51 seg, ARRAY_SIZE(seg)))
63 /* entry, nr_segments */
64 printaddr(tcp->u_arg[0]);
65 tprintf(", %lu, ", tcp->u_arg[1]);
68 print_kexec_segments(tcp, tcp->u_arg[2], tcp->u_arg[1]);
73 printxval(kexec_arch_values, n & KEXEC_ARCH_MASK, "KEXEC_ARCH_???");
74 n &= ~KEXEC_ARCH_MASK;
77 printflags(kexec_load_flags, n, "KEXEC_???");
83 #include "xlat/kexec_file_load_flags.h"
85 SYS_FUNC(kexec_file_load)
88 printfd(tcp, tcp->u_arg[0]);
91 printfd(tcp, tcp->u_arg[1]);
94 tprintf("%lu, ", tcp->u_arg[2]);
96 printstr(tcp, tcp->u_arg[3], tcp->u_arg[2]);
99 printflags(kexec_file_load_flags, tcp->u_arg[4], "KEXEC_FILE_???");