summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@codesourcery.com>2009-09-25 18:48:39 -0400
committerAustin Foxley <austinf@cetoncorp.com>2009-10-17 13:15:37 -0700
commite8053b24253b218865eb631130c3fee073949653 (patch)
treee7d3ed474c3fe55b91de9d45c734a72e8a62a61a /libc
parent011e2470700cb5eb65c226bdb0640993fd3e7c6d (diff)
downloaduClibc-alpine-e8053b24253b218865eb631130c3fee073949653.tar.bz2
uClibc-alpine-e8053b24253b218865eb631130c3fee073949653.tar.xz
mips: do not save variables in "hi" or "lo" across system calls
The kernel does not save these registers across system calls. GCC 4.4 has gotten more aggressive about using them for temporary variables, so this shows up as intermittent crashes if you use a recent compiler. Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Diffstat (limited to 'libc')
-rw-r--r--libc/sysdeps/linux/mips/bits/syscalls.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/libc/sysdeps/linux/mips/bits/syscalls.h b/libc/sysdeps/linux/mips/bits/syscalls.h
index 363991368..28b0f91e9 100644
--- a/libc/sysdeps/linux/mips/bits/syscalls.h
+++ b/libc/sysdeps/linux/mips/bits/syscalls.h
@@ -261,7 +261,7 @@
})
#define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
- "$14", "$15", "$24", "$25", "memory"
+ "$14", "$15", "$24", "$25", "hi", "lo", "memory"
#else /* N32 || N64 */
@@ -318,7 +318,7 @@
})
#define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \
- "$14", "$15", "$24", "$25", "memory"
+ "$14", "$15", "$24", "$25", "hi", "lo", "memory"
#endif