Author: jchandra
Date: Thu Jul 15 16:39:17 2010
New Revision: 210126
URL: http://svn.freebsd.org/changeset/base/210126

Log:
  Fix for 64 bit compilation.
  
  RMI bootloader passes argv[] and envp[] as an array of 32 bit pointers.
  Convert the pointers to correct pointer type before use.

Modified:
  head/sys/mips/rmi/xlr_machdep.c

Modified: head/sys/mips/rmi/xlr_machdep.c
==============================================================================
--- head/sys/mips/rmi/xlr_machdep.c     Thu Jul 15 16:32:59 2010        
(r210125)
+++ head/sys/mips/rmi/xlr_machdep.c     Thu Jul 15 16:39:17 2010        
(r210126)
@@ -89,7 +89,7 @@ struct boot1_info xlr_boot1_info;
 struct xlr_loader_info xlr_loader_info;        /* FIXME : Unused */
 int xlr_run_mode;
 int xlr_argc;
-char **xlr_argv, **xlr_envp;
+int32_t *xlr_argv, *xlr_envp;
 uint64_t cpu_mask_info;
 uint32_t xlr_online_cpumask;
 uint32_t xlr_core_cpu_mask = 0x1;      /* Core 0 thread 0 is always there */
@@ -298,8 +298,11 @@ platform_start(__register_t a0 __unused,
        xlr_online_cpumask = read_c0_register32(MIPS_COP_0_OSSCRATCH, 2);
        xlr_run_mode = read_c0_register32(MIPS_COP_0_OSSCRATCH, 3);
        xlr_argc = read_c0_register32(MIPS_COP_0_OSSCRATCH, 4);
-       xlr_argv = (char 
**)(intptr_t)(int)read_c0_register32(MIPS_COP_0_OSSCRATCH, 5);
-       xlr_envp = (char 
**)(intptr_t)(int)read_c0_register32(MIPS_COP_0_OSSCRATCH, 6);
+       /*
+        * argv and envp are passed in array of 32bit pointers
+        */
+       xlr_argv = (int32_t 
*)(intptr_t)(int)read_c0_register32(MIPS_COP_0_OSSCRATCH, 5);
+       xlr_envp = (int32_t 
*)(intptr_t)(int)read_c0_register32(MIPS_COP_0_OSSCRATCH, 6);
 
        /* TODO: Verify the magic number here */
        /* FIXMELATER: xlr_boot1_info.magic_number */
@@ -331,14 +334,15 @@ platform_start(__register_t a0 __unused,
        if (xlr_argc == 1)
                printf("\tNone\n");
        for (i = 1; i < xlr_argc; i++) {
-               char *n;
+               char *n, *arg;
 
-               printf("\t%s\n", xlr_argv[i]);
-               n = strsep(&xlr_argv[i], "=");
-               if (xlr_argv[i] == NULL)
+               arg = (char *)(intptr_t)xlr_argv[i];
+               printf("\t%s\n", arg);
+               n = strsep(&arg, "=");
+               if (arg == NULL)
                        setenv(n, "1");
                else
-                       setenv(n, xlr_argv[i]);
+                       setenv(n, arg);
        }
 
        xlr_set_boot_flags();
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to