a) Clean up crt0.c somewhat
b) Support $(CROSS) in the makefile
c) Compile with -nostdinc -iwithprefix include

diff --git a/crt0.c b/crt0.c
index 09700a0..cb33c78 100644
--- a/crt0.c
+++ b/crt0.c
@@ -8,6 +8,34 @@
 
 extern int main(int argc, char **argv, char **envp);
 
+#if defined(__i386__)
+register uintptr_t *params asm("%esp");
+#elif defined(__x86_64__)
+register uintptr_t *params asm("%rsp");
+#elif defined(__sparc64__)
+register uintptr_t sp asm("%sp");
+#define BIAS 2047
+#define params ((uintptr_t *)(sp+BIAS) + 16)
+#elif defined(__sparc__) && !defined(__sparc64__)
+register uintptr_t *sp asm("%sp");
+#define params (sp+16)
+#elif defined(__mips__) || defined(__mips64__)
+register uintptr_t *params asm("$sp");
+#elif defined(__powerpc__)
+register uintptr_t *params asm("r9");
+#elif defined(__hppa__)
+# define STACK_GROWS_UP
+register uintptr_t *params asm("%r25");
+#elif defined(__s390__)
+register uintptr_t *params asm("%r15");
+#elif defined(__alpha__)
+register uintptr_t *params asm("$sp");
+#elif defined(__arm__)
+register uintptr_t *params asm("sp");
+#else
+#error "Need crt0.c port for this architecture!"
+#endif
+
 void _start(void)
 {
   /*
@@ -20,34 +48,6 @@
   int argc;
   char **argv;
 
-#if defined(__i386__)
-  register uintptr_t *params asm("%esp");
-#elif defined(__x86_64__)
-  register uintptr_t *params asm("%rsp");
-#elif defined(__sparc64__)
-  register uintptr_t sp asm("%sp");
-#define BIAS 2047
-  uintptr_t *params = (uintptr_t *)(sp+BIAS) + 16;
-#elif defined(__sparc__) && !defined(__sparc64__)
-  register uintptr_t *sp asm("%sp");
-  uintptr_t *params = sp+16;	/* SPARC needs a window save area */
-#elif defined(__mips__) || defined(__mips64__)
-  register uintptr_t *params asm("$sp");
-#elif defined(__powerpc__)
-  register uintptr_t *params asm("r9");
-#elif defined(__hppa__)
-# define STACK_GROWS_UP
-  register uintptr_t *params asm("%r25");
-#elif defined(__s390__)
-  register uintptr_t *params asm("%r15");
-#elif defined(__alpha__)
-  register uintptr_t *params asm("$sp");
-#elif defined(__arm__)
-  register uintptr_t *params asm("sp");
-#else
-#error "Need crt0.c port for this architecture!"
-#endif
-
   /* These seem to be standard for all the ELF ABIs... */
 #ifdef STACK_GROWS_UP
   argc    = (int) *params;
diff --git a/klibc/Makefile b/klibc/Makefile
index ea68b31..b675047 100644
--- a/klibc/Makefile
+++ b/klibc/Makefile
@@ -1,12 +1,13 @@
 ARCH    = i386
-CC	= gcc
-LD      = ld
+CROSS   = 
+CC	= $(CROSS)gcc
+LD      = $(CROSS)ld
 OPTFLAGS = -Os -fomit-frame-pointer -march=i386 -mcpu=i686 \
 	   -malign-functions=0 -malign-jumps=0 -malign-loops=0
-CFLAGS  = -I. -I./include -I./linux/include -Wall -g $(OPTFLAGS)
+CFLAGS  = -nostdinc -iwithprefix include -I. -I./include -I./linux/include -Wall -g $(OPTFLAGS)
 LDFLAGS =
-AR      = ar
-RANLIB  = ranlib
+AR      = $(CROSS)ar
+RANLIB  = $(CROSS)ranlib
 PERL    = perl
 
 TESTS   = testvsnp hello minihello microhello getenvtest \
diff --git a/klibc/crt0.c b/klibc/crt0.c
index 09700a0..cb33c78 100644
--- a/klibc/crt0.c
+++ b/klibc/crt0.c
@@ -8,6 +8,34 @@
 
 extern int main(int argc, char **argv, char **envp);
 
+#if defined(__i386__)
+register uintptr_t *params asm("%esp");
+#elif defined(__x86_64__)
+register uintptr_t *params asm("%rsp");
+#elif defined(__sparc64__)
+register uintptr_t sp asm("%sp");
+#define BIAS 2047
+#define params ((uintptr_t *)(sp+BIAS) + 16)
+#elif defined(__sparc__) && !defined(__sparc64__)
+register uintptr_t *sp asm("%sp");
+#define params (sp+16)
+#elif defined(__mips__) || defined(__mips64__)
+register uintptr_t *params asm("$sp");
+#elif defined(__powerpc__)
+register uintptr_t *params asm("r9");
+#elif defined(__hppa__)
+# define STACK_GROWS_UP
+register uintptr_t *params asm("%r25");
+#elif defined(__s390__)
+register uintptr_t *params asm("%r15");
+#elif defined(__alpha__)
+register uintptr_t *params asm("$sp");
+#elif defined(__arm__)
+register uintptr_t *params asm("sp");
+#else
+#error "Need crt0.c port for this architecture!"
+#endif
+
 void _start(void)
 {
   /*
@@ -20,34 +48,6 @@
   int argc;
   char **argv;
 
-#if defined(__i386__)
-  register uintptr_t *params asm("%esp");
-#elif defined(__x86_64__)
-  register uintptr_t *params asm("%rsp");
-#elif defined(__sparc64__)
-  register uintptr_t sp asm("%sp");
-#define BIAS 2047
-  uintptr_t *params = (uintptr_t *)(sp+BIAS) + 16;
-#elif defined(__sparc__) && !defined(__sparc64__)
-  register uintptr_t *sp asm("%sp");
-  uintptr_t *params = sp+16;	/* SPARC needs a window save area */
-#elif defined(__mips__) || defined(__mips64__)
-  register uintptr_t *params asm("$sp");
-#elif defined(__powerpc__)
-  register uintptr_t *params asm("r9");
-#elif defined(__hppa__)
-# define STACK_GROWS_UP
-  register uintptr_t *params asm("%r25");
-#elif defined(__s390__)
-  register uintptr_t *params asm("%r15");
-#elif defined(__alpha__)
-  register uintptr_t *params asm("$sp");
-#elif defined(__arm__)
-  register uintptr_t *params asm("sp");
-#else
-#error "Need crt0.c port for this architecture!"
-#endif
-
   /* These seem to be standard for all the ELF ABIs... */
 #ifdef STACK_GROWS_UP
   argc    = (int) *params;