summaryrefslogtreecommitdiffstats
path: root/lib/csu/arm
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2004-09-23 23:00:51 +0000
committercognet <cognet@FreeBSD.org>2004-09-23 23:00:51 +0000
commitcb15a39d90a43a058228168dfdec8b01c0e46543 (patch)
tree5cf60f2c553cd6336c97f9195bc59201fbd6c4f7 /lib/csu/arm
parentc633cdf68be6914858d462856f152d41276356d3 (diff)
downloadFreeBSD-src-cb15a39d90a43a058228168dfdec8b01c0e46543.zip
FreeBSD-src-cb15a39d90a43a058228168dfdec8b01c0e46543.tar.gz
Implement .init and .fini.
Diffstat (limited to 'lib/csu/arm')
-rw-r--r--lib/csu/arm/crt1.c6
-rw-r--r--lib/csu/arm/crti.S20
-rw-r--r--lib/csu/arm/crtn.S9
3 files changed, 27 insertions, 8 deletions
diff --git a/lib/csu/arm/crt1.c b/lib/csu/arm/crt1.c
index bcee2ca..02af3c2 100644
--- a/lib/csu/arm/crt1.c
+++ b/lib/csu/arm/crt1.c
@@ -96,9 +96,8 @@ __asm(" .text \n"
" b __start ");
/* ARGSUSED */
void
-__start(int argc, char **argv, char **env,
- const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void),
- struct ps_strings *ps_strings)
+__start(int argc, char **argv, char **env, struct ps_strings *ps_strings,
+ const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void))
{
const char *s;
@@ -118,7 +117,6 @@ __start(int argc, char **argv, char **env,
atexit(cleanup);
else
_init_tls();
-
#ifdef GCRT
atexit(_mcleanup);
#endif
diff --git a/lib/csu/arm/crti.S b/lib/csu/arm/crti.S
index 2261c37..40e83bb 100644
--- a/lib/csu/arm/crti.S
+++ b/lib/csu/arm/crti.S
@@ -1,5 +1,21 @@
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
-ENTRY(_init)
-ENTRY(_fini)
+ .section .init,"ax",%progbits
+ .align 4
+ .globl _init
+ .type _init,%function
+_init:
+ mov ip, sp
+ stmdb sp!, {fp, ip, lr, pc}
+ sub fp, ip, #4
+
+ .section .fini,"ax",%progbits
+ .align 4
+ .globl _fini
+ .type _fini,%function
+_fini:
+ mov ip, sp
+ stmdb sp!, {fp, ip, lr, pc}
+ sub fp, ip, #4
+
diff --git a/lib/csu/arm/crtn.S b/lib/csu/arm/crtn.S
index 2785e42..d148b1e 100644
--- a/lib/csu/arm/crtn.S
+++ b/lib/csu/arm/crtn.S
@@ -1,4 +1,9 @@
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
-.section init
-.section fini
+ .section .init,"ax",%progbits
+ ldmea fp, {fp, sp, pc}
+ mov pc, lr
+
+ .section .fini,"ax",%progbits
+ ldmea fp, {fp, sp, pc}
+ mov pc, lr
OpenPOWER on IntegriCloud