svn commit: r205202 - user/jmallett/octeon/lib/libc/mips/sys
Juli Mallett
jmallett at FreeBSD.org
Tue Mar 16 01:52:04 UTC 2010
Author: jmallett
Date: Tue Mar 16 01:52:03 2010
New Revision: 205202
URL: http://svn.freebsd.org/changeset/base/205202
Log:
Properly save and restore the GP on the stack in __cerror, rather than using
PIC_PROLOGUE which simply saves and restores it to a temporary register, as is
sufficient for syscalls but not for function calls.
Submitted by: C. Jayachandran (original version)
Modified:
user/jmallett/octeon/lib/libc/mips/sys/cerror.S
Modified: user/jmallett/octeon/lib/libc/mips/sys/cerror.S
==============================================================================
--- user/jmallett/octeon/lib/libc/mips/sys/cerror.S Tue Mar 16 01:48:40 2010 (r205201)
+++ user/jmallett/octeon/lib/libc/mips/sys/cerror.S Tue Mar 16 01:52:03 2010 (r205202)
@@ -47,21 +47,26 @@ __FBSDID("$FreeBSD$");
.globl _C_LABEL(__error)
NESTED_NOPROFILE(__cerror, CALLFRAME_SIZ, ra)
.mask 0x80000000, (CALLFRAME_RA - CALLFRAME_SIZ)
- PIC_PROLOGUE(__cerror)
+ SETUP_GP
PTR_SUBU sp, sp, CALLFRAME_SIZ
- PTR_S ra, CALLFRAME_RA(sp)
- INT_S v0, CALLFRAME_S0(sp) # save errno value
-
+ SETUP_GP64(CALLFRAME_GP, __cerror)
SAVE_GP(CALLFRAME_GP)
+ PTR_S ra, CALLFRAME_RA(sp)
+ REG_S v0, CALLFRAME_S0(sp) # save errno value
+
PTR_LA t9, _C_LABEL(__error) # locate address of errno
jalr t9
- INT_L t0, CALLFRAME_S0(sp)
+ REG_L t0, CALLFRAME_S0(sp)
PTR_L ra, CALLFRAME_RA(sp)
INT_S t0, 0(v0) # update errno value
+
+ RESTORE_GP64
PTR_ADDU sp, sp, CALLFRAME_SIZ
+
li v0, -1
li v1, -1
- PIC_RETURN()
+
+ j ra
END(__cerror)
More information about the svn-src-user
mailing list