-/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Cambridge, MA 02139, USA. */
#include <sysdep.h>
+#define _ERRNO_H
#include <errnos.h>
.globl C_SYMBOL_NAME(errno)
#else
syscall_error:
#endif
-#ifdef EWOULDBLOCK_sys
+#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
/* We translate the system's EWOULDBLOCK error into EAGAIN.
The GNU C library always defines EWOULDBLOCK==EAGAIN.
EWOULDBLOCK_sys is the original number. */
- cmpl %eax, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */
- jne 0f /* Branch if not. */
- move $EAGAIN, %eax /* Yes; translate it to EAGAIN. */
+ cmpl $EWOULDBLOCK_sys, %eax /* Is it the old EWOULDBLOCK? */
+ jne notb /* Branch if not. */
+ movl $EAGAIN, %eax /* Yes; translate it to EAGAIN. */
+#endif
+notb:
+#ifndef PIC
+ movl %eax, C_SYMBOL_NAME(errno)
+#else
+ /* Standard PIC nonsense to store into `errno' through the GOT. */
+ call here
+here: popl %ecx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-here], %ecx
+ movl C_SYMBOL_NAME(errno@GOT)(%ecx), %ecx
+ movl %eax, (%ecx)
#endif
-0: movl %eax, C_SYMBOL_NAME(errno)
movl $-1, %eax
ret