aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Versions.def1
-rw-r--r--hurd/Makefile1
-rw-r--r--hurd/Versions4
-rw-r--r--hurd/errno.c28
-rw-r--r--sysdeps/mach/hurd/bits/errno.h52
-rw-r--r--sysdeps/mach/hurd/errnos.awk16
6 files changed, 88 insertions, 14 deletions
diff --git a/Versions.def b/Versions.def
index b806afc683..e5be6a86a2 100644
--- a/Versions.def
+++ b/Versions.def
@@ -14,6 +14,7 @@ libc {
GLIBC_2.2.3
GLIBC_2.2.4
GLIBC_2.2.5
+ GLIBC_2.2.6
%ifdef USE_IN_LIBIO
HURD_CTHREADS_0.3
%endif
diff --git a/hurd/Makefile b/hurd/Makefile
index dbe3ee33ef..9487c963cf 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -59,6 +59,7 @@ routines = hurdstartup hurdinit \
fopenport \
vpprintf \
ports-get ports-set hurdports hurdmsg \
+ errno \
$(sig) $(dtable) $(inlines) port-cleanup report-wait
sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \
trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \
diff --git a/hurd/Versions b/hurd/Versions
index 34333b03ce..83c8ab1826 100644
--- a/hurd/Versions
+++ b/hurd/Versions
@@ -152,6 +152,10 @@ libc {
_hurdsig_interrupt_timeout;
_hurdsig_fault_preemptor; _hurdsig_fault_env;
}
+ GLIBC_2.2.6 {
+ # functions used in macros & inline functions
+ __errno_location;
+ }
%if !SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
HURD_CTHREADS_0.3 {
diff --git a/hurd/errno.c b/hurd/errno.c
new file mode 100644
index 0000000000..85e4e7d47b
--- /dev/null
+++ b/hurd/errno.c
@@ -0,0 +1,28 @@
+/* __errno_location -- helper function for locating per-thread errno value
+ Copyright (C) 2002 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
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <hurd/threadvar.h>
+
+int *
+__errno_location (void)
+{
+ return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO);
+}
+strong_alias (__errno_location, __hurd_errno_location)
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
index a553d11564..38efb96b0b 100644
--- a/sysdeps/mach/hurd/bits/errno.h
+++ b/sysdeps/mach/hurd/bits/errno.h
@@ -212,14 +212,14 @@ enum __error_t_codes
#define EPROTO _HURD_ERRNO (116)/* Protocol error */
ETIME = _HURD_ERRNO (117),
#define ETIME _HURD_ERRNO (117)/* Timer expired */
+ ECANCELED = _HURD_ERRNO (118),
+#define ECANCELED _HURD_ERRNO (118)/* Operation canceled */
/* Errors from <mach/message.h>. */
EMACH_SEND_IN_PROGRESS = 0x10000001,
EMACH_SEND_INVALID_DATA = 0x10000002,
EMACH_SEND_INVALID_DEST = 0x10000003,
EMACH_SEND_TIMED_OUT = 0x10000004,
- EMACH_SEND_WILL_NOTIFY = 0x10000005,
- EMACH_SEND_NOTIFY_IN_PROGRESS = 0x10000006,
EMACH_SEND_INTERRUPTED = 0x10000007,
EMACH_SEND_MSG_TOO_SMALL = 0x10000008,
EMACH_SEND_INVALID_REPLY = 0x10000009,
@@ -227,9 +227,13 @@ enum __error_t_codes
EMACH_SEND_INVALID_NOTIFY = 0x1000000b,
EMACH_SEND_INVALID_MEMORY = 0x1000000c,
EMACH_SEND_NO_BUFFER = 0x1000000d,
- EMACH_SEND_NO_NOTIFY = 0x1000000e,
EMACH_SEND_INVALID_TYPE = 0x1000000f,
EMACH_SEND_INVALID_HEADER = 0x10000010,
+ EMACH_SEND_INVALID_TRAILER = 0x10000011,
+ EMACH_SEND_TRANSPORT_ERROR = 0x10000012,
+ EMACH_SEND_PORT_MIGRATED = 0x10000013,
+ EMACH_SEND_RESEND_FAILED = 0x10000014,
+ EMACH_SEND_INVALID_RT_OOL_SIZE = 0x10000015,
EMACH_RCV_IN_PROGRESS = 0x10004001,
EMACH_RCV_INVALID_NAME = 0x10004002,
EMACH_RCV_TIMED_OUT = 0x10004003,
@@ -242,6 +246,11 @@ enum __error_t_codes
EMACH_RCV_IN_SET = 0x1000400a,
EMACH_RCV_HEADER_ERROR = 0x1000400b,
EMACH_RCV_BODY_ERROR = 0x1000400c,
+ EMACH_RCV_INVALID_TYPE = 0x1000400d,
+ EMACH_RCV_SCATTER_SMALL = 0x1000400e,
+ EMACH_RCV_INVALID_TRAILER = 0x1000400f,
+ EMACH_RCV_TRANSPORT_ERROR = 0x10004010,
+ EMACH_RCV_IN_PROGRESS_TIMED = 0x10004011,
/* Errors from <mach/kern_return.h>. */
EKERN_INVALID_ADDRESS = 1,
@@ -266,8 +275,33 @@ enum __error_t_codes
EKERN_RIGHT_EXISTS = 21,
EKERN_INVALID_HOST = 22,
EKERN_MEMORY_PRESENT = 23,
- EKERN_WRITE_PROTECTION_FAILURE = 24,
- EKERN_TERMINATED = 26,
+ EKERN_MEMORY_DATA_MOVED = 24,
+ EKERN_MEMORY_RESTART_COPY = 25,
+ EKERN_INVALID_PROCESSOR_SET = 26,
+ EKERN_POLICY_LIMIT = 27,
+ EKERN_INVALID_POLICY = 28,
+ EKERN_INVALID_OBJECT = 29,
+ EKERN_ALREADY_WAITING = 30,
+ EKERN_DEFAULT_SET = 31,
+ EKERN_EXCEPTION_PROTECTED = 32,
+ EKERN_INVALID_LEDGER = 33,
+ EKERN_INVALID_MEMORY_CONTROL = 34,
+ EKERN_INVALID_SECURITY = 35,
+ EKERN_NOT_DEPRESSED = 36,
+ EKERN_TERMINATED = 37,
+ EKERN_LOCK_SET_DESTROYED = 38,
+ EKERN_LOCK_UNSTABLE = 39,
+ EKERN_LOCK_OWNED = 40,
+ EKERN_LOCK_OWNED_SELF = 41,
+ EKERN_SEMAPHORE_DESTROYED = 42,
+ EKERN_RPC_SERVER_TERMINATED = 43,
+ EKERN_RPC_TERMINATE_ORPHAN = 44,
+ EKERN_RPC_CONTINUE_ORPHAN = 45,
+ EKERN_NO_THREAD = 46,
+ EKERN_NODE_DOWN = 47,
+ EKERN_NOT_WAITING = 48,
+ EKERN_OPERATION_TIMED_OUT = 49,
+ EKERN_RETURN_MAX = 0x100,
/* Errors from <mach/mig_errors.h>. */
EMIG_TYPE_ERROR = -300 /* client type check failure */,
@@ -275,11 +309,11 @@ enum __error_t_codes
EMIG_REMOTE_ERROR = -302 /* server detected error */,
EMIG_BAD_ID = -303 /* bad request message ID */,
EMIG_BAD_ARGUMENTS = -304 /* server type check failure */,
- EMIG_NO_REPLY = -305 /* no reply should be sent */,
+ EMIG_NO_REPLY = -305 /* no reply should be send */,
EMIG_EXCEPTION = -306 /* server raised exception */,
EMIG_ARRAY_TOO_LARGE = -307 /* array not large enough */,
EMIG_SERVER_DIED = -308 /* server died */,
- EMIG_DESTROY_REQUEST = -309 /* destroy request with no reply */,
+ EMIG_TRAILER_ERROR = -309 /* trailer has an unknown format */,
/* Errors from <device/device_types.h>. */
ED_IO_ERROR = 2500 /* hardware IO error */,
@@ -291,7 +325,9 @@ enum __error_t_codes
ED_INVALID_RECNUM = 2506 /* invalid record (block) number */,
ED_INVALID_SIZE = 2507 /* invalid IO size */,
ED_NO_MEMORY = 2508 /* memory allocation failure */,
- ED_READ_ONLY = 2509 /* device cannot be written to */
+ ED_READ_ONLY = 2509 /* device cannot be written to */,
+ ED_OUT_OF_BAND = 2510 /* out-of-band condition on device */,
+ ED_NOT_CLONED = 2511 /* device cannot be cloned */
};
diff --git a/sysdeps/mach/hurd/errnos.awk b/sysdeps/mach/hurd/errnos.awk
index cd356e7fb9..b3ac216017 100644
--- a/sysdeps/mach/hurd/errnos.awk
+++ b/sysdeps/mach/hurd/errnos.awk
@@ -1,4 +1,5 @@
-# Copyright (C) 1991,92,93,94,95,96,97,2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1991,92,93,94,95,96,97,2000,01,02
+# 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
@@ -153,11 +154,14 @@ END \
print "#define __error_t_defined\t1"
print "#endif";
print "";
- print "/* errno is a per-thread variable. */";
- print "#include <hurd/threadvar.h>";
- print "#define errno (*__hurd_errno_location ())";
- print "#define __set_errno(val) errno = (val)";
- print "";
+ print "\
+/* Return the current thread's location for `errno'.\n\
+ The syntax of this function allows redeclarations like `int errno'. */\n\
+extern int *__errno_location (void) __THROW __attribute__ ((__const__));\n\
+\n\
+#define errno (*__errno_location ())\n\
+#define __set_errno(val) (errno = (val))\n\
+";
print "#endif /* <errno.h> included. */";
print "";
print "#if !defined (_ERRNO_H) && defined (__need_Emath)";