mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +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.
|
||||
* io/tst-copy_file_range.c [!defined CLONE_NEWNS]: Do not include
|
||||
<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>
|
||||
|
||||
|
@ -130,6 +130,14 @@ libc {
|
||||
__errno_location;
|
||||
}
|
||||
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
|
||||
_hurd_exec_paths;
|
||||
}
|
||||
|
@ -46,6 +46,9 @@
|
||||
#define _HURD_H_EXTERN_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
extern int __hurd_fail (error_t err);
|
||||
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
_HURD_H_EXTERN_INLINE int
|
||||
__hurd_fail (error_t err)
|
||||
{
|
||||
@ -75,6 +78,7 @@ __hurd_fail (error_t err)
|
||||
errno = err;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
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_get (int fd)
|
||||
{
|
||||
@ -91,6 +95,8 @@ _hurd_fd_get (int fd)
|
||||
|
||||
return descriptor;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* 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.
|
||||
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_error_signal (error_t err)
|
||||
{
|
||||
@ -154,11 +163,15 @@ _hurd_fd_error_signal (error_t err)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
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_error (int fd, error_t err)
|
||||
{
|
||||
@ -171,20 +184,28 @@ _hurd_fd_error (int fd, error_t err)
|
||||
}
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Handle error code ERR from an RPC on file descriptor FD's port.
|
||||
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_dfail (int fd, error_t err)
|
||||
{
|
||||
errno = _hurd_fd_error (fd, err);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Likewise, but do not raise SIGPIPE on EPIPE if flags contain
|
||||
MSG_NOSIGNAL. */
|
||||
|
||||
exern int __hurd_sockfail (int fd, int flags, error_t err);
|
||||
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
_HURD_FD_H_EXTERN_INLINE int
|
||||
__hurd_sockfail (int fd, int flags, error_t err)
|
||||
{
|
||||
@ -193,6 +214,7 @@ __hurd_sockfail (int fd, int flags, error_t err)
|
||||
errno = err;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set up *FD to have PORT its server port, doing appropriate ctty magic.
|
||||
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
|
||||
__hurd_file_name_lookup. */
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
# if IS_IN (libc)
|
||||
_HURD_FD_H_EXTERN_INLINE error_t
|
||||
__hurd_at_flags (int *at_flags, int *flags)
|
||||
{
|
||||
@ -274,6 +298,8 @@ __hurd_at_flags (int *at_flags, int *flags)
|
||||
|
||||
return 0;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Variant of file_name_lookup used in *at function implementations.
|
||||
AT_FLAGS may only contain AT_SYMLINK_FOLLOW or AT_SYMLINK_NOFOLLOW,
|
||||
|
@ -60,6 +60,10 @@ struct hurd_port
|
||||
|
||||
/* 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_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->port = init;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* 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.
|
||||
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_locked_get (struct hurd_port *port,
|
||||
struct hurd_userlink *link)
|
||||
@ -90,9 +102,17 @@ _hurd_port_locked_get (struct hurd_port *port,
|
||||
__spin_unlock (&port->lock);
|
||||
return result;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* 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_get (struct hurd_port *port,
|
||||
struct hurd_userlink *link)
|
||||
@ -104,10 +124,19 @@ _hurd_port_get (struct hurd_port *port,
|
||||
HURD_CRITICAL_END;
|
||||
return result;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* 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_free (struct hurd_port *port,
|
||||
struct hurd_userlink *link,
|
||||
@ -127,11 +156,17 @@ _hurd_port_free (struct hurd_port *port,
|
||||
if (dealloc)
|
||||
__mach_port_deallocate (__mach_task_self (), used_port);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Set *PORT's port to NEWPORT. NEWPORT's reference is consumed by PORT->port.
|
||||
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_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)
|
||||
__mach_port_deallocate (__mach_task_self (), old);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* 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_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_CRITICAL_END;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* hurd/port.h */
|
||||
|
@ -129,6 +129,8 @@ extern struct hurd_sigstate *_hurd_self_sigstate (void)
|
||||
#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline
|
||||
#endif
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
# if IS_IN (libc)
|
||||
_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate *
|
||||
_hurd_self_sigstate (void)
|
||||
{
|
||||
@ -138,6 +140,8 @@ _hurd_self_sigstate (void)
|
||||
*location = _hurd_thread_sigstate (__mach_thread_self ());
|
||||
return *location;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
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_critical_section_lock (void)
|
||||
{
|
||||
@ -188,7 +196,13 @@ _hurd_critical_section_lock (void)
|
||||
_hurd_critical_section_unlock to unlock it. */
|
||||
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_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 ());
|
||||
}
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Convenient macros for simple uses of critical sections.
|
||||
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
|
||||
(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_location_from_sp (enum __hurd_threadvar_index __index,
|
||||
void *__sp)
|
||||
@ -92,6 +95,8 @@ __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index,
|
||||
: (unsigned long int *) ((__stack & __hurd_threadvar_stack_mask) +
|
||||
__hurd_threadvar_stack_offset))[__index];
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#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. */
|
||||
__attribute__ ((__const__));
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
# if IS_IN (libc)
|
||||
_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
|
||||
__hurd_threadvar_location (enum __hurd_threadvar_index __index)
|
||||
{
|
||||
return __hurd_threadvar_location_from_sp (__index,
|
||||
__thread_stack_pointer ());
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* hurd/threadvar.h */
|
||||
|
@ -76,6 +76,12 @@ struct hurd_userlink
|
||||
|
||||
/* 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_link (struct hurd_userlink **chainp,
|
||||
struct hurd_userlink *link)
|
||||
@ -96,11 +102,17 @@ _hurd_userlink_link (struct hurd_userlink **chainp,
|
||||
link->thread.prevp = thread_chainp;
|
||||
*thread_chainp = link;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Detach LINK from its chain. Returns nonzero iff this was the
|
||||
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_unlink (struct hurd_userlink *link)
|
||||
{
|
||||
@ -123,6 +135,8 @@ _hurd_userlink_unlink (struct hurd_userlink *link)
|
||||
|
||||
return dealloc;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* 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
|
||||
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_clear (struct hurd_userlink **chainp)
|
||||
{
|
||||
@ -143,5 +161,7 @@ _hurd_userlink_clear (struct hurd_userlink **chainp)
|
||||
*chainp = NULL;
|
||||
return 0;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* hurd/userlink.h */
|
||||
|
@ -28,11 +28,15 @@
|
||||
|
||||
/* Initialize LOCK. */
|
||||
|
||||
extern void __spin_lock_init (__spin_lock_t *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__spin_lock_init (__spin_lock_t *__lock)
|
||||
{
|
||||
*__lock = __SPIN_LOCK_INITIALIZER;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* 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. */
|
||||
|
||||
extern void __spin_lock (__spin_lock_t *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__spin_lock (__spin_lock_t *__lock)
|
||||
{
|
||||
if (! __spin_try_lock (__lock))
|
||||
__spin_lock_solid (__lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Name space-clean internal interface to mutex locks.
|
||||
|
||||
@ -70,27 +78,39 @@ extern void __mutex_unlock_solid (void *__lock);
|
||||
|
||||
/* Lock the mutex lock LOCK. */
|
||||
|
||||
extern void __mutex_lock (void *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__mutex_lock (void *__lock)
|
||||
{
|
||||
if (! __spin_try_lock ((__spin_lock_t *) __lock))
|
||||
__mutex_lock_solid (__lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Unlock the mutex lock LOCK. */
|
||||
|
||||
extern void __mutex_unlock (void *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__mutex_unlock (void *__lock)
|
||||
{
|
||||
__spin_unlock ((__spin_lock_t *) __lock);
|
||||
__mutex_unlock_solid (__lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
extern int __mutex_trylock (void *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE int
|
||||
__mutex_trylock (void *__lock)
|
||||
{
|
||||
return __spin_try_lock ((__spin_lock_t *) __lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* lock-intern.h */
|
||||
|
@ -66,6 +66,8 @@ extern void mig_reply_setup (const mach_msg_header_t *__request,
|
||||
/* 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);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
__extern_inline vm_size_t
|
||||
__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);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#define __USE_EXTERN_INLINES 1
|
||||
#define _EXTERN_INLINE /* Empty to define the real functions. */
|
||||
#include "spin-lock.h"
|
||||
|
||||
|
@ -34,14 +34,21 @@ typedef volatile int __spin_lock_t;
|
||||
|
||||
/* Unlock LOCK. */
|
||||
|
||||
extern void __spin_unlock (__spin_lock_t *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__spin_unlock (__spin_lock_t *__lock)
|
||||
{
|
||||
*__lock = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
__spin_try_lock (__spin_lock_t *__lock)
|
||||
{
|
||||
@ -50,14 +57,19 @@ __spin_try_lock (__spin_lock_t *__lock)
|
||||
*__lock = 1;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
__spin_lock_locked (__spin_lock_t *__lock)
|
||||
{
|
||||
return *__lock != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* machine-lock.h */
|
||||
|
@ -34,6 +34,9 @@ typedef volatile int __spin_lock_t;
|
||||
|
||||
/* Unlock LOCK. */
|
||||
|
||||
extern void __spin_unlock (__spin_lock_t *__lock);
|
||||
|
||||
#if defined __USE_EXTERN_INLINES && defined _LIBC
|
||||
_EXTERN_INLINE void
|
||||
__spin_unlock (__spin_lock_t *__lock)
|
||||
{
|
||||
@ -42,9 +45,13 @@ __spin_unlock (__spin_lock_t *__lock)
|
||||
: "=&r" (__unlocked), "=m" (*__lock) : "0" (0)
|
||||
: "memory");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
__spin_try_lock (__spin_lock_t *__lock)
|
||||
{
|
||||
@ -54,14 +61,19 @@ __spin_try_lock (__spin_lock_t *__lock)
|
||||
: "memory");
|
||||
return !__locked;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
__spin_lock_locked (__spin_lock_t *__lock)
|
||||
{
|
||||
return *__lock != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* machine-lock.h */
|
||||
|
Loading…
Reference in New Issue
Block a user