[U-Boot] [PATCH v2] common: Remove invalid endianess conversion
Christian Eggers
ceggers at gmx.de
Thu Feb 6 22:13:07 CET 2014
do_bootm_standanlone() calls ntohl(images->ep) which is wrong because
endianess conversion has already been done:
do_bootm()
\-do_bootm_states()
+-bootm_find_os()
| \-images.ep = image_get_ep();
| \-uimage_to_cpu(hdr->ih_ep);
\-boot_selected_os()
\-do_bootm_standanlone()
Without this conversion the code works correctly at least on ARM9.
Addtionally "appl" need not be dereferenced with the "*" operator.
Signed-off-by: Christian Eggers <ceggers at gmx.de>
---
Changes in v2:
- Improve description why the patch is required
- (appl)(...) --> appl(...)
Further remarks:
It seems there's no real difference between doing
"(*func_ptr)(args)" and "func_ptr(args)":
--- arm ---
kernel_entry = (void (*)(int, int, uint))images->ep;
kernel_entry(0, machid, r2)
---/arm ---
--- powerpc ---
kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong, ulong, ulong))images->ep;
(*kernel)(kbd, initrd_start, initrd_end, cmd_start, cmd_end, 0, 0);
---/powerpc ---
See also:
http://stackoverflow.com/questions/7518815/function-pointer-automatic-dereferencing
common/cmd_bootm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index a59ee95..c507e1d 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -514,8 +514,8 @@ static int do_bootm_standalone(int flag, int argc, char *
const argv[],
setenv_hex("filesize", images->os.image_len);
return 0;
}
- appl = (int (*)(int, char * const []))(ulong)ntohl(images->ep);
- (*appl)(argc, argv);
+ appl = (int (*)(int, char * const []))images->ep;
+ appl(argc, argv);
return 0;
}
--
1.8.4.5
More information about the U-Boot
mailing list