From 0b6bb78b345ea7b05149ae86e3f8eb003998bec3 Mon Sep 17 00:00:00 2001 From: Shaun Jackman Date: Wed, 5 Jul 2006 15:24:30 +0000 Subject: [PATCH] 2006-07-05 Shaun Jackman * arm/linux-crt0.S: Remove file. * arm/linux-crt0.c: New file. Supports PIC code. --- libgloss/ChangeLog | 5 +++++ libgloss/arm/linux-crt0.S | 46 --------------------------------------- libgloss/arm/linux-crt0.c | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 46 deletions(-) delete mode 100644 libgloss/arm/linux-crt0.S create mode 100644 libgloss/arm/linux-crt0.c diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index f7e794a74..ff9d406f3 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,8 @@ +2006-07-05 Shaun Jackman + + * arm/linux-crt0.S: Remove file. + * arm/linux-crt0.c: New file. Supports PIC code. + 2006-07-04 Shaun Jackman * arm/linux-syscalls0.S (ftruncate, getegid, geteuid, getgid, diff --git a/libgloss/arm/linux-crt0.S b/libgloss/arm/linux-crt0.S deleted file mode 100644 index b3ba5bd0d..000000000 --- a/libgloss/arm/linux-crt0.S +++ /dev/null @@ -1,46 +0,0 @@ -/** Linux startup code for the ARM processor. - * Written by Shaun Jackman . - * Copyright 2006 Pathway Connectivity - * - * Permission to use, copy, modify, and distribute this software - * is freely granted, provided that this notice is preserved. - */ - -.global _start -.type _start, %function -_start: -#if __thumb__ - /* Switch to Thumb mode. */ - adr r0, _start_thumb+1 - bx r0 -.size _start, .-_start -.global _start_thumb -.thumb_func -_start_thumb: -#endif - -#if 0 - /* Clear the BSS. This task is normally handled by the kernel. */ - ldr r0, =__bss_start - mov r1, #0 - ldr r2, =_end - sub r2, r2, r0 - bl memset -#endif - - pop {r0} @ argc - mov r1, sp @ argv - lsl r2, r0, #2 - add r2, r1 - add r2, #4 @ envp - ldr r3, =environ - str r2, [r3] - bl main - bl exit - b . - -#if __thumb__ -.size _start_thumb, .-_start_thumb -#else -.size _start, .-_start -#endif diff --git a/libgloss/arm/linux-crt0.c b/libgloss/arm/linux-crt0.c new file mode 100644 index 000000000..29f317fd7 --- /dev/null +++ b/libgloss/arm/linux-crt0.c @@ -0,0 +1,39 @@ +/** Linux startup code for the ARM processor. + * Written by Shaun Jackman . + * Copyright 2006 Pathway Connectivity + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include +#include + +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)); +}