Currently, kernel_uimage_probe() does not set info->zimage.start. As a result, it contains the default value (ie 0). This causes, kernel_zimage_place() to treat the binary (contained within uImage) as position independent executable. Thus, it loads it at an incorrect address.
The correct approach would be to read "uimage.ep" and set info->zimage.start. This will ensure that the binary is loaded at the correct address. Signed-off-by: Ayan Kumar Halder <ayan.kumar.hal...@amd.com> --- I uncovered this issue while loading Zephyr as a dom0less domU with Xen on R52 FVP. Zephyr builds with static device tree. Thus, the load address is always fixed. xen/arch/arm/kernel.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c index 2556a45c38..e4e8c67669 100644 --- a/xen/arch/arm/kernel.c +++ b/xen/arch/arm/kernel.c @@ -222,6 +222,8 @@ static int __init kernel_uimage_probe(struct kernel_info *info, if ( len > size - sizeof(uimage) ) return -EINVAL; + info->zimage.start = be32_to_cpu(uimage.ep); + info->zimage.kernel_addr = addr + sizeof(uimage); info->zimage.len = len; -- 2.17.1