svn commit: r210126 - head/sys/mips/rmi

Jayachandran C. jchandra at FreeBSD.org
Thu Jul 15 16:39:17 UTC 2010


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();


More information about the svn-src-all mailing list