diff options
Diffstat (limited to 'toolchain/uClibc/patches/mips.patch')
-rw-r--r-- | toolchain/uClibc/patches/mips.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches/mips.patch b/toolchain/uClibc/patches/mips.patch new file mode 100644 index 000000000..59bf5963c --- /dev/null +++ b/toolchain/uClibc/patches/mips.patch @@ -0,0 +1,66 @@ +diff -Nur uClibc-0.9.30.2.orig/libc/sysdeps/linux/mips/crt1.S uClibc-0.9.30.2/libc/sysdeps/linux/mips/crt1.S +--- uClibc-0.9.30.2.orig/libc/sysdeps/linux/mips/crt1.S 2010-01-13 22:22:31.000000000 +0100 ++++ uClibc-0.9.30.2/libc/sysdeps/linux/mips/crt1.S 2010-01-24 20:33:06.297867491 +0100 +@@ -85,29 +85,10 @@ + + __start: + #ifdef __PIC__ +-#if _MIPS_SIM == _MIPS_SIM_ABI32 +- .frame sp, 24, sp +- .set noreorder +- move $0, $31 /* Save old ra. */ +- bal 10f /* Find addr of cpload. */ +- nop +-10: +- .cpload $31 +- move $31, $0 +- .set reorder +- .cprestore 16 +-#else +- move $0, $31; /* Save old ra. */ +- .set noreorder +- bal 10f /* Find addr of .cpsetup. */ +- nop +-10: +- .set reorder +- .cpsetup $31, $25, 10b +- move $31, $0 +-#endif ++ SETUP_GPX($0) ++ SETUP_GPX64($25,$0) + #else +- la $28, _gp /* Setup GP correctly if we're non-PIC. */ ++ PTR_LA $28, _gp /* Setup GP correctly if we're non-PIC. */ + move $31, $0 + #endif + +@@ -118,18 +99,18 @@ + /* Allocate space on the stack for seven arguments and + * make sure the stack is aligned to double words (8 bytes) */ + ++ and $29, -2 * SZREG ++ + #if _MIPS_SIM == _MIPS_SIM_ABI32 +- and $29, -2 * 4 +- subu $29, 32 +- la $7, _init /* init */ +- la $8, _fini +- sw $8, 16($29) /* fini */ +- sw $2, 20($29) /* rtld_fini */ +- sw $29, 24($29) /* stack_end */ +-#else +- and $29, -2 * PTRSIZE ++ PTR_SUBIU $29, 32 ++#endif + PTR_LA $7, _init /* init */ +- PTR_LA $8, _fini /* fini */ ++ PTR_LA $8, _fini ++#if _MIPS_SIM == _MIPS_SIM_ABI32 ++ PTR_S $8, 16($29) /* fini */ ++ PTR_S $2, 20($29) /* rtld_fini */ ++ PTR_S $29, 24($29) /* stack_end */ ++#else + move $9, $2 /* rtld_fini */ + move $10, $29 /* stack_end */ + #endif +- |