about summary refs log tree commit diff
path: root/hurd
diff options
context:
space:
mode:
Diffstat (limited to 'hurd')
-rw-r--r--hurd/Makefile15
-rw-r--r--hurd/hurd/fd.h12
-rw-r--r--hurd/hurd/port.h18
-rw-r--r--hurd/hurd/signal.h12
-rw-r--r--hurd/hurd/threadvar.h12
-rw-r--r--hurd/hurd/userlink.h12
-rw-r--r--hurd/hurdinline.c13
7 files changed, 49 insertions, 45 deletions
diff --git a/hurd/Makefile b/hurd/Makefile
index a9e63b93cf..0d932e501f 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -28,6 +28,9 @@ headers = hurd.h $(interface-headers) \
 	  $(addprefix hurd/,fd.h id.h port.h signal.h sigpreempt.h ioctl.h\
 			    userlink.h resource.h threadvar.h lookup.h)
 
+inline-headers = hurd.h $(addprefix hurd/,fd.h signal.h \
+				          userlink.h threadvar.h port.h)
+
 # The RPC interfaces go in a separate library.
 interface-library := libhurduser
 user-interfaces		:= $(addprefix hurd/,\
@@ -54,13 +57,14 @@ routines = hurdstartup hurdinit \
 	   fopenport \
 	   vpprintf \
 	   ports-get ports-set hurdports hurdmsg \
-	   $(sig) $(dtable) hurdinline port-cleanup report-wait
+	   $(sig) $(dtable) $(inlines) port-cleanup report-wait
 sig	= hurdsig hurdfault siginfo hurd-raise preempt-sig \
 	  trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \
 	  thread-self thread-cancel intr-msg catch-signal
 dtable	= dtable port2fd new-fd alloc-fd intern-fd \
 	  getdport openport \
 	  fd-close fd-read fd-write hurdioctl ctty-input ctty-output
+inlines = $(inline-headers:%.h=%-inlines)
 distribute = hurdstartup.h hurdfault.h hurdhost.h \
 	     faultexc.defs intr-rpc.defs intr-rpc.h intr-msg.h Notes
 
@@ -74,6 +78,15 @@ routines += compat-20
 endif
 
 shared-only-routines = compat-20
+
+# For each of the $(inline-headers), generate a trivial source
+# file that will #include it to define its inline functions as real functions.
+$(inlines:%=$(objpfx)%.c): $(objpfx)%-inlines.c: %.h
+	(h="`echo $(subst /,_,$*) | tr '[a-z]' '[A-Z]'`"; \
+	 echo "#define _$${h}_H_EXTERN_INLINE /* Define real function.  */"; \
+	 echo '#include "$<"') > $@-new
+	mv -f $@-new $@
+generated += $(inlines:=.c)
 
 include ../mach/Machrules
 include ../Rules
diff --git a/hurd/hurd/fd.h b/hurd/hurd/fd.h
index 7e5a9781e0..711d15e4ab 100644
--- a/hurd/hurd/fd.h
+++ b/hurd/hurd/fd.h
@@ -49,15 +49,15 @@ extern struct mutex _hurd_dtable_lock; /* Locks those two variables.  */
 #include <hurd/signal.h>
 #include <lock-intern.h>
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+#ifndef _HURD_FD_H_EXTERN_INLINE
+#define _HURD_FD_H_EXTERN_INLINE extern __inline
 #endif
 
 /* Returns the descriptor cell for FD.  If FD is invalid or unused, return
    NULL.  The cell is unlocked; when ready to use it, lock it and check for
    it being unused.  */
 
-_EXTERN_INLINE struct hurd_fd *
+_HURD_FD_H_EXTERN_INLINE struct hurd_fd *
 _hurd_fd_get (int fd)
 {
   struct hurd_fd *descriptor;
@@ -134,7 +134,7 @@ _hurd_fd_get (int fd)
 /* Check if ERR should generate a signal.
    Returns the signal to take, or zero if none.  */
 
-_EXTERN_INLINE error_t
+_HURD_FD_H_EXTERN_INLINE error_t
 _hurd_fd_error_signal (error_t err)
 {
   switch (err)
@@ -155,7 +155,7 @@ _hurd_fd_error_signal (error_t err)
    always use this function to handle errors from RPCs made on file
    descriptor ports.  Some errors are translated into signals.  */
 
-_EXTERN_INLINE error_t
+_HURD_FD_H_EXTERN_INLINE error_t
 _hurd_fd_error (int fd, error_t err)
 {
   int signo = _hurd_fd_error_signal (err);
@@ -171,7 +171,7 @@ _hurd_fd_error (int fd, error_t err)
 /* 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_INLINE int
+_HURD_FD_H_EXTERN_INLINE int
 __hurd_dfail (int fd, error_t err)
 {
   errno = _hurd_fd_error (fd, err);
diff --git a/hurd/hurd/port.h b/hurd/hurd/port.h
index d58c45fb97..1117687155 100644
--- a/hurd/hurd/port.h
+++ b/hurd/hurd/port.h
@@ -1,5 +1,5 @@
 /* Lightweight user references for ports.
-   Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1995, 1997, 1999 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
@@ -54,14 +54,14 @@ struct hurd_port
      __result; })
 
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+#ifndef _HURD_PORT_H_EXTERN_INLINE
+#define _HURD_PORT_H_EXTERN_INLINE extern __inline
 #endif
 
 
 /* Initialize *PORT to INIT.  */
 
-_EXTERN_INLINE void
+_HURD_PORT_H_EXTERN_INLINE void
 _hurd_port_init (struct hurd_port *port, mach_port_t init)
 {
   __spin_lock_init (&port->lock);
@@ -76,7 +76,7 @@ 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_INLINE mach_port_t
+_HURD_PORT_H_EXTERN_INLINE mach_port_t
 _hurd_port_locked_get (struct hurd_port *port,
 		       struct hurd_userlink *link)
 {
@@ -94,7 +94,7 @@ _hurd_port_locked_get (struct hurd_port *port,
 
 /* Same, but locks PORT first.  */
 
-_EXTERN_INLINE mach_port_t
+_HURD_PORT_H_EXTERN_INLINE mach_port_t
 _hurd_port_get (struct hurd_port *port,
 		struct hurd_userlink *link)
 {
@@ -109,7 +109,7 @@ _hurd_port_get (struct hurd_port *port,
 
 /* Free a reference gotten with `USED_PORT = _hurd_port_get (PORT, LINK);' */
 
-_EXTERN_INLINE void
+_HURD_PORT_H_EXTERN_INLINE void
 _hurd_port_free (struct hurd_port *port,
 		 struct hurd_userlink *link,
 		 mach_port_t used_port)
@@ -133,7 +133,7 @@ _hurd_port_free (struct hurd_port *port,
 /* Set *PORT's port to NEWPORT.  NEWPORT's reference is consumed by PORT->port.
    PORT->lock is locked.  */
 
-_EXTERN_INLINE void
+_HURD_PORT_H_EXTERN_INLINE void
 _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport)
 {
   mach_port_t old;
@@ -146,7 +146,7 @@ _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport)
 
 /* Same, but locks PORT first.  */
 
-_EXTERN_INLINE void
+_HURD_PORT_H_EXTERN_INLINE void
 _hurd_port_set (struct hurd_port *port, mach_port_t newport)
 {
   HURD_CRITICAL_BEGIN;
diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h
index 3057963111..cb1b312aee 100644
--- a/hurd/hurd/signal.h
+++ b/hurd/hurd/signal.h
@@ -1,5 +1,5 @@
 /* Implementing POSIX.1 signals under the Hurd.
-   Copyright (C) 1993, 94, 95, 96, 98 Free Software Foundation, Inc.
+   Copyright (C) 1993, 94, 95, 96, 98, 99 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
@@ -124,7 +124,11 @@ extern struct hurd_sigstate *_hurd_self_sigstate (void)
 	by different threads.  */
      __attribute__ ((__const__));
 
-_EXTERN_INLINE struct hurd_sigstate *
+#ifndef _HURD_SIGNAL_H_EXTERN_INLINE
+#define _HURD_SIGNAL_H_EXTERN_INLINE extern __inline
+#endif
+
+_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate *
 _hurd_self_sigstate (void)
 {
   struct hurd_sigstate **location =
@@ -159,7 +163,7 @@ extern int _hurd_core_limit;
    interrupted lest the signal handler try to take the same lock and
    deadlock result.  */
 
-_EXTERN_INLINE void *
+_HURD_SIGNAL_H_EXTERN_INLINE void *
 _hurd_critical_section_lock (void)
 {
   struct hurd_sigstate **location =
@@ -185,7 +189,7 @@ _hurd_critical_section_lock (void)
   return ss;
 }
 
-_EXTERN_INLINE void
+_HURD_SIGNAL_H_EXTERN_INLINE void
 _hurd_critical_section_unlock (void *our_lock)
 {
   if (our_lock == NULL)
diff --git a/hurd/hurd/threadvar.h b/hurd/hurd/threadvar.h
index 55cb5af3e8..34820273fa 100644
--- a/hurd/hurd/threadvar.h
+++ b/hurd/hurd/threadvar.h
@@ -1,5 +1,5 @@
 /* Internal per-thread variables for the Hurd.
-   Copyright (C) 1994, 95, 97, 98 Free Software Foundation, Inc.
+   Copyright (C) 1994, 95, 97, 98, 99 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
@@ -66,14 +66,14 @@ enum __hurd_threadvar_index
   };
 
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+#ifndef _HURD_THREADVAR_H_EXTERN_INLINE
+#define _HURD_THREADVAR_H_EXTERN_INLINE extern __inline
 #endif
 
 /* Return the location of the value for the per-thread variable with index
    INDEX used by the thread whose stack pointer is SP.  */
 
-_EXTERN_INLINE unsigned long int *
+_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
 __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index,
 				   void *__sp)
 {
@@ -97,7 +97,7 @@ __hurd_threadvar_location (enum __hurd_threadvar_index __index)
 	the same stack frame by different threads.  */
      __attribute__ ((__const__));
 
-_EXTERN_INLINE unsigned long int *
+_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int *
 __hurd_threadvar_location (enum __hurd_threadvar_index __index)
 {
   return __hurd_threadvar_location_from_sp (__index,
@@ -106,7 +106,7 @@ __hurd_threadvar_location (enum __hurd_threadvar_index __index)
 
 /* Return the current thread's location for `errno'.
    The syntax of this function allows redeclarations like `int errno'.  */
-_EXTERN_INLINE int *
+_HURD_THREADVAR_H_EXTERN_INLINE int *
 __hurd_errno_location (void)
 {
   return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO);
diff --git a/hurd/hurd/userlink.h b/hurd/hurd/userlink.h
index 95efb89326..1ba8259ff5 100644
--- a/hurd/hurd/userlink.h
+++ b/hurd/hurd/userlink.h
@@ -1,5 +1,5 @@
 /* Support for chains recording users of a resource; `struct hurd_userlink'.
-   Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1997, 1999 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
@@ -70,14 +70,14 @@ struct hurd_userlink
   };
 
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+#ifndef _HURD_USERLINK_H_EXTERN_INLINE
+#define _HURD_USERLINK_H_EXTERN_INLINE extern __inline
 #endif
 
 
 /* Attach LINK to the chain of users at *CHAINP.  */
 
-_EXTERN_INLINE void
+_HURD_USERLINK_H_EXTERN_INLINE void
 _hurd_userlink_link (struct hurd_userlink **chainp,
 		     struct hurd_userlink *link)
 {
@@ -102,7 +102,7 @@ _hurd_userlink_link (struct hurd_userlink **chainp,
 /* Detach LINK from its chain.  Returns nonzero iff this was the
    last user of the resource and it should be deallocated.  */
 
-_EXTERN_INLINE int
+_HURD_USERLINK_H_EXTERN_INLINE int
 _hurd_userlink_unlink (struct hurd_userlink *link)
 {
   /* We should deallocate the resource used if this chain has been detached
@@ -132,7 +132,7 @@ _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_INLINE int
+_HURD_USERLINK_H_EXTERN_INLINE int
 _hurd_userlink_clear (struct hurd_userlink **chainp)
 {
   if (*chainp == NULL)
diff --git a/hurd/hurdinline.c b/hurd/hurdinline.c
deleted file mode 100644
index ed55ed6300..0000000000
--- a/hurd/hurdinline.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Include these first to avoid defining their inline functions.  */
-#include <lock-intern.h>
-#include <signal.h>
-
-#undef _EXTERN_INLINE
-#define _EXTERN_INLINE /* Define the real function. */
-
-#include "hurd.h"
-#include "hurd/fd.h"
-#include "hurd/signal.h"
-#include "hurd/userlink.h"
-#include "hurd/threadvar.h"
-#include "hurd/port.h"