aboutsummaryrefslogtreecommitdiff
path: root/lib/csu/mips
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2010-03-03 21:59:23 +0000
committerWarner Losh <imp@FreeBSD.org>2010-03-03 21:59:23 +0000
commit75b2bd679bd7f5bfcae0b622cb78e04ba63d0213 (patch)
treece64b682b31c5153d7d43575c3a974262181f5c2 /lib/csu/mips
parent800b5ba27d66a4ba9aa19f1f27d52b146ca65699 (diff)
Notes
Diffstat (limited to 'lib/csu/mips')
-rw-r--r--lib/csu/mips/crti.S51
-rw-r--r--lib/csu/mips/crtn.S29
2 files changed, 51 insertions, 29 deletions
diff --git a/lib/csu/mips/crti.S b/lib/csu/mips/crti.S
index 1a0d23e5a33b0..c976c84974b49 100644
--- a/lib/csu/mips/crti.S
+++ b/lib/csu/mips/crti.S
@@ -6,32 +6,45 @@ __FBSDID("$FreeBSD$");
.globl _init
.type _init,%function
_init:
-#ifdef __ABICALLS__
- .set noreorder
- .cpload $25
- .set reorder
- subu sp, sp, 32
- .cprestore 16
- sw ra, 28(sp)
-
+ .set nreoorder
+#if defined(__ABICALLS__) && (defined(__mips_o32) || defined(__mips_o64))
+ SETUP_GP
+#endif
+ PTR_ADDU sp, sp, -CALLFRAME_SIZ
+ REG_S ra, CALLFRAME_RA(sp)
+#if defined(__ABICALLS__)
+#if defined(__mips_o32) || defined(__mips_o64)
+ SAVE_GP(CALLFRAME_GP)
#else
- subu sp, sp, 32
- sw ra, 28(sp)
+ SETUP_GP64(CALLFRAME_GP, _init)
+#endif
+#else /* __ABICALLS__ */
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_S gp, CALLFRAME_GP(sp)
+#endif
#endif
+ .set reorder
.section .fini,"ax",%progbits
.align 4
.globl _fini
.type _fini,%function
_fini:
-#ifdef __ABICALLS__
- .set noreorder
- .cpload $25
- .set reorder
- subu sp, sp, 32
- .cprestore 16
- sw ra, 28(sp)
+ .set noreorder
+#if defined(__ABICALLS__) && (defined(__mips_o32) || defined(__mips_o64))
+ SETUP_GP
+#endif
+ PTR_ADDU sp, sp, -CALLFRAME_SIZ
+ REG_S ra, CALLFRAME_RA(sp)
+#if defined(__ABICALLS__)
+#if defined(__mips_o32) || defined(__mips_o64)
+ SAVE_GP(CALLFRAME_GP)
#else
- subu sp, sp, 32
- sw ra, 28(sp)
+ SETUP_GP64(CALLFRAME_GP, _fini)
+#endif
+#else /* __ABICALLS__ */
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_S gp, CALLFRAME_GP(sp)
+#endif
#endif
+ .set reorder
diff --git a/lib/csu/mips/crtn.S b/lib/csu/mips/crtn.S
index 4803994027f1f..8d190f811e2ec 100644
--- a/lib/csu/mips/crtn.S
+++ b/lib/csu/mips/crtn.S
@@ -1,15 +1,24 @@
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
+
.section .init,"ax",%progbits
- lw ra, 28(sp)
- .set noreorder
- j ra
- addu sp, sp, 32
- .set reorder
+ .align 4
+ .set noreorder
+#if defined(__ABICALLS__) && (defined(__mips_n32) || defined(__mips_n64))
+ REG_L gp, CALLFRAME_GP(sp)
+#endif
+ REG_L ra, CALLFRAME_RA(sp)
+ jr ra
+ PTR_ADDU sp, sp, CALLFRAME_SIZ
+ .set reorder
.section .fini,"ax",%progbits
- lw ra, 28(sp)
- .set noreorder
- j ra
- addu sp, sp, 32
- .set reorder
+ .align 4
+ .set noreorder
+#if defined(__ABICALLS__) && (defined(__mips_n32) || defined(__mips_n64))
+ REG_L gp, CALLFRAME_GP(sp)
+#endif
+ REG_L ra, CALLFRAME_RA(sp)
+ jr ra
+ PTR_ADDU sp, sp, CALLFRAME_SIZ
+ .set reorder