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;