summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/sparc64/cerror.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/sparc64/cerror.S')
-rw-r--r--newlib/libc/sys/sparc64/cerror.S29
1 files changed, 29 insertions, 0 deletions
diff --git a/newlib/libc/sys/sparc64/cerror.S b/newlib/libc/sys/sparc64/cerror.S
new file mode 100644
index 00000000000..c29563fefec
--- /dev/null
+++ b/newlib/libc/sys/sparc64/cerror.S
@@ -0,0 +1,29 @@
+! Set errno.
+! This function is called by all the syscall stubs.
+!
+! FIXME: We assume errno is the first member of struct _reent.
+! Not sure what to do about this.
+
+#include <sys/syscallasm.h>
+
+ DATA_SECTION
+ ALIGN (4)
+ GLOBAL (ASM_SYMBOL (errno)) ! FIXME: ASM_PRIVATE_SYMBOL ?
+ASM_SYMBOL (errno):
+ WORD (0)
+
+ TEXT_SECTION
+ ALIGN (4)
+
+ GLOBAL (ASM_PRIVATE_SYMBOL (cerror))
+ASM_PRIVATE_SYMBOL (cerror):
+ sethi %hi (ASM_SYMBOL (errno)),%g1
+ stw %o0,[%g1+%lo (ASM_SYMBOL (errno))]
+ jmpl %o7+8,%g0
+ mov -1,%o0
+
+ GLOBAL (ASM_PRIVATE_SYMBOL (cerror_r))
+ASM_PRIVATE_SYMBOL (cerror_r):
+ stw %o0,[%o1]
+ jmpl %o7+8,%g0
+ mov -1,%o0