x86: Fix do_go_exec()
authorGraeme Russ <graeme.russ@gmail.com>
Fri, 23 Apr 2010 14:05:39 +0000 (00:05 +1000)
committerWolfgang Denk <wd@denx.de>
Wed, 5 May 2010 22:14:08 +0000 (00:14 +0200)
This was broken a long time ago by a49864593e083a5d0779fb9ca98e5a0f2053183d
which munged the NIOS and x86 do_go_exec()

Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
arch/i386/lib/board.c

index af81cd5b2377e18c233de2253958baff533177d8..5e28c6f7dfcdca0fcf839d3487ea3ec5f4c2ef09 100644 (file)
@@ -422,10 +422,10 @@ void hang (void)
 unsigned long do_go_exec (ulong (*entry)(int, char *[]), int argc, char *argv[])
 {
        /*
-        * TODO: Test this function - changed to fix compiler error.
-        * Original code was:
-        *   return (entry >> 1) (argc, argv);
-        * with a comment about Nios function pointers are address >> 1
+        * x86 does not use a dedicated register to pass the pointer
+        * to the global_data
         */
+       argv[-1] = (char *)gd;
+
        return (entry) (argc, argv);
 }