mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 04:50:07 +00:00
hurd: take __USE_EXTERN_INLINES into account and restrict inlines
* hurd/hurd.h (__hurd_fail): Always declare function, and provide inline version only if __USE_EXTERN_INLINES is defined. * hurd/hurd/fd.h (_hurd_fd_error_signal, _hurd_fd_error, __hurd_dfail, __hurd_sockfail): Likewise. (_hurd_fd_get): Always declare functions, and provide inline versions only if __USE_EXTERN_INLINES and _LIBC are defined and IS_IN(libc). * hurd/hurd/port.h (_hurd_port_init, _hurd_port_locked_get, _hurd_port_get, _hurd_port_free, _hurd_port_locked_set, _hurd_port_set): Always declare functions, and provide inline versions only if __USE_EXTERN_INLINES and _LIBC are defined and IS_IN(libc). * hurd/hurd/signal.h (_hurd_self_sigstate, _hurd_critical_section_lock, _hurd_critical_section_unlock): Likewise. * hurd/hurd/threadvar.h (__hurd_threadvar_location_from_sp, * __hurd_threadvar_location): Likewise. * hurd/hurd/userlink.h (_hurd_userlink_link, _hurd_userlink_unlink, _hurd_userlink_clear): Likewise. * mach/lock-intern.h (__spin_lock_init, __spin_lock, __mutex_lock, __mutex_unlock, __mutex_trylock): Always declare functions, and provide inline versions only if __USE_EXTERN_INLINES and _LIBC are defined. * mach/mach/mig_support.h (__mig_strncpy): Likewise. * sysdeps/generic/machine-lock.h (__spin_unlock, __spin_try_lock, __spin_lock_locked): Likewise. * sysdeps/mach/i386/machine-lock.h (__spin_unlock, __spin_try_lock, __spin_lock_locked): Likewise. * mach/spin-lock.c (__USE_EXTERN_INLINES): Define to 1. * hurd/Versions (libc: GLIBC_2.27): Add _hurd_fd_error_signal, _hurd_fd_error, __hurd_dfail, __hurd_sockfail, _hurd_port_locked_set, __hurd_threadvar_location_from_sp, __hurd_threadvar_location, _hurd_userlink_link, _hurd_userlink_unlink, _hurd_userlink_clear.
This commit is contained in:
parent
3fc1ecf935
commit
28f6186f3e
30
ChangeLog
30
ChangeLog
@ -60,6 +60,36 @@
|
|||||||
_POSIX_CHOWN_RESTRICTED is defined to 0.
|
_POSIX_CHOWN_RESTRICTED is defined to 0.
|
||||||
* io/tst-copy_file_range.c [!defined CLONE_NEWNS]: Do not include
|
* io/tst-copy_file_range.c [!defined CLONE_NEWNS]: Do not include
|
||||||
<sys/mount.h>.
|
<sys/mount.h>.
|
||||||
|
* hurd/hurd.h (__hurd_fail): Always declare function, and provide inline
|
||||||
|
version only if __USE_EXTERN_INLINES is defined.
|
||||||
|
* hurd/hurd/fd.h (_hurd_fd_error_signal, _hurd_fd_error, __hurd_dfail,
|
||||||
|
__hurd_sockfail): Likewise.
|
||||||
|
(_hurd_fd_get): Always declare functions, and provide inline versions
|
||||||
|
only if __USE_EXTERN_INLINES and _LIBC are defined and IS_IN(libc).
|
||||||
|
* hurd/hurd/port.h (_hurd_port_init, _hurd_port_locked_get,
|
||||||
|
_hurd_port_get, _hurd_port_free, _hurd_port_locked_set,
|
||||||
|
_hurd_port_set): Always declare functions, and provide inline versions
|
||||||
|
only if __USE_EXTERN_INLINES and _LIBC are defined and
|
||||||
|
IS_IN(libc).
|
||||||
|
* hurd/hurd/signal.h (_hurd_self_sigstate, _hurd_critical_section_lock,
|
||||||
|
_hurd_critical_section_unlock): Likewise.
|
||||||
|
* hurd/hurd/threadvar.h (__hurd_threadvar_location_from_sp,
|
||||||
|
* __hurd_threadvar_location): Likewise.
|
||||||
|
* hurd/hurd/userlink.h (_hurd_userlink_link, _hurd_userlink_unlink,
|
||||||
|
_hurd_userlink_clear): Likewise.
|
||||||
|
* mach/lock-intern.h (__spin_lock_init, __spin_lock, __mutex_lock,
|
||||||
|
__mutex_unlock, __mutex_trylock): Always declare functions, and provide
|
||||||
|
inline versions only if __USE_EXTERN_INLINES and _LIBC are defined.
|
||||||
|
* mach/mach/mig_support.h (__mig_strncpy): Likewise.
|
||||||
|
* sysdeps/generic/machine-lock.h (__spin_unlock, __spin_try_lock,
|
||||||
|
__spin_lock_locked): Likewise.
|
||||||
|
* sysdeps/mach/i386/machine-lock.h (__spin_unlock, __spin_try_lock,
|
||||||
|
__spin_lock_locked): Likewise.
|
||||||
|
* mach/spin-lock.c (__USE_EXTERN_INLINES): Define to 1.
|
||||||
|
* hurd/Versions (libc: GLIBC_2.27): Add _hurd_fd_error_signal,
|
||||||
|
_hurd_fd_error, __hurd_dfail, __hurd_sockfail, _hurd_port_locked_set,
|
||||||
|
__hurd_threadvar_location_from_sp, __hurd_threadvar_location,
|
||||||
|
_hurd_userlink_link, _hurd_userlink_unlink, _hurd_userlink_clear.
|
||||||
|
|
||||||
2008-12-18 Thomas Schwinge <tschwinge@gnu.org>
|
2008-12-18 Thomas Schwinge <tschwinge@gnu.org>
|
||||||
|
|
||||||
|
@ -130,6 +130,14 @@ libc {
|
|||||||
__errno_location;
|
__errno_location;
|
||||||
}
|
}
|
||||||
GLIBC_2.27 {
|
GLIBC_2.27 {
|
||||||
|
# These always existed as inlines but the real functions were not exported.
|
||||||
|
_hurd_fd_error_signal; _hurd_fd_error;
|
||||||
|
__hurd_dfail; __hurd_sockfail;
|
||||||
|
_hurd_port_locked_set;
|
||||||
|
__hurd_threadvar_location_from_sp;
|
||||||
|
__hurd_threadvar_location;
|
||||||
|
_hurd_userlink_link; _hurd_userlink_unlink; _hurd_userlink_clear;
|
||||||
|
|
||||||
# "quasi-internal" functions
|
# "quasi-internal" functions
|
||||||
_hurd_exec_paths;
|
_hurd_exec_paths;
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,9 @@
|
|||||||
#define _HURD_H_EXTERN_INLINE __extern_inline
|
#define _HURD_H_EXTERN_INLINE __extern_inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern int __hurd_fail (error_t err);
|
||||||
|
|
||||||
|
#ifdef __USE_EXTERN_INLINES
|
||||||
_HURD_H_EXTERN_INLINE int
|
_HURD_H_EXTERN_INLINE int
|
||||||
__hurd_fail (error_t err)
|
__hurd_fail (error_t err)
|
||||||
{
|
{
|
||||||
@ -75,6 +78,7 @@ __hurd_fail (error_t err)
|
|||||||
errno = err;
|
errno = err;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Basic ports and info, initialized by startup. */
|
/* Basic ports and info, initialized by startup. */
|
||||||
|
|
||||||
|
@ -59,6 +59,10 @@ extern struct mutex _hurd_dtable_lock; /* Locks those two variables. */
|
|||||||
NULL. The cell is unlocked; when ready to use it, lock it and check for
|
NULL. The cell is unlocked; when ready to use it, lock it and check for
|
||||||
it being unused. */
|
it being unused. */
|
||||||
|
|
||||||
|
extern struct hurd_fd *_hurd_fd_get (int fd);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_FD_H_EXTERN_INLINE struct hurd_fd *
|
_HURD_FD_H_EXTERN_INLINE struct hurd_fd *
|
||||||
_hurd_fd_get (int fd)
|
_hurd_fd_get (int fd)
|
||||||
{
|
{
|
||||||
@ -91,6 +95,8 @@ _hurd_fd_get (int fd)
|
|||||||
|
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Evaluate EXPR with the variable `descriptor' bound to a pointer to the
|
/* Evaluate EXPR with the variable `descriptor' bound to a pointer to the
|
||||||
@ -138,6 +144,9 @@ _hurd_fd_get (int fd)
|
|||||||
/* Check if ERR should generate a signal.
|
/* Check if ERR should generate a signal.
|
||||||
Returns the signal to take, or zero if none. */
|
Returns the signal to take, or zero if none. */
|
||||||
|
|
||||||
|
extern int _hurd_fd_error_signal (error_t err);
|
||||||
|
|
||||||
|
#ifdef __USE_EXTERN_INLINES
|
||||||
_HURD_FD_H_EXTERN_INLINE int
|
_HURD_FD_H_EXTERN_INLINE int
|
||||||
_hurd_fd_error_signal (error_t err)
|
_hurd_fd_error_signal (error_t err)
|
||||||
{
|
{
|
||||||
@ -154,11 +163,15 @@ _hurd_fd_error_signal (error_t err)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Handle an error from an RPC on a file descriptor's port. You should
|
/* Handle an error from an RPC on a file descriptor's port. You should
|
||||||
always use this function to handle errors from RPCs made on file
|
always use this function to handle errors from RPCs made on file
|
||||||
descriptor ports. Some errors are translated into signals. */
|
descriptor ports. Some errors are translated into signals. */
|
||||||
|
|
||||||
|
extern error_t _hurd_fd_error (int fd, error_t err);
|
||||||
|
|
||||||
|
#ifdef __USE_EXTERN_INLINES
|
||||||
_HURD_FD_H_EXTERN_INLINE error_t
|
_HURD_FD_H_EXTERN_INLINE error_t
|
||||||
_hurd_fd_error (int fd, error_t err)
|
_hurd_fd_error (int fd, error_t err)
|
||||||
{
|
{
|
||||||
@ -171,20 +184,28 @@ _hurd_fd_error (int fd, error_t err)
|
|||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Handle error code ERR from an RPC on file descriptor FD's port.
|
/* Handle error code ERR from an RPC on file descriptor FD's port.
|
||||||
Set `errno' to the appropriate error code, and always return -1. */
|
Set `errno' to the appropriate error code, and always return -1. */
|
||||||
|
|
||||||
|
extern int __hurd_dfail (int fd, error_t err);
|
||||||
|
|
||||||
|
#ifdef __USE_EXTERN_INLINES
|
||||||
_HURD_FD_H_EXTERN_INLINE int
|
_HURD_FD_H_EXTERN_INLINE int
|
||||||
__hurd_dfail (int fd, error_t err)
|
__hurd_dfail (int fd, error_t err)
|
||||||
{
|
{
|
||||||
errno = _hurd_fd_error (fd, err);
|
errno = _hurd_fd_error (fd, err);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Likewise, but do not raise SIGPIPE on EPIPE if flags contain
|
/* Likewise, but do not raise SIGPIPE on EPIPE if flags contain
|
||||||
MSG_NOSIGNAL. */
|
MSG_NOSIGNAL. */
|
||||||
|
|
||||||
|
exern int __hurd_sockfail (int fd, int flags, error_t err);
|
||||||
|
|
||||||
|
#ifdef __USE_EXTERN_INLINES
|
||||||
_HURD_FD_H_EXTERN_INLINE int
|
_HURD_FD_H_EXTERN_INLINE int
|
||||||
__hurd_sockfail (int fd, int flags, error_t err)
|
__hurd_sockfail (int fd, int flags, error_t err)
|
||||||
{
|
{
|
||||||
@ -193,6 +214,7 @@ __hurd_sockfail (int fd, int flags, error_t err)
|
|||||||
errno = err;
|
errno = err;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up *FD to have PORT its server port, doing appropriate ctty magic.
|
/* Set up *FD to have PORT its server port, doing appropriate ctty magic.
|
||||||
Does no locking or unlocking. */
|
Does no locking or unlocking. */
|
||||||
@ -258,6 +280,8 @@ extern int _hurd_select (int nfds, struct pollfd *pollfds,
|
|||||||
/* Apply AT_FLAGS on FLAGS, in preparation for calling
|
/* Apply AT_FLAGS on FLAGS, in preparation for calling
|
||||||
__hurd_file_name_lookup. */
|
__hurd_file_name_lookup. */
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_FD_H_EXTERN_INLINE error_t
|
_HURD_FD_H_EXTERN_INLINE error_t
|
||||||
__hurd_at_flags (int *at_flags, int *flags)
|
__hurd_at_flags (int *at_flags, int *flags)
|
||||||
{
|
{
|
||||||
@ -274,6 +298,8 @@ __hurd_at_flags (int *at_flags, int *flags)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Variant of file_name_lookup used in *at function implementations.
|
/* Variant of file_name_lookup used in *at function implementations.
|
||||||
AT_FLAGS may only contain AT_SYMLINK_FOLLOW or AT_SYMLINK_NOFOLLOW,
|
AT_FLAGS may only contain AT_SYMLINK_FOLLOW or AT_SYMLINK_NOFOLLOW,
|
||||||
|
@ -60,6 +60,10 @@ struct hurd_port
|
|||||||
|
|
||||||
/* Initialize *PORT to INIT. */
|
/* Initialize *PORT to INIT. */
|
||||||
|
|
||||||
|
extern void _hurd_port_init (struct hurd_port *port, mach_port_t init);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE void
|
_HURD_PORT_H_EXTERN_INLINE void
|
||||||
_hurd_port_init (struct hurd_port *port, mach_port_t init)
|
_hurd_port_init (struct hurd_port *port, mach_port_t init)
|
||||||
{
|
{
|
||||||
@ -67,6 +71,8 @@ _hurd_port_init (struct hurd_port *port, mach_port_t init)
|
|||||||
port->users = NULL;
|
port->users = NULL;
|
||||||
port->port = init;
|
port->port = init;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Cleanup function for non-local exits. */
|
/* Cleanup function for non-local exits. */
|
||||||
@ -75,6 +81,12 @@ extern void _hurd_port_cleanup (void *, jmp_buf, int);
|
|||||||
/* Get a reference to *PORT, which is locked.
|
/* Get a reference to *PORT, which is locked.
|
||||||
Pass return value and LINK to _hurd_port_free when done. */
|
Pass return value and LINK to _hurd_port_free when done. */
|
||||||
|
|
||||||
|
extern mach_port_t
|
||||||
|
_hurd_port_locked_get (struct hurd_port *port,
|
||||||
|
struct hurd_userlink *link);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE mach_port_t
|
_HURD_PORT_H_EXTERN_INLINE mach_port_t
|
||||||
_hurd_port_locked_get (struct hurd_port *port,
|
_hurd_port_locked_get (struct hurd_port *port,
|
||||||
struct hurd_userlink *link)
|
struct hurd_userlink *link)
|
||||||
@ -90,9 +102,17 @@ _hurd_port_locked_get (struct hurd_port *port,
|
|||||||
__spin_unlock (&port->lock);
|
__spin_unlock (&port->lock);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Same, but locks PORT first. */
|
/* Same, but locks PORT first. */
|
||||||
|
|
||||||
|
extern mach_port_t
|
||||||
|
_hurd_port_get (struct hurd_port *port,
|
||||||
|
struct hurd_userlink *link);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE mach_port_t
|
_HURD_PORT_H_EXTERN_INLINE mach_port_t
|
||||||
_hurd_port_get (struct hurd_port *port,
|
_hurd_port_get (struct hurd_port *port,
|
||||||
struct hurd_userlink *link)
|
struct hurd_userlink *link)
|
||||||
@ -104,10 +124,19 @@ _hurd_port_get (struct hurd_port *port,
|
|||||||
HURD_CRITICAL_END;
|
HURD_CRITICAL_END;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Free a reference gotten with `USED_PORT = _hurd_port_get (PORT, LINK);' */
|
/* Free a reference gotten with `USED_PORT = _hurd_port_get (PORT, LINK);' */
|
||||||
|
|
||||||
|
extern void
|
||||||
|
_hurd_port_free (struct hurd_port *port,
|
||||||
|
struct hurd_userlink *link,
|
||||||
|
mach_port_t used_port);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE void
|
_HURD_PORT_H_EXTERN_INLINE void
|
||||||
_hurd_port_free (struct hurd_port *port,
|
_hurd_port_free (struct hurd_port *port,
|
||||||
struct hurd_userlink *link,
|
struct hurd_userlink *link,
|
||||||
@ -127,11 +156,17 @@ _hurd_port_free (struct hurd_port *port,
|
|||||||
if (dealloc)
|
if (dealloc)
|
||||||
__mach_port_deallocate (__mach_task_self (), used_port);
|
__mach_port_deallocate (__mach_task_self (), used_port);
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Set *PORT's port to NEWPORT. NEWPORT's reference is consumed by PORT->port.
|
/* Set *PORT's port to NEWPORT. NEWPORT's reference is consumed by PORT->port.
|
||||||
PORT->lock is locked. */
|
PORT->lock is locked. */
|
||||||
|
|
||||||
|
extern void _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE void
|
_HURD_PORT_H_EXTERN_INLINE void
|
||||||
_hurd_port_locked_set (struct hurd_port *port, mach_port_t newport)
|
_hurd_port_locked_set (struct hurd_port *port, mach_port_t newport)
|
||||||
{
|
{
|
||||||
@ -142,9 +177,15 @@ _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport)
|
|||||||
if (old != MACH_PORT_NULL)
|
if (old != MACH_PORT_NULL)
|
||||||
__mach_port_deallocate (__mach_task_self (), old);
|
__mach_port_deallocate (__mach_task_self (), old);
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Same, but locks PORT first. */
|
/* Same, but locks PORT first. */
|
||||||
|
|
||||||
|
extern void _hurd_port_set (struct hurd_port *port, mach_port_t newport);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_PORT_H_EXTERN_INLINE void
|
_HURD_PORT_H_EXTERN_INLINE void
|
||||||
_hurd_port_set (struct hurd_port *port, mach_port_t newport)
|
_hurd_port_set (struct hurd_port *port, mach_port_t newport)
|
||||||
{
|
{
|
||||||
@ -153,6 +194,8 @@ _hurd_port_set (struct hurd_port *port, mach_port_t newport)
|
|||||||
_hurd_port_locked_set (port, newport);
|
_hurd_port_locked_set (port, newport);
|
||||||
HURD_CRITICAL_END;
|
HURD_CRITICAL_END;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* hurd/port.h */
|
#endif /* hurd/port.h */
|
||||||
|
@ -129,6 +129,8 @@ extern struct hurd_sigstate *_hurd_self_sigstate (void)
|
|||||||
#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline
|
#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate *
|
_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate *
|
||||||
_hurd_self_sigstate (void)
|
_hurd_self_sigstate (void)
|
||||||
{
|
{
|
||||||
@ -138,6 +140,8 @@ _hurd_self_sigstate (void)
|
|||||||
*location = _hurd_thread_sigstate (__mach_thread_self ());
|
*location = _hurd_thread_sigstate (__mach_thread_self ());
|
||||||
return *location;
|
return *location;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Thread listening on our message port; also called the "signal thread". */
|
/* Thread listening on our message port; also called the "signal thread". */
|
||||||
|
|
||||||
@ -164,6 +168,10 @@ extern int _hurd_core_limit;
|
|||||||
interrupted lest the signal handler try to take the same lock and
|
interrupted lest the signal handler try to take the same lock and
|
||||||
deadlock result. */
|
deadlock result. */
|
||||||
|
|
||||||
|
extern void *_hurd_critical_section_lock (void);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_SIGNAL_H_EXTERN_INLINE void *
|
_HURD_SIGNAL_H_EXTERN_INLINE void *
|
||||||
_hurd_critical_section_lock (void)
|
_hurd_critical_section_lock (void)
|
||||||
{
|
{
|
||||||
@ -188,7 +196,13 @@ _hurd_critical_section_lock (void)
|
|||||||
_hurd_critical_section_unlock to unlock it. */
|
_hurd_critical_section_unlock to unlock it. */
|
||||||
return ss;
|
return ss;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void _hurd_critical_section_unlock (void *our_lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_SIGNAL_H_EXTERN_INLINE void
|
_HURD_SIGNAL_H_EXTERN_INLINE void
|
||||||
_hurd_critical_section_unlock (void *our_lock)
|
_hurd_critical_section_unlock (void *our_lock)
|
||||||
{
|
{
|
||||||
@ -211,6 +225,8 @@ _hurd_critical_section_unlock (void *our_lock)
|
|||||||
__msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ());
|
__msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Convenient macros for simple uses of critical sections.
|
/* Convenient macros for simple uses of critical sections.
|
||||||
These two must be used as a pair at the same C scoping level. */
|
These two must be used as a pair at the same C scoping level. */
|
||||||
|
@ -81,6 +81,9 @@ enum __hurd_threadvar_index
|
|||||||
|
|
||||||
extern unsigned long int *__hurd_threadvar_location_from_sp
|
extern unsigned long int *__hurd_threadvar_location_from_sp
|
||||||
(enum __hurd_threadvar_index __index, void *__sp);
|
(enum __hurd_threadvar_index __index, void *__sp);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
|
_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
|
||||||
__hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index,
|
__hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index,
|
||||||
void *__sp)
|
void *__sp)
|
||||||
@ -92,6 +95,8 @@ __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index,
|
|||||||
: (unsigned long int *) ((__stack & __hurd_threadvar_stack_mask) +
|
: (unsigned long int *) ((__stack & __hurd_threadvar_stack_mask) +
|
||||||
__hurd_threadvar_stack_offset))[__index];
|
__hurd_threadvar_stack_offset))[__index];
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <machine-sp.h> /* Define __thread_stack_pointer. */
|
#include <machine-sp.h> /* Define __thread_stack_pointer. */
|
||||||
|
|
||||||
@ -105,12 +110,16 @@ __hurd_threadvar_location (enum __hurd_threadvar_index __index) __THROW
|
|||||||
the same stack frame by different threads. */
|
the same stack frame by different threads. */
|
||||||
__attribute__ ((__const__));
|
__attribute__ ((__const__));
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
|
_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
|
||||||
__hurd_threadvar_location (enum __hurd_threadvar_index __index)
|
__hurd_threadvar_location (enum __hurd_threadvar_index __index)
|
||||||
{
|
{
|
||||||
return __hurd_threadvar_location_from_sp (__index,
|
return __hurd_threadvar_location_from_sp (__index,
|
||||||
__thread_stack_pointer ());
|
__thread_stack_pointer ());
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* hurd/threadvar.h */
|
#endif /* hurd/threadvar.h */
|
||||||
|
@ -76,6 +76,12 @@ struct hurd_userlink
|
|||||||
|
|
||||||
/* Attach LINK to the chain of users at *CHAINP. */
|
/* Attach LINK to the chain of users at *CHAINP. */
|
||||||
|
|
||||||
|
extern void
|
||||||
|
_hurd_userlink_link (struct hurd_userlink **chainp,
|
||||||
|
struct hurd_userlink *link);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_USERLINK_H_EXTERN_INLINE void
|
_HURD_USERLINK_H_EXTERN_INLINE void
|
||||||
_hurd_userlink_link (struct hurd_userlink **chainp,
|
_hurd_userlink_link (struct hurd_userlink **chainp,
|
||||||
struct hurd_userlink *link)
|
struct hurd_userlink *link)
|
||||||
@ -96,11 +102,17 @@ _hurd_userlink_link (struct hurd_userlink **chainp,
|
|||||||
link->thread.prevp = thread_chainp;
|
link->thread.prevp = thread_chainp;
|
||||||
*thread_chainp = link;
|
*thread_chainp = link;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Detach LINK from its chain. Returns nonzero iff this was the
|
/* Detach LINK from its chain. Returns nonzero iff this was the
|
||||||
last user of the resource and it should be deallocated. */
|
last user of the resource and it should be deallocated. */
|
||||||
|
|
||||||
|
extern int _hurd_userlink_unlink (struct hurd_userlink *link);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_USERLINK_H_EXTERN_INLINE int
|
_HURD_USERLINK_H_EXTERN_INLINE int
|
||||||
_hurd_userlink_unlink (struct hurd_userlink *link)
|
_hurd_userlink_unlink (struct hurd_userlink *link)
|
||||||
{
|
{
|
||||||
@ -123,6 +135,8 @@ _hurd_userlink_unlink (struct hurd_userlink *link)
|
|||||||
|
|
||||||
return dealloc;
|
return dealloc;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Clear all users from *CHAINP. Call this when the resource *CHAINP
|
/* Clear all users from *CHAINP. Call this when the resource *CHAINP
|
||||||
@ -131,6 +145,10 @@ _hurd_userlink_unlink (struct hurd_userlink *link)
|
|||||||
value is zero, someone is still using the resource and they will
|
value is zero, someone is still using the resource and they will
|
||||||
deallocate it when they are finished. */
|
deallocate it when they are finished. */
|
||||||
|
|
||||||
|
extern int _hurd_userlink_clear (struct hurd_userlink **chainp);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
|
# if IS_IN (libc)
|
||||||
_HURD_USERLINK_H_EXTERN_INLINE int
|
_HURD_USERLINK_H_EXTERN_INLINE int
|
||||||
_hurd_userlink_clear (struct hurd_userlink **chainp)
|
_hurd_userlink_clear (struct hurd_userlink **chainp)
|
||||||
{
|
{
|
||||||
@ -143,5 +161,7 @@ _hurd_userlink_clear (struct hurd_userlink **chainp)
|
|||||||
*chainp = NULL;
|
*chainp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* hurd/userlink.h */
|
#endif /* hurd/userlink.h */
|
||||||
|
@ -28,11 +28,15 @@
|
|||||||
|
|
||||||
/* Initialize LOCK. */
|
/* Initialize LOCK. */
|
||||||
|
|
||||||
|
extern void __spin_lock_init (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__spin_lock_init (__spin_lock_t *__lock)
|
__spin_lock_init (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
*__lock = __SPIN_LOCK_INITIALIZER;
|
*__lock = __SPIN_LOCK_INITIALIZER;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Lock LOCK, blocking if we can't get it. */
|
/* Lock LOCK, blocking if we can't get it. */
|
||||||
@ -40,12 +44,16 @@ extern void __spin_lock_solid (__spin_lock_t *__lock);
|
|||||||
|
|
||||||
/* Lock the spin lock LOCK. */
|
/* Lock the spin lock LOCK. */
|
||||||
|
|
||||||
|
extern void __spin_lock (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__spin_lock (__spin_lock_t *__lock)
|
__spin_lock (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
if (! __spin_try_lock (__lock))
|
if (! __spin_try_lock (__lock))
|
||||||
__spin_lock_solid (__lock);
|
__spin_lock_solid (__lock);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Name space-clean internal interface to mutex locks.
|
/* Name space-clean internal interface to mutex locks.
|
||||||
|
|
||||||
@ -70,27 +78,39 @@ extern void __mutex_unlock_solid (void *__lock);
|
|||||||
|
|
||||||
/* Lock the mutex lock LOCK. */
|
/* Lock the mutex lock LOCK. */
|
||||||
|
|
||||||
|
extern void __mutex_lock (void *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__mutex_lock (void *__lock)
|
__mutex_lock (void *__lock)
|
||||||
{
|
{
|
||||||
if (! __spin_try_lock ((__spin_lock_t *) __lock))
|
if (! __spin_try_lock ((__spin_lock_t *) __lock))
|
||||||
__mutex_lock_solid (__lock);
|
__mutex_lock_solid (__lock);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Unlock the mutex lock LOCK. */
|
/* Unlock the mutex lock LOCK. */
|
||||||
|
|
||||||
|
extern void __mutex_unlock (void *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__mutex_unlock (void *__lock)
|
__mutex_unlock (void *__lock)
|
||||||
{
|
{
|
||||||
__spin_unlock ((__spin_lock_t *) __lock);
|
__spin_unlock ((__spin_lock_t *) __lock);
|
||||||
__mutex_unlock_solid (__lock);
|
__mutex_unlock_solid (__lock);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
extern int __mutex_trylock (void *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE int
|
_EXTERN_INLINE int
|
||||||
__mutex_trylock (void *__lock)
|
__mutex_trylock (void *__lock)
|
||||||
{
|
{
|
||||||
return __spin_try_lock ((__spin_lock_t *) __lock);
|
return __spin_try_lock ((__spin_lock_t *) __lock);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* lock-intern.h */
|
#endif /* lock-intern.h */
|
||||||
|
@ -66,6 +66,8 @@ extern void mig_reply_setup (const mach_msg_header_t *__request,
|
|||||||
/* Idiocy support function. */
|
/* Idiocy support function. */
|
||||||
extern vm_size_t mig_strncpy (char *__dst, const char *__src, vm_size_t __len);
|
extern vm_size_t mig_strncpy (char *__dst, const char *__src, vm_size_t __len);
|
||||||
extern vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t);
|
extern vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
__extern_inline vm_size_t
|
__extern_inline vm_size_t
|
||||||
__mig_strncpy (char *__dst, const char *__src, vm_size_t __len)
|
__mig_strncpy (char *__dst, const char *__src, vm_size_t __len)
|
||||||
{
|
{
|
||||||
@ -76,6 +78,7 @@ mig_strncpy (char *__dst, const char *__src, vm_size_t __len)
|
|||||||
{
|
{
|
||||||
return __mig_strncpy (__dst, __src, __len);
|
return __mig_strncpy (__dst, __src, __len);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#define __USE_EXTERN_INLINES 1
|
||||||
#define _EXTERN_INLINE /* Empty to define the real functions. */
|
#define _EXTERN_INLINE /* Empty to define the real functions. */
|
||||||
#include "spin-lock.h"
|
#include "spin-lock.h"
|
||||||
|
|
||||||
|
@ -34,14 +34,21 @@ typedef volatile int __spin_lock_t;
|
|||||||
|
|
||||||
/* Unlock LOCK. */
|
/* Unlock LOCK. */
|
||||||
|
|
||||||
|
extern void __spin_unlock (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__spin_unlock (__spin_lock_t *__lock)
|
__spin_unlock (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
*__lock = 0;
|
*__lock = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
|
/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
|
||||||
|
|
||||||
|
extern int __spin_try_lock (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE int
|
_EXTERN_INLINE int
|
||||||
__spin_try_lock (__spin_lock_t *__lock)
|
__spin_try_lock (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
@ -50,14 +57,19 @@ __spin_try_lock (__spin_lock_t *__lock)
|
|||||||
*__lock = 1;
|
*__lock = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Return nonzero if LOCK is locked. */
|
/* Return nonzero if LOCK is locked. */
|
||||||
|
|
||||||
|
extern int __spin_lock_locked (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE int
|
_EXTERN_INLINE int
|
||||||
__spin_lock_locked (__spin_lock_t *__lock)
|
__spin_lock_locked (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
return *__lock != 0;
|
return *__lock != 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* machine-lock.h */
|
#endif /* machine-lock.h */
|
||||||
|
@ -34,6 +34,9 @@ typedef volatile int __spin_lock_t;
|
|||||||
|
|
||||||
/* Unlock LOCK. */
|
/* Unlock LOCK. */
|
||||||
|
|
||||||
|
extern void __spin_unlock (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE void
|
_EXTERN_INLINE void
|
||||||
__spin_unlock (__spin_lock_t *__lock)
|
__spin_unlock (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
@ -42,9 +45,13 @@ __spin_unlock (__spin_lock_t *__lock)
|
|||||||
: "=&r" (__unlocked), "=m" (*__lock) : "0" (0)
|
: "=&r" (__unlocked), "=m" (*__lock) : "0" (0)
|
||||||
: "memory");
|
: "memory");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
|
/* Try to lock LOCK; return nonzero if we locked it, zero if another has. */
|
||||||
|
|
||||||
|
extern int __spin_try_lock (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE int
|
_EXTERN_INLINE int
|
||||||
__spin_try_lock (__spin_lock_t *__lock)
|
__spin_try_lock (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
@ -54,14 +61,19 @@ __spin_try_lock (__spin_lock_t *__lock)
|
|||||||
: "memory");
|
: "memory");
|
||||||
return !__locked;
|
return !__locked;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Return nonzero if LOCK is locked. */
|
/* Return nonzero if LOCK is locked. */
|
||||||
|
|
||||||
|
extern int __spin_lock_locked (__spin_lock_t *__lock);
|
||||||
|
|
||||||
|
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||||
_EXTERN_INLINE int
|
_EXTERN_INLINE int
|
||||||
__spin_lock_locked (__spin_lock_t *__lock)
|
__spin_lock_locked (__spin_lock_t *__lock)
|
||||||
{
|
{
|
||||||
return *__lock != 0;
|
return *__lock != 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif /* machine-lock.h */
|
#endif /* machine-lock.h */
|
||||||
|
Loading…
Reference in New Issue
Block a user