Fixed dynamic linking on x86
[akaros.git] / tools / compilers / gcc-glibc / glibc-2.14.1-riscv.patch
index e991f9a..7c64f4e 100644 (file)
@@ -17,8 +17,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/a
 +#define ABORT_INSTRUCTION asm ("unimp")
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/bits/atomic.h glibc-2.14.1/sysdeps/riscv/bits/atomic.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/bits/atomic.h   1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/bits/atomic.h   2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,178 @@
++++ glibc-2.14.1/sysdeps/riscv/bits/atomic.h   2011-11-01 23:44:42.000000000 -0700
+@@ -0,0 +1,177 @@
 +/* Low-level functions for atomic operations. Mips version.
 +   Copyright (C) 2005 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -67,8 +67,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +  (".gnu.linkonce.b.__riscv_atomic_lock, \"aw\", %nobits");
 +
 +volatile int __riscv_atomic_lock
-+  __attribute__ ((nocommon, section (".gnu.linkonce.b.__riscv_atomic_lock"
-+                                   __sec_comment),
++  __attribute__ ((nocommon, section(".gnu.linkonce.b.__riscv_atomic_lock\n\t#"),
 +                visibility ("hidden")));
 +
 +#define __riscv_atomic_do_lock(addr) ({ \
@@ -403,8 +402,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +#endif /* bits/ipctypes.h */
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/bits/link.h glibc-2.14.1/sysdeps/riscv/bits/link.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/bits/link.h     1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/bits/link.h     2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,118 @@
++++ glibc-2.14.1/sysdeps/riscv/bits/link.h     2011-11-03 19:06:26.000000000 -0700
+@@ -0,0 +1,76 @@
 +/* Copyright (C) 2005, 2009 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
 +
@@ -427,68 +426,26 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +# error "Never include <bits/link.h> directly; use <link.h> instead."
 +#endif
 +
-+#include <sgidefs.h>
-+
-+#if _RISCV_SIM == _ABIO32
-+
-+/* Registers for entry into PLT on MIPS.  */
-+typedef struct La_mips_32_regs
-+{
-+  uint32_t lr_reg[4]; /* $a0 through $a3 */
-+  double lr_fpreg[2]; /* $f12 and $f14 */
-+  uint32_t lr_ra;
-+  uint32_t lr_sp;
-+} La_mips_32_regs;
-+
-+/* Return values for calls from PLT on MIPS.  */
-+typedef struct La_mips_32_retval
-+{
-+  uint32_t lrv_v0;
-+  uint32_t lrv_v1;
-+  double lrv_f0;
-+  double lrv_f2;
-+} La_mips_32_retval;
-+
-+#else
-+
 +typedef struct La_mips_64_regs
 +{
-+  uint64_t lr_reg[8]; /* $a0 through $a7 */
-+  double lr_fpreg[8]; /* $f12 throgh $f19 */
-+  uint64_t lr_ra;
-+  uint64_t lr_sp;
++  unsigned long lr_reg[8]; /* $a0 through $a7 */
++  double lr_fpreg[8]; /* $f4 throgh $f11 */
++  unsigned long lr_ra;
++  unsigned long lr_sp;
 +} La_mips_64_regs;
 +
 +/* Return values for calls from PLT on MIPS.  */
 +typedef struct La_mips_64_retval
 +{
-+  uint64_t lrv_v0;
-+  uint64_t lrv_v1;
-+  double lrv_f0;
-+  double lrv_f2;
++  unsigned long lrv_v0;
++  unsigned long lrv_v1;
++  double lrv_fv0;
++  double lrv_fv1;
 +} La_mips_64_retval;
 +
-+#endif
-+
 +__BEGIN_DECLS
 +
-+#if _RISCV_SIM == _ABIO32
-+
-+extern Elf32_Addr la_mips_o32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
-+                                          uintptr_t *__refcook,
-+                                          uintptr_t *__defcook,
-+                                          La_mips_32_regs *__regs,
-+                                          unsigned int *__flags,
-+                                          const char *__symname,
-+                                          long int *__framesizep);
-+extern unsigned int la_mips_o32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
-+                                           uintptr_t *__refcook,
-+                                           uintptr_t *__defcook,
-+                                           const La_mips_32_regs *__inregs,
-+                                           La_mips_32_retval *__outregs,
-+                                           const char *__symname);
-+
-+#elif _RISCV_SIM == _ABIN32
++#if _RISCV_SIM == _ABI32
 +
 +extern Elf32_Addr la_mips_n32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
 +                                          uintptr_t *__refcook,
@@ -533,7 +490,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +  };
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/bits/mathdef.h glibc-2.14.1/sysdeps/riscv/bits/mathdef.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/bits/mathdef.h  1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/bits/mathdef.h  2011-10-25 02:48:44.000000000 -0700
++++ glibc-2.14.1/sysdeps/riscv/bits/mathdef.h  2011-11-03 18:57:51.000000000 -0700
 @@ -0,0 +1,45 @@
 +/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2007
 +      Free Software Foundation, Inc.
@@ -575,7 +532,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +
 +#endif        /* ISO C99 */
 +
-+#if ! defined __NO_LONG_DOUBLE_MATH && _RISCV_SIM == _ABIO32
++#if ! defined __NO_LONG_DOUBLE_MATH && _RISCV_SIM == _ABI32
 +/* Signal that we do not really have a `long double'.  This disables the
 +   declaration of all the `long double' function variants.  */
 +# define __NO_LONG_DOUBLE_MATH        1
@@ -642,7 +599,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +#endif        /* GCC.  */
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/bits/setjmp.h glibc-2.14.1/sysdeps/riscv/bits/setjmp.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/bits/setjmp.h   1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/bits/setjmp.h   2011-10-25 02:48:44.000000000 -0700
++++ glibc-2.14.1/sysdeps/riscv/bits/setjmp.h   2011-11-02 01:20:35.000000000 -0700
 @@ -0,0 +1,47 @@
 +/* Define the machine-dependent type `jmp_buf'.  RISC-V version.
 +   Copyright (C) 1992,1993,1995,1997,2000,2002,2003,2004,2005,2006
@@ -687,7 +644,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/b
 +    /* Callee-saved floating point registers.
 +       Note that there are an even number of preceding words in this struct,
 +       so no padding will be inserted before __fpregs, even for RV32. */
-+    double __fpregs[8];
++    double __fpregs[10];
 +  } __jmp_buf[1];
 +
 +#endif /* _RISCV_BITS_SETJMP_H */
@@ -1792,8 +1749,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/d
 +}
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/dl-machine.h glibc-2.14.1/sysdeps/riscv/dl-machine.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/dl-machine.h    1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/dl-machine.h    2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,746 @@
++++ glibc-2.14.1/sysdeps/riscv/dl-machine.h    2011-11-03 19:07:06.000000000 -0700
+@@ -0,0 +1,740 @@
 +/* Machine-dependent ELF dynamic relocation inline functions.  MIPS version.
 +   Copyright (C) 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007
 +   Free Software Foundation, Inc.
@@ -1827,7 +1784,6 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/d
 +#error ENTRY_POINT needs to be defined for MIPS.
 +#endif
 +
-+#include <sgidefs.h>
 +#include <sys/asm.h>
 +#include <dl-tls.h>
 +
@@ -2000,19 +1956,14 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/d
 +      # Subtract OFFSET_GP_GOT\n\
 +      " STRINGXP(REG_S) " a0, -" STRINGXP(OFFSET_GP_GOT) "(gp)\n\
 +      move a0, sp\n\
-+      addi sp, sp, -16\n\
-+      \n\
 +      rdnpc t0\n\
 +.Lcoff: \n\
-+      " STRINGXV(PIC_LA(a4, gp, .Lcoff)) "\n\
-+      sub a4, t0, a4\n\
-+      \n\
++      " STRINGXV(PIC_LA(t1, gp, .Lcoff)) "\n\
 +      " STRINGXV(PIC_LA(t7, gp, _dl_start)) "\n\
-+      add t7, t7, t0\n\
++      sub  t0, t0, t1\n\
++      add  t7, t7, t0\n\
 +      jalr t7\n\
-+      \n\
-+      addi sp, sp, 16\n\
-+      j _dl_start_user\n\
++      # Fall through to _dl_start_user \
 +      " _RTLD_EPILOGUE(ENTRY_POINT) "\
 +      \n\
 +      \n\
@@ -5555,8 +5506,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/l
 +#endif
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/__longjmp.S glibc-2.14.1/sysdeps/riscv/__longjmp.S
 --- ../glibc-2.14.1-orig/sysdeps/riscv/__longjmp.S     1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/__longjmp.S     2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,57 @@
++++ glibc-2.14.1/sysdeps/riscv/__longjmp.S     2011-11-02 01:24:15.000000000 -0700
+@@ -0,0 +1,59 @@
 +/* Copyright (C) 1996, 1997, 2000, 2002, 2003, 2004
 +      Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -5597,20 +5548,22 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/_
 +#ifdef __riscv_hard_float
 +      REG_L t0, 13*SZREG(a0)
 +
-+      fld  fs0, 14*SZREG(a0)
-+      fld  fs1, 15*SZREG(a0)
-+      fld  fs2, 16*SZREG(a0)
-+      fld  fs3, 17*SZREG(a0)
-+      fld  fs4, 18*SZREG(a0)
-+      fld  fs5, 19*SZREG(a0)
-+      fld  fs6, 20*SZREG(a0)
-+      fld  fs7, 21*SZREG(a0)
++      fld  fs0, 8*0 + 14*SZREG(a0)
++      fld  fs1, 8*1 + 14*SZREG(a0)
++      fld  fs2, 8*2 + 14*SZREG(a0)
++      fld  fs3, 8*3 + 14*SZREG(a0)
++      fld  fs4, 8*4 + 14*SZREG(a0)
++      fld  fs5, 8*5 + 14*SZREG(a0)
++      fld  fs6, 8*6 + 14*SZREG(a0)
++      fld  fs7, 8*7 + 14*SZREG(a0)
++      fld  fs8, 8*8 + 14*SZREG(a0)
++      fld  fs9, 8*9 + 14*SZREG(a0)
 +
 +      mtfsr t0
 +#endif
 +
-+      sltu t0, a1, 1  # t0 = (a1 == 0)
-+      add  v0, t0, a1 # v0 = (a1 == 0 ? 1 : a1)
++      sltu t0, a1, 1    # t0 = (a1 == 0)
++      add  v0, t0, a1   # v0 = (a1 == 0 ? 1 : a1)
 +      ret
 +
 +END(__longjmp)
@@ -7574,8 +7527,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/r
 +}
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/setjmp.S glibc-2.14.1/sysdeps/riscv/setjmp.S
 --- ../glibc-2.14.1-orig/sysdeps/riscv/setjmp.S        1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/setjmp.S        2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,73 @@
++++ glibc-2.14.1/sysdeps/riscv/setjmp.S        2011-11-02 01:21:55.000000000 -0700
+@@ -0,0 +1,75 @@
 +/* Copyright (C) 1996, 1997, 2000, 2002, 2003, 2004
 +      Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -7632,6 +7585,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/s
 +  fsd  fs5, 8*5 + 14*SZREG(a0)
 +  fsd  fs6, 8*6 + 14*SZREG(a0)
 +  fsd  fs7, 8*7 + 14*SZREG(a0)
++  fsd  fs8, 8*8 + 14*SZREG(a0)
++  fsd  fs9, 8*9 + 14*SZREG(a0)
 +
 +  REG_S t0, 13*SZREG(a0)
 +#endif
@@ -8020,8 +7975,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/s
 +#endif /* sys/asm.h */
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/sys/ucontext.h glibc-2.14.1/sysdeps/riscv/sys/ucontext.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/sys/ucontext.h  1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/sys/ucontext.h  2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,159 @@
++++ glibc-2.14.1/sysdeps/riscv/sys/ucontext.h  2011-11-03 19:08:52.000000000 -0700
+@@ -0,0 +1,144 @@
 +/* Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
 +
@@ -8046,15 +8001,10 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/s
 +#define _SYS_UCONTEXT_H       1
 +
 +#include <features.h>
-+#include <sgidefs.h>
 +#include <signal.h>
 +
 +/* Type for general register.  */
-+#if _RISCV_SIM == _ABIO32
-+typedef __uint32_t greg_t;
-+#else
-+typedef __uint64_t greg_t;
-+#endif
++typedef unsigned long greg_t;
 +
 +/* Number of general registers.  */
 +#define NGREG 36
@@ -8144,15 +8094,9 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/s
 +{
 +  union
 +  {
-+#if _RISCV_SIM == _ABIO32
-+    double fp_dregs[16];
-+    float fp_fregs[32];
-+    unsigned int fp_regs[32];
-+#else
 +    double fp_dregs[32];
 +    /* float fp_fregs[32]; */
 +    __uint64_t fp_regs[32];
-+#endif
 +  } fp_r;
 +  unsigned int fp_csr;
 +  unsigned int fp_pad;
@@ -8168,11 +8112,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/s
 +/* Userlevel context.  */
 +typedef struct ucontext
 +{
-+#if _RISCV_SIM == _ABIO32
 +  unsigned long int uc_flags;
-+#else
-+  __uint64_t uc_flags;
-+#endif
 +  struct ucontext *uc_link;
 +  __sigset_t uc_sigmask;
 +  stack_t uc_stack;
@@ -8253,8 +8193,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/t
 +     __result; })
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/tst-audit.h glibc-2.14.1/sysdeps/riscv/tst-audit.h
 --- ../glibc-2.14.1-orig/sysdeps/riscv/tst-audit.h     1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/riscv/tst-audit.h     2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,40 @@
++++ glibc-2.14.1/sysdeps/riscv/tst-audit.h     2011-11-03 19:05:17.000000000 -0700
+@@ -0,0 +1,33 @@
 +/* Definitions for testing PLT entry/exit auditing.  ARM version.
 +
 +   Copyright (C) 2005 Free Software Foundation, Inc.
@@ -8278,13 +8218,7 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/t
 +
 +#include <sgidefs.h>
 +
-+#if _RISCV_SIM == _ABIO32
-+#define pltenter la_mips_o32_gnu_pltenter
-+#define pltexit la_mips_o32_gnu_pltexit
-+#define La_regs La_mips_32_regs
-+#define La_retval La_mips_32_retval
-+#else
-+#if _RISCV_SIM == _ABIN32
++#if _RISCV_SIM == _ABI32
 +#define pltenter la_mips_n32_gnu_pltenter
 +#define pltexit la_mips_n32_gnu_pltexit
 +#else
@@ -8293,7 +8227,6 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/riscv/t
 +#endif
 +#define La_regs La_mips_64_regs
 +#define La_retval La_mips_64_retval
-+#endif
 +#define int_retval lrv_v0
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/riscv/pipe.S glibc-2.14.1/sysdeps/unix/riscv/pipe.S
 --- ../glibc-2.14.1-orig/sysdeps/unix/riscv/pipe.S     1969-12-31 16:00:00.000000000 -0800
@@ -11348,15 +11281,6 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +}
 +
 +#endif
-diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/entry.h glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/entry.h
---- ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/entry.h 1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/entry.h 2011-10-25 02:48:44.000000000 -0700
-@@ -0,0 +1,5 @@
-+#ifndef __ASSEMBLY__
-+extern void __start (void);
-+#endif
-+
-+#define ENTRY_POINT __start
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/fcntl.c glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/fcntl.c
 --- ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/fcntl.c 1969-12-31 16:00:00.000000000 -0800
 +++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/fcntl.c 2011-10-25 02:48:44.000000000 -0700
@@ -11444,8 +11368,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +#endif
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/getcontext.S glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/getcontext.S
 --- ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/getcontext.S    1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/getcontext.S    2011-10-27 22:24:14.000000000 -0700
-@@ -0,0 +1,81 @@
++++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/getcontext.S    2011-11-02 01:26:28.000000000 -0700
+@@ -0,0 +1,83 @@
 +/* Save current context.
 +   Copyright (C) 2009 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -11497,14 +11421,16 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +#ifdef __riscv_hard_float
 +  mffsr v1
 +
-+      fsd     fs0, (24 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs1, (25 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs2, (26 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs3, (27 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs4, (28 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs5, (29 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs6, (30 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs7, (31 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs0, (20 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs1, (21 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs2, (22 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs3, (23 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs4, (24 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs5, (25 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs6, (26 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs7, (27 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs8, (28 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs9, (29 * 8 + MCONTEXT_FPREGS)(a0)
 +
 +      sw      v1, MCONTEXT_FSR(a0)
 +#endif /* __mips_hard_float */
@@ -14230,8 +14156,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +weak_alias (__umount, umount);
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/setcontext.S glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/setcontext.S
 --- ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/setcontext.S    1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/setcontext.S    2011-10-27 22:24:24.000000000 -0700
-@@ -0,0 +1,129 @@
++++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/setcontext.S    2011-11-02 01:26:08.000000000 -0700
+@@ -0,0 +1,131 @@
 +/* Set current context.
 +   Copyright (C) 2009 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -14286,14 +14212,16 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +#ifdef __riscv_hard_float
 +      lw      v1, MCONTEXT_FSR(v0)
 +
-+      fld     fs0, (24 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs1, (25 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs2, (26 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs3, (27 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs4, (28 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs5, (29 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs6, (30 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs7, (31 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs0, (20 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs1, (21 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs2, (22 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs3, (23 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs4, (24 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs5, (25 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs6, (26 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs7, (27 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs8, (28 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs9, (29 * 8 + MCONTEXT_FPREGS)(v0)
 +
 +      mtfsr   v1
 +#endif /* __mips_hard_float */
@@ -14744,8 +14672,8 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +PSEUDO_END (__start_context)
 diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/swapcontext.S glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/swapcontext.S
 --- ../glibc-2.14.1-orig/sysdeps/unix/sysv/linux/riscv/swapcontext.S   1969-12-31 16:00:00.000000000 -0800
-+++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/swapcontext.S   2011-10-27 22:24:08.000000000 -0700
-@@ -0,0 +1,127 @@
++++ glibc-2.14.1/sysdeps/unix/sysv/linux/riscv/swapcontext.S   2011-11-02 01:25:30.000000000 -0700
+@@ -0,0 +1,131 @@
 +/* Save and set current context.
 +   Copyright (C) 2009 Free Software Foundation, Inc.
 +   This file is part of the GNU C Library.
@@ -14796,14 +14724,16 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +#ifdef __riscv_hard_float
 +  mffsr v1
 +
-+      fsd     fs0, (24 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs1, (25 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs2, (26 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs3, (27 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs4, (28 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs5, (29 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs6, (30 * 8 + MCONTEXT_FPREGS)(a0)
-+      fsd     fs7, (31 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs0, (20 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs1, (21 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs2, (22 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs3, (23 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs4, (24 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs5, (25 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs6, (26 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs7, (27 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs8, (28 * 8 + MCONTEXT_FPREGS)(a0)
++      fsd     fs9, (29 * 8 + MCONTEXT_FPREGS)(a0)
 +
 +      sw      v1, MCONTEXT_FSR(a0)
 +#endif /* __mips_hard_float */
@@ -14827,14 +14757,16 @@ diff -x manual -x po -x autom4te.cache -ruN ../glibc-2.14.1-orig/sysdeps/unix/sy
 +#ifdef __riscv_hard_float
 +      lw      v1, MCONTEXT_FSR(v0)
 +
-+      fld     fs0, (24 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs1, (25 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs2, (26 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs3, (27 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs4, (28 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs5, (29 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs6, (30 * 8 + MCONTEXT_FPREGS)(v0)
-+      fld     fs7, (31 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs0, (20 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs1, (21 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs2, (22 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs3, (23 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs4, (24 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs5, (25 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs6, (26 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs7, (27 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs8, (28 * 8 + MCONTEXT_FPREGS)(v0)
++      fld     fs9, (29 * 8 + MCONTEXT_FPREGS)(v0)
 +
 +      mtfsr   v1
 +#endif /* __mips_hard_float */