diff options
Diffstat (limited to 'libgloss/arm/linux-crt0.c')
-rw-r--r-- | libgloss/arm/linux-crt0.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/libgloss/arm/linux-crt0.c b/libgloss/arm/linux-crt0.c new file mode 100644 index 0000000..29f317f --- /dev/null +++ b/libgloss/arm/linux-crt0.c @@ -0,0 +1,39 @@ +/** Linux startup code for the ARM processor. + * Written by Shaun Jackman <sjackman@gmail.com>. + * Copyright 2006 Pathway Connectivity + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include <stdlib.h> +#include <unistd.h> + +static int _main(int argc, char *argv[]) __attribute__((noreturn)); + +#if __thumb__ +asm("\n" + ".code 32\n" + ".global _start\n" + ".type _start, %function\n" + "_start:\n" + "\tadr r0, _start_thumb+1\n" + "\tbx r0\n" + ".size _start, .-_start\n"); + +__attribute__((naked, used)) +static void _start_thumb(void) +#else +__attribute__((naked)) +void _start(void) +#endif +{ + register int *sp asm("sp"); + _main(*sp, (char **)(sp + 1)); +} + +static int _main(int argc, char *argv[]) +{ + environ = argv + argc + 1; + exit(main(argc, argv, environ)); +} |