Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2001-09-18 19:42:41 +0400
committerNick Clifton <nickc@redhat.com>2001-09-18 19:42:41 +0400
commitb244a689092352255c5672a25514e8da8513267e (patch)
treeeb55b2564b0a9377d52cbc02297236d0982e18be /newlib
parent8b77cd25035f952a8f55cb25a0c8d32d58acd888 (diff)
oops omitted in previous delta
Diffstat (limited to 'newlib')
-rw-r--r--newlib/libc/sys/arm/crt0.S40
1 files changed, 26 insertions, 14 deletions
diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S
index 42693a4a6..11ce83c0c 100644
--- a/newlib/libc/sys/arm/crt0.S
+++ b/newlib/libc/sys/arm/crt0.S
@@ -181,12 +181,22 @@ __change_mode:
#endif
#endif
+
+#ifdef __USES_INITFINI__
+ /* Some arm/elf targets use the .init and .fini sections
+ to create constructors and destructors, and for these
+ targets we need to call the _init function and arrange
+ for _fini to be called at program exit. */
+ ldr r0, .Lfini
+ bl FUNCTION (atexit)
+ bl FUNCTION (_init)
+#endif
bl FUNCTION (main)
- bl FUNCTION (exit) /* Should not return */
+ bl FUNCTION (exit) /* Should not return. */
#ifdef __thumb__
- /* Come out of Thumb mode... This code should be redundant... */
+ /* Come out of Thumb mode. This code should be redundant. */
mov a4, pc
bx a4
@@ -195,16 +205,14 @@ __change_mode:
.global change_back
change_back:
/* Halt the execution. This code should never be executed. */
- /*
- ** With no debug monitor, this probably aborts (eventually).
- ** With a Demon debug monitor, this halts cleanly.
- ** With an Angel debug monitor, this will report 'Unknown SWI'.
- */
+ /* With no debug monitor, this probably aborts (eventually).
+ With a Demon debug monitor, this halts cleanly.
+ With an Angel debug monitor, this will report 'Unknown SWI'. */
swi SWI_Exit
#endif
/* For Thumb, constants must be after the code since only
- positive offsets are supported for PC relative addresses. */
+ positive offsets are supported for PC relative addresses. */
.align 0
.LC0:
@@ -215,7 +223,7 @@ change_back:
#ifdef __pe__
.word 0x800000
#else
-/* .word 0x80000 */ /* Top of RAM on the PIE board */
+/* .word 0x80000 */ /* Top of RAM on the PIE board. */
#endif
#endif
#endif
@@ -223,19 +231,23 @@ change_back:
.word __bss_start__
.LC2:
.word __bss_end__
-
+#ifdef __USES_INITFINI__
+.Lfini:
+ .word FUNCTION(_fini)
+#endif
#ifdef ARM_RDI_MONITOR
-.LC30: .word CommandLine
+.LC30:
+ .word CommandLine
.word 255
-/* Workspace for Angel calls. */
+/* Workspace for Angel calls. */
.data
-/* Data returned by monitor SWI */
+/* Data returned by monitor SWI. */
HeapBase: .word 0
HeapLimit: .word 0
StackBase: .word 0
StackLimit: .word 0
-CommandLine: .space 256,0 /* Maximum length of 255 chars handled */
+CommandLine: .space 256,0 /* Maximum length of 255 chars handled. */
#endif
#ifdef __pe__