/* SPDX-License-Identifier: GPL-2.0-only */ #include <program_loading.h> #if ENV_PAYLOAD_LOADER /* * Payload's entry point is an offset to the real entry point, not to OPD * (Official Procedure Descriptor) for entry point. */ void arch_prog_run(struct prog *prog) { asm volatile( "mtctr %1\n" "mr 3, %0\n" "bctr\n" :: "r"(prog_entry_arg(prog)), "r"(prog_entry(prog)) : "memory"); } #else void arch_prog_run(struct prog *prog) { void (*doit)(void *) = prog_entry(prog); doit(prog_entry_arg(prog)); } #endif