|
@@ -28,25 +28,11 @@
|
|
#include <command.h>
|
|
#include <command.h>
|
|
#include <net.h>
|
|
#include <net.h>
|
|
|
|
|
|
-#if defined(CONFIG_I386)
|
|
|
|
-DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
-static inline void go_setup(int argc, char *argv[])
|
|
|
|
|
|
+/* Allow ports to override the default behavior */
|
|
|
|
+__attribute__((weak))
|
|
|
|
+unsigned long do_go_exec (ulong (*entry)(int, char *[]), int argc, char *argv[])
|
|
{
|
|
{
|
|
-#if defined(CONFIG_I386)
|
|
|
|
- /*
|
|
|
|
- * x86 does not use a dedicated register to pass the pointer
|
|
|
|
- * to the global_data
|
|
|
|
- */
|
|
|
|
- argv[0] = (char *)gd;
|
|
|
|
-
|
|
|
|
-#elif defined(CONFIG_BLACKFIN)
|
|
|
|
- if (dcache_status ())
|
|
|
|
- dcache_disable ();
|
|
|
|
- if (icache_status ())
|
|
|
|
- icache_disable ();
|
|
|
|
-#endif
|
|
|
|
|
|
+ return entry (argc, argv);
|
|
}
|
|
}
|
|
|
|
|
|
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
@@ -63,20 +49,11 @@ int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
|
|
|
printf ("## Starting application at 0x%08lX ...\n", addr);
|
|
printf ("## Starting application at 0x%08lX ...\n", addr);
|
|
|
|
|
|
- go_setup(argc, argv);
|
|
|
|
-
|
|
|
|
-#if defined(CONFIG_NIOS)
|
|
|
|
- /*
|
|
|
|
- * Nios function pointers are address >> 1
|
|
|
|
- */
|
|
|
|
- addr >>= 1;
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* pass address parameter as argv[0] (aka command name),
|
|
* pass address parameter as argv[0] (aka command name),
|
|
* and all remaining args
|
|
* and all remaining args
|
|
*/
|
|
*/
|
|
- rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
|
|
|
|
|
|
+ rc = do_go_exec ((void *)addr, argc - 1, argv + 1);
|
|
if (rc != 0) rcode = 1;
|
|
if (rc != 0) rcode = 1;
|
|
|
|
|
|
printf ("## Application terminated, rc = 0x%lX\n", rc);
|
|
printf ("## Application terminated, rc = 0x%lX\n", rc);
|