summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/sparc64/cerror.S
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-15 09:38:53 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-15 09:39:34 -0500
commitf95a4a932476be2ba99e2fd081e8d2bc6ea12813 (patch)
tree75f67192cb2d7b7b575c94edda318e475239b63c /newlib/libc/sys/sparc64/cerror.S
parentf60aca96985e68c7d8a52eb7bc955fb80e132f73 (diff)
Import newlib and create makefile
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 0000000..c29563f
--- /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