Module Name: src
Committed By: matt
Date: Sun Jun 30 08:00:35 UTC 2013
Modified Files:
src/lib/csu/arch/mips: crtbegin.h crti.S crtn.S
Log Message:
For O32, don't save $gp on the stack, save $s0 instead and just keep $gp
in $s0.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/lib/csu/arch/mips/crtbegin.h
cvs rdiff -u -r1.1 -r1.2 src/lib/csu/arch/mips/crti.S \
src/lib/csu/arch/mips/crtn.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/csu/arch/mips/crtbegin.h
diff -u src/lib/csu/arch/mips/crtbegin.h:1.2 src/lib/csu/arch/mips/crtbegin.h:1.3
--- src/lib/csu/arch/mips/crtbegin.h:1.2 Tue Jun 25 16:51:14 2013
+++ src/lib/csu/arch/mips/crtbegin.h Sun Jun 30 08:00:34 2013
@@ -32,8 +32,7 @@ __asm( "\n\t"
#ifdef __mips_o32
".set noreorder" "\n\t"
".set nomacro" "\n\t"
- "lw $28,16($sp)" "\n\t"
- "nop" "\n\t"
+ "move $28,$16" "\n\t"
"lw $25,%got(__do_global_ctors_aux)($28)" "\n\t"
"nop" "\n\t"
"addiu $25,$25,%lo(__do_global_ctors_aux)" "\n\t"
@@ -52,8 +51,7 @@ __asm( "\n\t"
#ifdef __mips_o32
".set noreorder" "\n\t"
".set nomacro" "\n\t"
- "lw $28,16($sp)" "\n\t"
- "nop" "\n\t"
+ "move $28,$16" "\n\t"
"lw $25,%got(__do_global_dtors_aux)($28)" "\n\t"
"nop" "\n\t"
"addiu $25,$25,%lo(__do_global_dtors_aux)" "\n\t"
Index: src/lib/csu/arch/mips/crti.S
diff -u src/lib/csu/arch/mips/crti.S:1.1 src/lib/csu/arch/mips/crti.S:1.2
--- src/lib/csu/arch/mips/crti.S:1.1 Sat Jun 22 02:37:09 2013
+++ src/lib/csu/arch/mips/crti.S Sun Jun 30 08:00:34 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: crti.S,v 1.1 2013/06/22 02:37:09 matt Exp $ */
+/* $NetBSD: crti.S,v 1.2 2013/06/30 08:00:34 matt Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <mips/asm.h>
-RCSID("$NetBSD: crti.S,v 1.1 2013/06/22 02:37:09 matt Exp $")
+RCSID("$NetBSD: crti.S,v 1.2 2013/06/30 08:00:34 matt Exp $")
#include "sysident.S"
@@ -39,16 +39,22 @@ RCSID("$NetBSD: crti.S,v 1.1 2013/06/22
NESTED_NOPROFILE(_init, CALLFRAME_SIZ, ra)
SETUP_GP
PTR_SUBU sp, sp, CALLFRAME_SIZ # allocate stack frame
- SAVE_GP(CALLFRAME_GP)
- SETUP_GP64(CALLFRAME_GP, _init)
REG_S ra, CALLFRAME_RA(sp) # save RA
+#ifdef __mips_o32
+ REG_S s0, CALLFRAME_S0(sp) # save s0
+ move s0, gp
+#endif
+ SETUP_GP64(CALLFRAME_GP, _init)
END(_init)
.section ".fini", "ax", @progbits
NESTED_NOPROFILE(_fini, CALLFRAME_SIZ, ra)
SETUP_GP
PTR_SUBU sp, sp, CALLFRAME_SIZ # allocate stack frame
- SAVE_GP(CALLFRAME_GP)
- SETUP_GP64(CALLFRAME_GP, _fini)
REG_S ra, CALLFRAME_RA(sp) # save RA
+#ifdef __mips_o32
+ REG_S s0, CALLFRAME_S0(sp) # save s0
+ move s0, gp
+#endif
+ SETUP_GP64(CALLFRAME_GP, _fini)
END(_fini)
Index: src/lib/csu/arch/mips/crtn.S
diff -u src/lib/csu/arch/mips/crtn.S:1.1 src/lib/csu/arch/mips/crtn.S:1.2
--- src/lib/csu/arch/mips/crtn.S:1.1 Sat Jun 22 02:37:09 2013
+++ src/lib/csu/arch/mips/crtn.S Sun Jun 30 08:00:34 2013
@@ -29,16 +29,24 @@
#include <mips/asm.h>
-RCSID("$NetBSD: crtn.S,v 1.1 2013/06/22 02:37:09 matt Exp $")
+RCSID("$NetBSD: crtn.S,v 1.2 2013/06/30 08:00:34 matt Exp $")
.section ".init", "ax", @progbits
- RESTORE_GP64
REG_L ra, CALLFRAME_RA(sp)
+#if defined(__mips_o32) || defined(__mips_o64)
+ REG_L s0, CALLFRAME_S0(sp)
+#else
+ REG_L gp, CALLFRAME_GP(sp)
+#endif
PTR_ADDU sp, sp, CALLFRAME_SIZ
jr ra
.section ".fini", "ax", @progbits
- RESTORE_GP64
REG_L ra, CALLFRAME_RA(sp)
+#ifdef __mips_o32
+ REG_L s0, CALLFRAME_S0(sp)
+#else
+ REG_L gp, CALLFRAME_GP(sp)
+#endif
PTR_ADDU sp, sp, CALLFRAME_SIZ
jr ra