commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hurd-l4/libl4 ChangeLog Makefile.am README l4.h...


From: Marcus Brinkmann
Subject: hurd-l4/libl4 ChangeLog Makefile.am README l4.h...
Date: Thu, 18 Sep 2003 11:47:00 -0400

CVSROOT:        /cvsroot/hurd
Module name:    hurd-l4
Branch:         
Changes by:     Marcus Brinkmann <address@hidden>       03/09/18 11:46:58

Modified files:
        libl4          : ChangeLog Makefile.am README l4.h 
        libl4/ia32/l4/bits: math.h space.h stubs-init.h syscall.h 
                            vregs.h 
        libl4/l4       : ipc.h kip.h math.h misc.h schedule.h space.h 
                         syscall.h thread.h 
Removed files:
        libl4          : globals.c ipc.c kip.c l4.c math.c misc.c 
                         schedule.c space.c stubs-init.c stubs.c 
                         syscall.c thread.c vregs.c 

Log message:
        2003-09-18  Marcus Brinkmann  <address@hidden>
        
        * l4/kip.h (l4_api_version): Replace with always inlined static
        inline function.
        * l4/thread.h (_L4_EXTERN_INLINE): Do not define.  Replace all
        uses of it with static inline, and mark these functions with
        attribute __always_inline__.
        * l4/ipc.h (_L4_EXTERN_INLINE): Likewise.
        * l4/math.h (_L4_EXTERN_INLINE): Likewise.
        * l4/misc.h (_L4_EXTERN_INLINE): Likewise.
        * l4/schedule.h (_L4_EXTERN_INLINE): Likewise.
        * l4/space.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/math.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/space.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/stubs-init.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/syscall.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/vregs.h (_L4_EXTERN_INLINE): Likewise.
        * l4/kip.h (_L4_EXTERN_INLINE): Likewise.
        * l4.h (_L4_EXTERN_INLINE): Likewise.
        * ia32/l4/bits/vregs.h (__l4_utcb): Mark with attributes
        always_inline and const.
        * globals.c, ipc.c, kip.c, l4.c, math.c, misc.c, schedule.c,
        space.c, stubs-init.c, stubs.c, syscall.c, thread.c, vregs.c:
        Files removed.
        * Makefile.am (lib_LIBRARIES): Variable removed.
        (libl4_a_SOURCES): Likewise.
        (libl4_a_CFLAGS): Likewise.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ChangeLog.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/Makefile.am.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/README.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/math.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/space.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/stubs-init.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/syscall.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/vregs.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/ipc.h.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/kip.h.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/math.h.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/misc.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/schedule.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/space.h.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/syscall.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/thread.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: hurd-l4/libl4/ChangeLog
diff -u hurd-l4/libl4/ChangeLog:1.9 hurd-l4/libl4/ChangeLog:1.10
--- hurd-l4/libl4/ChangeLog:1.9 Thu Sep 18 10:00:10 2003
+++ hurd-l4/libl4/ChangeLog     Thu Sep 18 11:46:58 2003
@@ -1,4 +1,32 @@
-2003-09-18  Marcus Brinkmann  <address@hidden>
+2003-09-18  Marcus Brinkmann  <address@hidden>
+
+       * l4/kip.h (l4_api_version): Replace with always inlined static
+       inline function.
+       * l4/thread.h (_L4_EXTERN_INLINE): Do not define.  Replace all
+       uses of it with static inline, and mark these functions with
+       attribute __always_inline__.
+       * l4/ipc.h (_L4_EXTERN_INLINE): Likewise.
+       * l4/math.h (_L4_EXTERN_INLINE): Likewise.
+       * l4/misc.h (_L4_EXTERN_INLINE): Likewise.
+       * l4/schedule.h (_L4_EXTERN_INLINE): Likewise.
+       * l4/space.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/math.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/space.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/stubs-init.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/syscall.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/vregs.h (_L4_EXTERN_INLINE): Likewise.
+       * l4/kip.h (_L4_EXTERN_INLINE): Likewise.
+       * l4.h (_L4_EXTERN_INLINE): Likewise.
+       * ia32/l4/bits/vregs.h (__l4_utcb): Mark with attributes
+       always_inline and const.
+       * globals.c, ipc.c, kip.c, l4.c, math.c, misc.c, schedule.c,
+       space.c, stubs-init.c, stubs.c, syscall.c, thread.c, vregs.c:
+       Files removed.
+       * Makefile.am (lib_LIBRARIES): Variable removed.
+       (libl4_a_SOURCES): Likewise.
+       (libl4_a_CFLAGS): Likewise.
+
+2003-09-18  Marcus Brinkmann  <address@hidden>
 
        * l4/kip.h (l4_get_kernel_interface): Rename to ...
        (l4_kip): ... this.  Also in all callers.
Index: hurd-l4/libl4/Makefile.am
diff -u hurd-l4/libl4/Makefile.am:1.1 hurd-l4/libl4/Makefile.am:1.2
--- hurd-l4/libl4/Makefile.am:1.1       Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/Makefile.am   Thu Sep 18 11:46:58 2003
@@ -23,19 +23,8 @@
 endif
 SUBDIRS =  $(ARCH_SUBDIR)
 
-lib_LIBRARIES = libl4.a
-
 include_HEADERS = l4.h
 nobase_include_HEADERS = l4/types.h l4/math.h l4/globals.h             \
        l4/vregs.h l4/stubs.h l4/stubs-init.h l4/syscall.h              \
        l4/kip.h l4/thread.h l4/schedule.h l4/space.h                   \
        l4/ipc.h l4/misc.h
-
-libl4_a_SOURCES = l4.h l4/types.h l4/math.h l4/globals.h               \
-       l4/vregs.h l4/stubs.h l4/stubs-init.h l4/syscall.h              \
-       l4/kip.h l4/thread.h l4/schedule.h l4/space.h                   \
-       l4/ipc.h l4/misc.h                                              \
-       math.c l4.c globals.c vregs.c stubs.c stubs-init.c syscall.c    \
-       kip.c thread.c schedule.c space.c ipc.c misc.c
-
-libl4_a_CFLAGS = -I$(srcdir)/$(ARCH_SUBDIR) -I$(srcdir) $(AM_CFLAGS)
Index: hurd-l4/libl4/README
diff -u hurd-l4/libl4/README:1.1 hurd-l4/libl4/README:1.2
--- hurd-l4/libl4/README:1.1    Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/README        Thu Sep 18 11:46:58 2003
@@ -1,7 +1,7 @@
 GNU libl4
 =========
 
-A user-space library for L4.
+A user-space "library" for L4.
 
 
 Why use this user space library for L4 and not the official one?
@@ -24,7 +24,7 @@
 user-defined functions on top of the official interface might use
 structure types as return types of functions.  However, there are two
 calling conventions in use for that, one compatible to PCC which
-passes the srtuct on the stack, and one more efficient that uses
+passes the struct on the stack, and one more efficient that uses
 registers for small structures.  Unfortunately, the less efficient one
 is the default.  This makes these data types less optimal for use in
 C programs.
@@ -33,7 +33,7 @@
 lead to code that can be simpler to understand and sometimes even more
 efficient.  For example, gcc 3.2 supports more than 10 parameters in
 asm bindings, and named asm operands.  The official libl4 supports
-older versions of gcc, too, and can not make use of this feature.
+older versions of gcc, too, and does not make use of this feature.
 
 * Complete backward compatibility.  This library is supposed to
 provide, in addition to the new interface, the same interface as the
@@ -47,28 +47,28 @@
 -------------
 
 Normally, you can just include <l4.h> or one of the more specific
-header files <l4/*.h> and use the data types and functions.  Most
-functions are inlined, and linking is not necessary with optimization.
+header files <l4/*.h> and use the data types and functions.  All
+functions are always inlined, irregardless of optimization level.
 
 
 Why is linking with libl4 not necessary?
 ----------------------------------------
 
+All functions are inlined.  There is no library you can use for
+linking.
+
 The dynamic linker will fix up the system calls to point directly to
 the system call gate in the kernel interface page.  It will also
-provide its own versions of the global variables (from
-<l4/globals.h>).  Thus linking is not necessary.
-
-FIXME: Static linking.
+provide its own versions of the global variables (from <l4/globals.h>).
 
 
 What if I am not using the dynamic linker?
 ------------------------------------------
 
 If you are not using the dynamic linker, you can either link to libl4,
-or include <l4/globals.h> somewhere in your program.  You also have to
-run l4_init () manually to initialize the global variables and fixup
-the system calls.
+or include <l4/globals.h> somewhere (but only once!) in your program.
+You also have to run l4_init() manually (defined in <l4.h>) to
+initialize the global variables and fixup the system call stubs.
 
 
 What compiler do I need?
@@ -80,7 +80,7 @@
 
 * Support for a variety of GCC extensions, like:
 ** Inline assembler, including named input and output arguments.
-** Attributes like const, pure, and type.
+** Attributes like always_inline, const, pure, and type.
 ** Builtin functions like __builtin_const_p.
 
 * Internal representation of bit-fields that tightly packs all
Index: hurd-l4/libl4/ia32/l4/bits/math.h
diff -u hurd-l4/libl4/ia32/l4/bits/math.h:1.2 
hurd-l4/libl4/ia32/l4/bits/math.h:1.3
--- hurd-l4/libl4/ia32/l4/bits/math.h:1.2       Wed Sep 17 10:22:23 2003
+++ hurd-l4/libl4/ia32/l4/bits/math.h   Thu Sep 18 11:46:58 2003
@@ -1,18 +1,32 @@
+/* math.h - Math support routines for ia32.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_MATH_H
 # error "Never use <l4/bits/math.h> directly; include <l4/math.h> instead."
 #endif
 
-
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
-
-_L4_EXTERN_INLINE l4_word_t
-__l4_msb_ (l4_word_t data) __attribute__((__const__));
-
+
 /* Calculate the MSB set in DATA.  DATA is not 0.  */
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__, __const__))
 __l4_msb (l4_word_t data)
 {
   l4_word_t msb;
@@ -26,7 +40,8 @@
 
 
 /* Calculate the LSB set in DATA.  DATA is not 0.  */
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__, __const__))
 __l4_lsb (l4_word_t data)
 {
   l4_word_t lsb;
Index: hurd-l4/libl4/ia32/l4/bits/space.h
diff -u hurd-l4/libl4/ia32/l4/bits/space.h:1.1 
hurd-l4/libl4/ia32/l4/bits/space.h:1.2
--- hurd-l4/libl4/ia32/l4/bits/space.h:1.1      Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/ia32/l4/bits/space.h  Thu Sep 18 11:46:58 2003
@@ -1,11 +1,28 @@
+/* space.h - Architecture dependent part of public interface to L4 threads.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_SPACE_H
 # error "Never use <l4/bits/space.h> directly; include <l4/space.h> instead."
 #endif
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
 
 /* IO Fpages.  */
 
@@ -20,7 +37,9 @@
       _L4_BITFIELD_32_64 (base, 16, 48));
  })) l4_io_fpage_t;
   
-_L4_EXTERN_INLINE l4_fpage_t
+
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_io_fpage (l4_word_t base_address, int size)
 {
   l4_fpage_t fpage;
@@ -36,7 +55,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_io_fpage_log2 (l4_word_t base_address, int log2_size)
 {
   l4_fpage_t fpage;
@@ -56,8 +76,10 @@
 #define L4_LARGE_SPACE         0
 #define L4_SMALL_SPACE         (1 << 31)
 
+
 /* LOC and SIZE are in MB.  */
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_small_space (l4_word_t loc, l4_word_t size)
 {
   l4_word_t small_space = loc >> 1;    /* Divide by 2 (MB).  */
Index: hurd-l4/libl4/ia32/l4/bits/stubs-init.h
diff -u hurd-l4/libl4/ia32/l4/bits/stubs-init.h:1.2 
hurd-l4/libl4/ia32/l4/bits/stubs-init.h:1.3
--- hurd-l4/libl4/ia32/l4/bits/stubs-init.h:1.2 Thu Sep 18 10:00:10 2003
+++ hurd-l4/libl4/ia32/l4/bits/stubs-init.h     Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* stubs-init.h - Initialize system stubs in an architecture dependent way.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_STUBS_INIT_H
 # error "Never use <l4/bits/stubs-init.h> directly; include <l4/stubs-init.h> 
instead."
 #endif
@@ -7,8 +28,10 @@
   __l4_ ## name = (void (*) (void))                                    \
     (((l4_word_t) l4_kip ()) + l4_kip ()->name)
 
+
 /* Initialize the syscall stubs.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_init_stubs (void)
 {
   __L4_SETUP_SYSCALL (exchange_registers);
Index: hurd-l4/libl4/ia32/l4/bits/syscall.h
diff -u hurd-l4/libl4/ia32/l4/bits/syscall.h:1.1 
hurd-l4/libl4/ia32/l4/bits/syscall.h:1.2
--- hurd-l4/libl4/ia32/l4/bits/syscall.h:1.1    Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/ia32/l4/bits/syscall.h        Thu Sep 18 11:46:58 2003
@@ -1,19 +1,34 @@
+/* syscall.h - Public interface to the L4 system calls for ia32.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_SYSCALL_H
 # error "Never use <l4/bits/syscall.h> directly; include <l4/syscall.h> 
instead."
 #endif
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
-
+
 /* Return the pointer to the kernel interface page, the API version,
    the API flags, and the kernel ID.  */
-_L4_EXTERN_INLINE l4_kip_t
-l4_kernel_interface (l4_api_version_t *api_version, l4_api_flags_t *api_flags,
-                    l4_kernel_id_t *kernel_id) __attribute__ ((__pure__));
 
-_L4_EXTERN_INLINE l4_kip_t
+static inline l4_kip_t
+__attribute__((__always_inline__, __const__))
 l4_kernel_interface (l4_api_version_t *api_version, l4_api_flags_t *api_flags,
                     l4_kernel_id_t *kernel_id)
 {
@@ -31,7 +46,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_exchange_registers (l4_thread_id_t *dest, l4_word_t *control,
                       l4_word_t *sp, l4_word_t *ip, l4_word_t *flags,
                       l4_word_t *user_defined_handle, l4_thread_id_t *pager)
@@ -77,7 +93,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_thread_control (l4_thread_id_t dest, l4_thread_id_t space,
                   l4_thread_id_t scheduler, l4_thread_id_t pager,
                   void *utcb_loc)
@@ -98,7 +115,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_clock_t
+static inline l4_clock_t
+__attribute__((__always_inline__))
 l4_system_clock (void)
 {
   l4_clock_t time;
@@ -112,7 +130,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_thread_switch (l4_thread_id_t dest)
 {
   __asm__ __volatile__ ("call *__l4_thread_switch"
@@ -121,7 +140,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_schedule (l4_thread_id_t dest, l4_word_t time_control,
             l4_word_t proc_control, l4_word_t prio,
             l4_word_t preempt_control, l4_word_t *old_time_control)
@@ -142,7 +162,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_unmap (l4_word_t control)
 {
   l4_word_t mr0;
@@ -161,7 +182,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_space_control (l4_thread_id_t space, l4_word_t control,
                  l4_fpage_t kip_area, l4_fpage_t utcb_area,
                  l4_thread_id_t redirector, l4_word_t *old_control)
@@ -182,7 +204,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_ipc (l4_thread_id_t to, l4_thread_id_t from_spec,
        l4_word_t timeouts, l4_thread_id_t *from)
 {
@@ -216,7 +239,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_lipc (l4_thread_id_t to, l4_thread_id_t from_spec,
         l4_word_t timeouts, l4_thread_id_t *from)
 {
@@ -250,7 +274,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_processor_control (l4_word_t proc, l4_word_t control, l4_word_t int_freq,
                      l4_word_t ext_freq, l4_word_t voltage)
 {
@@ -269,7 +294,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_memory_control (l4_word_t control, l4_word_t *attributes)
 {
   l4_word_t tag;
Index: hurd-l4/libl4/ia32/l4/bits/vregs.h
diff -u hurd-l4/libl4/ia32/l4/bits/vregs.h:1.1 
hurd-l4/libl4/ia32/l4/bits/vregs.h:1.2
--- hurd-l4/libl4/ia32/l4/bits/vregs.h:1.1      Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/ia32/l4/bits/vregs.h  Thu Sep 18 11:46:58 2003
@@ -1,13 +1,32 @@
+/* vregs.h - L4 virtual registers for ia32.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_VREGS_H
 # error "Never use <l4/bits/vregs.h> directly; include <l4/vregs.h> instead."
 #endif
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
+
 /* Retrieve the UTCB address.  */
 static inline l4_word_t *
+__attribute__((__always_inline__, __const__))
 __l4_utcb (void)
 {
   l4_word_t *utcb;
@@ -37,7 +56,8 @@
 
 
 /* Get the local thread ID.  */
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_my_local_id (void)
 {
   l4_thread_id_t id;
@@ -50,7 +70,8 @@
 
 
 /* Get the global thread ID.  */
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_my_global_id (void)
 {
   l4_thread_id_t id;
@@ -61,7 +82,8 @@
 }
 
 
-_L4_EXTERN_INLINE int
+static inline int
+__attribute__((__always_inline__))
 l4_processor_no (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -70,7 +92,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_user_defined_handle (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -79,7 +102,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_user_defined_handle (l4_word_t data)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -88,7 +112,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_pager (void)
 {
   l4_thread_id_t thread;
@@ -99,7 +124,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_pager (l4_thread_id_t thread)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -108,7 +134,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_exception_handler (void)
 {
   l4_thread_id_t thread;
@@ -119,7 +146,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_exception_handler (l4_thread_id_t thread)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -128,7 +156,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_clr_cop_flag (l4_word_t n)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -142,7 +171,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_cop_flag (l4_word_t n)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -156,7 +186,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_disable_preemption_fault_exception (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -173,7 +204,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_enable_preemption_fault_exception (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -190,7 +222,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_disable_preemption (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -207,7 +240,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_enable_preemption (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -224,7 +258,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_preemption_pending (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -241,7 +276,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_error_code (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -250,7 +286,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_xfer_timeout (void)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -259,7 +296,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_xfer_timeout (l4_word_t time)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -268,7 +306,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_intended_receiver (void)
 {
   l4_thread_id_t thread;
@@ -279,7 +318,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_actual_sender (void)
 {
   l4_thread_id_t thread;
@@ -290,7 +330,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_virtual_sender (l4_thread_id_t thread)
 {
   l4_word_t *utcb = __l4_utcb ();
@@ -306,7 +347,8 @@
    mapped.  */
 
 /* Set message register NR to DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_load_mr (int nr, l4_word_t data)
 {
   l4_word_t *mr = __l4_utcb () + __L4_UTCB_MR0;
@@ -317,7 +359,8 @@
 
 /* Set COUNT message registers beginning from START to the values in
    DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_load_mrs (int start, int count, l4_word_t *data)
 {
   l4_word_t *mr = __l4_utcb () + __L4_UTCB_MR0 + start;
@@ -328,7 +371,8 @@
 
 
 /* Store message register NR in DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_store_mr (int nr, l4_word_t *data)
 {
   l4_word_t *mr = __l4_utcb () + __L4_UTCB_MR0;
@@ -338,7 +382,8 @@
 
 
 /* Store COUNT message registers beginning from START in DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_store_mrs (int start, int count, l4_word_t *data)
 {
   l4_word_t *mr = __l4_utcb () + __L4_UTCB_MR0 + start;
@@ -352,7 +397,8 @@
    downward.  */
 
 /* Set message register NR to DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_load_br (int nr, l4_word_t data)
 {
   l4_word_t *br = __l4_utcb () + __L4_UTCB_BR0;
@@ -363,7 +409,8 @@
 
 /* Set COUNT message registers beginning from START to the values in
    DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_load_brs (int start, int count, l4_word_t *data)
 {
   l4_word_t *br = __l4_utcb () + __L4_UTCB_BR0 - start;
@@ -374,7 +421,8 @@
 
 
 /* Store message register NR in DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_store_br (int nr, l4_word_t *data)
 {
   l4_word_t *br = __l4_utcb () + __L4_UTCB_BR0;
@@ -384,7 +432,8 @@
 
 
 /* Store COUNT message registers beginning from START in DATA.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_store_brs (int start, int count, l4_word_t *data)
 {
   l4_word_t *br = __l4_utcb () + __L4_UTCB_BR0 - start;
Index: hurd-l4/libl4/l4.h
diff -u hurd-l4/libl4/l4.h:1.1 hurd-l4/libl4/l4.h:1.2
--- hurd-l4/libl4/l4.h:1.1      Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4.h  Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* l4.h - Public interface to L4.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_H
 #define _L4_H  1
 
@@ -10,12 +31,10 @@
 #include <l4/misc.h>
 #include <l4/kip.h>
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
+
 /* Initialize the global data.  */
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_init (void)
 {
   l4_api_version_t version;
Index: hurd-l4/libl4/l4/ipc.h
diff -u hurd-l4/libl4/l4/ipc.h:1.3 hurd-l4/libl4/l4/ipc.h:1.4
--- hurd-l4/libl4/l4/ipc.h:1.3  Mon Sep  8 13:30:51 2003
+++ hurd-l4/libl4/l4/ipc.h      Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* ipc.h - Public interface to the L4 IPC primitive.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_IPC_H
 #define _L4_IPC_H      1
 
@@ -11,47 +32,49 @@
 
 #define l4_niltag      ((l4_msg_tag_t) { .raw = 0 })
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_msg_tag_equal (l4_msg_tag_t tag1, l4_msg_tag_t tag2)
 {
   return tag1.raw == tag2.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_msg_tag_not_equal (l4_msg_tag_t tag1, l4_msg_tag_t tag2)
 {
   return tag1.raw != tag2.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_label (l4_msg_tag_t tag)
 {
   return tag.label;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_untyped_words (l4_msg_tag_t tag)
 {
   return tag.untyped;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_typed_words (l4_msg_tag_t tag)
 {
   return tag.typed;
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_msg_tag_add_label (l4_msg_tag_t tag, l4_word_t label)
 {
   l4_msg_tag_t new_tag = tag;
@@ -60,14 +83,16 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_tag_add_label_to (l4_msg_tag_t *tag, l4_word_t label)
 {
   tag->label = label;
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_msg_tag (void)
 {
   l4_msg_tag_t tag;
@@ -75,7 +100,8 @@
   return tag;
 }
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_msg_tag (l4_msg_tag_t tag)
 {
   l4_load_mr (0, tag.raw);
@@ -101,7 +127,8 @@
 } l4_map_item_t;
 
 
-_L4_EXTERN_INLINE l4_map_item_t
+static inline l4_map_item_t
+__attribute__((__always_inline__))
 l4_map_item (l4_fpage_t fpage, l4_word_t send_base)
 {
   l4_map_item_t map_item;
@@ -114,7 +141,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_map_item (l4_map_item_t map_item)
 {
   return map_item._four == 4;
@@ -140,7 +168,8 @@
 } l4_grant_item_t;
 
 
-_L4_EXTERN_INLINE l4_grant_item_t
+static inline l4_grant_item_t
+__attribute__((__always_inline__))
 l4_grant_item (l4_fpage_t fpage, l4_word_t send_base)
 {
   l4_grant_item_t grant_item;
@@ -153,7 +182,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_grant_item (l4_grant_item_t grant_item)
 {
   return grant_item._five == 5;
@@ -190,7 +220,8 @@
   ((l4_cache_allocation_hint_t) { .cache_hint = 0 })
 
 
-_L4_EXTERN_INLINE l4_string_item_t
+static inline l4_string_item_t
+__attribute__((__always_inline__))
 l4_string_item (int length, void *address)
 {
   l4_string_item_t string_item;
@@ -205,28 +236,32 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_string_item (l4_string_item_t *string_item)
 {
   return string_item->_zero == 0;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_compound_string (l4_string_item_t *string_item)
 {
   return string_item->cont;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_substrings (l4_string_item_t *string_item)
 {
   return string_item->nr_substrings + 1;
 }
 
 
-_L4_EXTERN_INLINE void *
+static inline void *
+__attribute__((__always_inline__))
 l4_substring (l4_string_item_t *string_item, l4_word_t nr)
 {
   return (void *) string_item->string[nr];
@@ -235,7 +270,8 @@
 
 /* Append the string described by string item SOURCE to the string
    described by string item STRING_ITEM.  */
-_L4_EXTERN_INLINE l4_string_item_t *
+static inline l4_string_item_t *
+__attribute__((__always_inline__))
 l4_add_substring_address_to (l4_string_item_t *string_item,
                             l4_string_item_t *source)
 {
@@ -269,7 +305,8 @@
 
 /* Append the string described by string item SOURCE as a substring
    (of the same length) to the string item STRING_ITEM.  */
-_L4_EXTERN_INLINE l4_string_item_t *
+static inline l4_string_item_t *
+__attribute__((__always_inline__))
 l4_add_substring_to (l4_string_item_t *string_item, void *source)
 {
   l4_string_item_t *target = string_item;
@@ -287,7 +324,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_cache_allocation_hint_equal (l4_cache_allocation_hint_t hint1,
                                   l4_cache_allocation_hint_t hint2)
 {
@@ -295,7 +333,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_cache_allocation_hint_not_equal (l4_cache_allocation_hint_t hint1,
                                       l4_cache_allocation_hint_t hint2)
 {
@@ -303,7 +342,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_cache_allocation_hint_t
+static inline l4_cache_allocation_hint_t
+__attribute__((__always_inline__))
 l4_cache_allocation_hint (l4_string_item_t *string_item)
 {
   l4_cache_allocation_hint_t hint;
@@ -312,7 +352,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_string_item_t
+static inline l4_string_item_t
+__attribute__((__always_inline__))
 l4_add_cache_allocation_hint (l4_string_item_t string_item,
                              l4_cache_allocation_hint_t hint)
 {
@@ -321,7 +362,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_string_item_t *
+static inline l4_string_item_t *
+__attribute__((__always_inline__))
 l4_add_cache_allocation_hint_to (l4_string_item_t *string_item,
                                 l4_cache_allocation_hint_t hint)
 {
@@ -352,7 +394,8 @@
 } l4_msg_buffer_t;
 
 
-_L4_EXTERN_INLINE l4_acceptor_t
+static inline l4_acceptor_t
+__attribute__((__always_inline__))
 l4_map_grant_items (l4_fpage_t rcv_window)
 {
   l4_acceptor_t acceptor;
@@ -363,7 +406,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_acceptor_t
+static inline l4_acceptor_t
+__attribute__((__always_inline__))
 l4_add_acceptor (l4_acceptor_t acceptor1, l4_acceptor_t acceptor2)
 {
   acceptor1.string_items |= acceptor2.string_items;
@@ -373,7 +417,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_acceptor_t *
+static inline l4_acceptor_t *
+__attribute__((__always_inline__))
 l4_add_acceptor_to (l4_acceptor_t *acceptor1, l4_acceptor_t acceptor2)
 {
   acceptor1->string_items |= acceptor2.string_items;
@@ -383,7 +428,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_acceptor_t
+static inline l4_acceptor_t
+__attribute__((__always_inline__))
 l4_remove_acceptor (l4_acceptor_t acceptor1, l4_acceptor_t acceptor2)
 {
   acceptor1.string_items &= ~acceptor2.string_items;
@@ -393,7 +439,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_acceptor_t *
+static inline l4_acceptor_t *
+__attribute__((__always_inline__))
 l4_remove_acceptor_from (l4_acceptor_t *acceptor1, l4_acceptor_t acceptor2)
 {
   acceptor1->string_items &= ~acceptor2.string_items;
@@ -403,21 +450,24 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_has_string_items (l4_acceptor_t acceptor)
 {
   return acceptor.string_items;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_has_map_grant_items (l4_acceptor_t acceptor)
 {
   return acceptor.rcv_window;
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_rcv_window (l4_acceptor_t acceptor)
 {
   l4_fpage_t fpage;
@@ -427,14 +477,16 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_accept (l4_acceptor_t acceptor)
 {
   l4_load_br (0, acceptor.raw);
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_accept_strings (l4_acceptor_t acceptor, l4_msg_buffer_t *msg_buffer)
 {
   l4_string_item_t *string_item = msg_buffer->string_item;
@@ -454,7 +506,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_acceptor_t
+static inline l4_acceptor_t
+__attribute__((__always_inline__))
 l4_accepted (void)
 {
   l4_acceptor_t acceptor;
@@ -463,14 +516,16 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_buffer_clear (l4_msg_buffer_t *msg_buffer)
 {
   msg_buffer->br[0] = 0;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_buffer_append_simple_rcv_string (l4_msg_buffer_t *msg_buffer,
                                        l4_string_item_t string_item)
 {
@@ -493,7 +548,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_buffer_append_rcv_string (l4_msg_buffer_t *msg_buffer,
                                 l4_string_item_t *string_item)
 {
@@ -539,7 +595,8 @@
 } l4_msg_t;
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put (l4_msg_t *msg, l4_word_t label, int untyped_nr, l4_word_t *untyped,
            int typed_nr, l4_word_t *typed)
 {
@@ -561,7 +618,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_get (l4_msg_t *msg, l4_word_t *untyped, l4_word_t *typed)
 {
   l4_word_t *mr = msg->mr;
@@ -576,42 +634,48 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_msg_msg_tag (l4_msg_t *msg)
 {
   return msg->tag;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_msg_msg_tag (l4_msg_t *msg, l4_msg_tag_t tag)
 {
   msg->tag = tag;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_msg_label (l4_msg_t *msg)
 {
   return msg->tag.label;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_msg_label (l4_msg_t *msg, l4_word_t label)
 {
   msg->tag.label = label;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_load (l4_msg_t *msg)
 {
   l4_load_mrs (0, 1 + msg->tag.untyped + msg->tag.typed, msg->mr);
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_store (l4_msg_tag_t tag, l4_msg_t *msg)
 {
   msg->tag = tag;
@@ -619,14 +683,16 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_clear (l4_msg_t *msg)
 {
   msg->tag = l4_niltag;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_append_word (l4_msg_t *msg, l4_word_t data)
 {
   l4_word_t new_untyped_nr = ++msg->tag.untyped;
@@ -647,7 +713,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_append_map_item (l4_msg_t *msg, l4_map_item_t map_item)
 {
   /* The "not last" bit is ignored for sending.  */
@@ -658,7 +725,8 @@
 }
     
   
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_append_grant_item (l4_msg_t *msg, l4_grant_item_t grant_item)
 {
   /* The "not last" bit is ignored for sending.  */
@@ -669,7 +737,8 @@
 }
     
   
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_append_simple_string_item (l4_msg_t *msg, l4_string_item_t string_item)
 {
   /* The "not last" bit is ignored for sending.  */
@@ -682,7 +751,8 @@
 }
     
   
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_append_string_item (l4_msg_t *msg, l4_string_item_t *string_item)
 {
   /* The "not last" bit is ignored for sending.  */
@@ -706,13 +776,15 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put_word (l4_msg_t *msg, l4_word_t nr, l4_word_t data)
 {
   msg->mr[1 + nr] = data;
 }
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put_map_item (l4_msg_t *msg, l4_word_t nr, l4_map_item_t map_item)
 {
   l4_word_t pos = 1 + msg->tag.untyped + nr;
@@ -721,7 +793,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put_grant_item (l4_msg_t *msg, l4_word_t nr, l4_grant_item_t grant_item)
 {
   l4_word_t pos = 1 + msg->tag.untyped + nr;
@@ -730,7 +803,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put_simple_string_item (l4_msg_t *msg, l4_word_t nr,
                               l4_string_item_t string_item)
 {
@@ -742,7 +816,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_put_string_item (l4_msg_t *msg, l4_word_t nr,
                        l4_string_item_t *string_item)
 {
@@ -764,21 +839,24 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_msg_word (l4_msg_t *msg, l4_word_t nr)
 {
   return msg->mr[1 + nr];
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_get_word (l4_msg_t *msg, l4_word_t nr, l4_word_t *data)
 {
   *data = l4_msg_word (msg, nr);
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_get_map_item (l4_msg_t *msg, l4_word_t nr, l4_map_item_t *map_item)
 {
   l4_word_t pos = 1 + msg->tag.untyped + nr;
@@ -787,7 +865,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_get_grant_item (l4_msg_t *msg, l4_word_t nr,
                       l4_grant_item_t *grant_item)
 {
@@ -797,7 +876,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_msg_get_string_item (l4_msg_t *msg, l4_word_t nr,
                        l4_string_item_t *string_item)
 {
@@ -821,14 +901,16 @@
 
 /* l4_ipc convenience interface.  */
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_timeouts (l4_time_t send_timeout, l4_time_t receive_timeout)
 {
   return (send_timeout.raw << 16) | receive_timeout.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_call_timeouts (l4_thread_id_t dest, l4_time_t send_timeout,
                  l4_time_t receive_timeout)
 {
@@ -838,14 +920,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_call (l4_thread_id_t dest)
 {
   return l4_call_timeouts (dest, l4_never, l4_never);
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_send_timeout (l4_thread_id_t dest, l4_time_t send_timeout)
 {
   l4_thread_id_t dummy;
@@ -854,21 +938,24 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_send (l4_thread_id_t dest)
 {
   return l4_send_timeout (dest, l4_never);
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_reply (l4_thread_id_t dest)
 {
   return l4_send_timeout (dest, l4_zero_time);
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_receive_timeout (l4_thread_id_t from, l4_time_t receive_timeout)
 {
   l4_thread_id_t dummy;
@@ -877,14 +964,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_receive (l4_thread_id_t from)
 {
   return l4_receive_timeout (from, l4_never);
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_wait_timeout (l4_time_t receive_timeout, l4_thread_id_t *from)
 {
   return l4_ipc (l4_nilthread, l4_anythread,
@@ -892,14 +981,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_wait (l4_thread_id_t *from)
 {
   return l4_wait_timeout (l4_never, from);
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_reply_wait_timeout (l4_thread_id_t dest, l4_time_t receive_timeout,
                       l4_thread_id_t *from)
 {
@@ -908,21 +999,24 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_reply_wait (l4_thread_id_t dest, l4_thread_id_t *from)
 {
   return l4_reply_wait_timeout (dest, l4_never, from);
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_sleep (l4_time_t time)
 {
   l4_set_msg_tag (l4_receive_timeout (l4_my_local_id (), time));
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_lcall (l4_thread_id_t dest)
 {
   l4_thread_id_t dummy;
@@ -930,7 +1024,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_msg_tag_t
+static inline l4_msg_tag_t
+__attribute__((__always_inline__))
 l4_lreply_wait (l4_thread_id_t dest, l4_thread_id_t *from)
 {
   return l4_lipc (dest, dest, l4_timeouts (l4_time_period (0), l4_never),
@@ -938,42 +1033,48 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_ipc_succeeded (l4_msg_tag_t tag)
 {
   return !tag.error;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_ipc_failed (l4_msg_tag_t tag)
 {
   return tag.error;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_ipc_propagated (l4_msg_tag_t tag)
 {
   return tag.propagated;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_ipc_redirected (l4_msg_tag_t tag)
 {
   return tag.redirected;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_ipc_xcpu (l4_msg_tag_t tag)
 {
   return tag.cross_cpu;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_propagation (l4_msg_tag_t *tag)
 {
   tag->propagated = 1;
Index: hurd-l4/libl4/l4/kip.h
diff -u hurd-l4/libl4/l4/kip.h:1.4 hurd-l4/libl4/l4/kip.h:1.5
--- hurd-l4/libl4/l4/kip.h:1.4  Thu Sep 18 10:01:41 2003
+++ hurd-l4/libl4/l4/kip.h      Thu Sep 18 11:46:58 2003
@@ -1,4 +1,4 @@
-/* kip.h - Public interface for the L4 kernel interface page.
+/* kip.h - Public interface to the L4 kernel interface page.
    Copyright (C) 2003 Free Software Foundation, Inc.
    Written by Marcus Brinkmann <address@hidden>.
 
@@ -321,29 +321,33 @@
 
 
 extern l4_kip_t __l4_kip;
-#define l4_kip()  (__l4_kip + 0)  /* Not an lvalue.  */
 
-
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
+static inline l4_kip_t
+__attribute__((__always_inline__))
+l4_kip (void)
+{
+  return __l4_kip;
+}
 
 
-_L4_EXTERN_INLINE l4_api_version_t
+static inline l4_api_version_t
+__attribute__((__always_inline__))
 l4_api_version (void)
 {
   return l4_kip ()->api_version;
 }
 
 
-_L4_EXTERN_INLINE l4_api_flags_t
+static inline l4_api_flags_t
+__attribute__((__always_inline__))
 l4_api_flags (void)
 {
   return l4_kip ()->api_flags;
 }
 
 
-_L4_EXTERN_INLINE l4_kernel_id_t
+static inline l4_kernel_id_t
+__attribute__((__always_inline__))
 l4_kernel_id (void)
 {
   l4_kern_desc_t kern;
@@ -354,7 +358,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_kernel_gen_date (l4_word_t *year, l4_word_t *month, l4_word_t *day)
 {
   l4_kern_desc_t kern;
@@ -371,7 +376,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_kernel_version (l4_word_t *ver, l4_word_t *subver, l4_word_t *subsubver)
 {
   l4_kern_desc_t kern;
@@ -388,7 +394,8 @@
 }
 
 
-_L4_EXTERN_INLINE char *
+static inline char *
+__attribute__((__always_inline__))
 l4_kernel_supplier (void)
 {
   l4_kern_desc_t kern;
@@ -400,14 +407,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_num_processors (void)
 {
   return l4_kip ()->processor_info.processors + 1;
 }
 
 
-_L4_EXTERN_INLINE l4_proc_desc_t
+static inline l4_proc_desc_t
+__attribute__((__always_inline__))
 l4_proc_desc (l4_word_t num)
 {
   if (num >= l4_num_processors ())
@@ -419,14 +428,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_proc_internal_freq (l4_proc_desc_t proc)
 {
   return proc->internal_freq;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_proc_external_freq (l4_proc_desc_t proc)
 {
   return proc->external_freq;
@@ -435,21 +446,19 @@
 
 #define L4_MIN_PAGE_SIZE_LOG2  10
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_page_size_mask (void)
 {
-  return l4_kip ()->page_info.page_size_mask
-    << L4_MIN_PAGE_SIZE_LOG2;
+  return l4_kip ()->page_info.page_size_mask << L4_MIN_PAGE_SIZE_LOG2;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t l4_min_page_size_log2 (void)
-     __attribute__((__const__));
-
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_min_page_size_log2 (void)
 {
-  page_size_mask = l4_kip ()->page_info.page_size_mask;
+  l4_word_t page_size_mask = l4_kip ()->page_info.page_size_mask;
   unsigned int page_size_log2 = L4_MIN_PAGE_SIZE_LOG2;
   
   /* There'd better be one bit set.  */
@@ -463,80 +472,88 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t l4_min_page_size_log2 (void)
-     __attribute__((__const__));
-
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_min_page_size (void)
 {
   return L4_WORD_C(1) << l4_min_page_size_log2 ();
 }
 
 
-_L4_EXTERN_INLINE l4_page_info_t
+static inline l4_page_info_t
+__attribute__((__always_inline__))
 l4_page_rights (void)
 {
   return l4_kip ()->page_info;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_thread_id_bits (void)
 {
   return l4_kip ()->thread_info.log2_max_thread;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_thread_user_base (void)
 {
   return l4_kip ()->thread_info.user_base;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_thread_system_base (void)
 {
   return l4_kip ()->thread_info.system_base;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_read_precision (void)
 {
   return l4_kip ()->clock_info.read_precision;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_schedule_precision (void)
 {
   return l4_kip ()->clock_info.schedule_precision;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_utcb_area_size_log2 (void)
 {
   return l4_kip ()->utcb_info.log2_min_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_utcb_area_size (void)
 {
   return 1 << l4_kip ()->utcb_info.log2_min_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_utcb_alignment_log2 (void)
 {
   return l4_kip ()->utcb_info.log2_align;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_utcb_size (void)
 {
   return l4_kip ()->utcb_info.size_mul
@@ -544,28 +561,32 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_kip_area_size_log2 (void)
 {
   return l4_kip ()->kip_area_info.log2_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_kip_area_size (void)
 {
   return 1 << l4_kip ()->kip_area_info.log2_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_boot_info (void)
 {
   return l4_kip ()->boot_info;
 }
 
 
-_L4_EXTERN_INLINE char *
+static inline char *
+__attribute__((__always_inline__))
 l4_kernel_version_string (void)
 {
   l4_kern_desc_t kern;
@@ -577,7 +598,8 @@
 }
 
 
-_L4_EXTERN_INLINE char *
+static inline char *
+__attribute__((__always_inline__))
 l4_feature (l4_word_t num)
 {
   char *feature = l4_kernel_version_string ();
@@ -596,14 +618,16 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_num_memory_desc (void)
 {
   return l4_kip ()->memory_info.nr;
 }
 
 
-_L4_EXTERN_INLINE l4_memory_desc_t
+static inline l4_memory_desc_t
+__attribute__((__always_inline__))
 l4_memory_desc (l4_word_t num)
 {
   l4_memory_desc_t mem;
@@ -618,28 +642,32 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_memory_desc_virtual (l4_memory_desc_t mem)
 {
   return mem->virtual;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_memory_desc_type (l4_memory_desc_t mem)
 {
   return (mem->subtype << 4) + mem->type;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_memory_desc_low (l4_memory_desc_t mem)
 {
   return mem->low << 10;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_memory_desc_high (l4_memory_desc_t mem)
 {
   return mem->high << 10;
Index: hurd-l4/libl4/l4/math.h
diff -u hurd-l4/libl4/l4/math.h:1.2 hurd-l4/libl4/l4/math.h:1.3
--- hurd-l4/libl4/l4/math.h:1.2 Wed Sep 17 10:22:23 2003
+++ hurd-l4/libl4/l4/math.h     Thu Sep 18 11:46:58 2003
@@ -1,24 +1,38 @@
+/* math.h - Public interface to L4 mathematical support functions.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_MATH_H
 #define _L4_MATH_H     1
 
 #include <l4/types.h>
 
-/* <l4/bits/math.h> defines __l4_msb_().  */
+/* <l4/bits/math.h> defines__l4_msb() and __l4_lsb().  */
 #include <l4/bits/math.h>
 
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
-
-_L4_EXTERN_INLINE l4_word_t
-__l4_msb (l4_word_t data) __attribute__((__const__));
-
 /* Return 0 if DATA is 0, or the bit number of the most significant
    bit set in DATA.  The least significant bit is 1, the most
    significant bit 32 resp. 64.  */
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_msb (l4_word_t data)
 {
   if (__builtin_constant_p (data))
@@ -57,7 +71,8 @@
 /* Return 0 if DATA is 0, or the bit number of the least significant
    bit set in DATA.  The least significant bit is 1, the most
    significant bit 32 resp. 64.  */
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_lsb (l4_word_t data)
 {
   if (__builtin_constant_p (data))
@@ -88,6 +103,5 @@
     }
   return data ? __l4_lsb (data) : 0;
 }
-
 
 #endif /* l4/math.h */
Index: hurd-l4/libl4/l4/misc.h
diff -u hurd-l4/libl4/l4/misc.h:1.1 hurd-l4/libl4/l4/misc.h:1.2
--- hurd-l4/libl4/l4/misc.h:1.1 Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/misc.h     Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* misc.h - Public interface to L4 miscellaneous functions.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_MISC_H
 #define _L4_MISC_H     1
 
@@ -6,16 +27,13 @@
 #include <l4/vregs.h>
 #include <l4/syscall.h>
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
 
 /* l4_memory_control convenience interface.  */
 
 #define L4_DEFAULT_MEMORY      0x0
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_page_attribute (l4_fpage_t fpage, l4_word_t attribute)
 {
   l4_set_rights (&fpage, 0);
@@ -24,7 +42,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_pages_attributes (l4_word_t nr, l4_fpage_t *fpages,
                         l4_word_t *attributes)
 {
Index: hurd-l4/libl4/l4/schedule.h
diff -u hurd-l4/libl4/l4/schedule.h:1.1 hurd-l4/libl4/l4/schedule.h:1.2
--- hurd-l4/libl4/l4/schedule.h:1.1     Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/schedule.h Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* schedule.h - Public interface to the L4 scheduler.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_SCHEDULE_H
 #define _L4_SCHEDULE_H 1
 
@@ -6,11 +27,6 @@
 #include <l4/syscall.h>
 #include <l4/thread.h>
 
-
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
 
 /* FIXME: These are compound statements and can not be used for
    initialization of global variables in C99.  */
@@ -18,7 +34,8 @@
 #define l4_zero_time \
        ((l4_time_t) { .period.m = 0, .period.e = 5, .period._zero = 0 })
 
-_L4_EXTERN_INLINE l4_time_t
+static inline l4_time_t
+__attribute__((__always_inline__))
 l4_time_period (l4_uint64_t usec)
 {
   /* FIXME: If usec is a built-in constant, optimize.  Optimize the
@@ -42,7 +59,8 @@
 
 /* Convenience interface for l4_thread_switch.  */
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_yield (void)
 {
   l4_thread_switch (l4_nilthread);
@@ -51,7 +69,8 @@
 
 /* Convenience interface for l4_schedule.  */
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_set_priority (l4_thread_id_t dest, l4_word_t priority)
 {
   l4_word_t prio = priority & ((1 << 16) - 1);
@@ -60,7 +79,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_set_processor_no (l4_thread_id_t dest, l4_word_t proc_num)
 {
   l4_word_t proc = proc_num & ((1 << 8) - 1);
@@ -69,7 +89,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_time_slice (l4_thread_id_t dest, l4_time_t *ts, l4_time_t *tq)
 {
   l4_word_t time_control;
@@ -79,7 +100,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_set_time_slice (l4_thread_id_t dest, l4_time_t ts, l4_time_t tq)
 {
   l4_word_t time_control = (ts.raw << 16) | tq.raw;
@@ -88,7 +110,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_preemption_delay (l4_thread_id_t dest, l4_word_t sensitive_prio,
                     l4_word_t max_delay)
 {
Index: hurd-l4/libl4/l4/space.h
diff -u hurd-l4/libl4/l4/space.h:1.4 hurd-l4/libl4/l4/space.h:1.5
--- hurd-l4/libl4/l4/space.h:1.4        Wed Sep 17 10:22:23 2003
+++ hurd-l4/libl4/l4/space.h    Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* space.h - Public interface to L4 spaces.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_SPACE_H
 #define _L4_SPACE_H    1
 
@@ -14,25 +35,24 @@
 #define l4_fully_accessible    (l4_readable | l4_writable | l4_executable)
 #define l4_read_exec_only      (l4_readable | l4_executable)
 
+/* FIXME: These are compound statements and can not be used for
+   initialization of global variables in C99.  */
 #define l4_nilpage ((l4_fpage_t) { .raw = 0 })
 /* FIXME: When gcc supports unnamed fields in initializer.  */
 #define l4_complete_address_space \
   ((l4_fpage_t) { .page.rights = 0, .page.log2_size = 1, .page.base = 0 })
 
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
-
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_nil_fpage (l4_fpage_t fpage)
 {
   return fpage.raw == l4_nilpage.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_fpage (l4_word_t base, int size)
 {
   l4_fpage_t fpage;
@@ -46,7 +66,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_fpage_log2 (l4_word_t base, int log2_size)
 {
   l4_fpage_t fpage;
@@ -58,42 +79,48 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_address (l4_fpage_t fpage)
 {
   return fpage.base << 10;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_size (l4_fpage_t fpage)
 {
   return 1 << fpage.log2_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_size_log2 (l4_fpage_t fpage)
 {
   return fpage.log2_size;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_rights (l4_fpage_t fpage)
 {
   return fpage.rights;
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_rights (l4_fpage_t *fpage, l4_word_t rights)
 {
   fpage->rights = rights;
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_fpage_add_rights (l4_fpage_t fpage, l4_word_t rights)
 {
   l4_fpage_t new_fpage = fpage;
@@ -102,14 +129,16 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_fpage_add_rights_to (l4_fpage_t *fpage, l4_word_t rights)
 {
   fpage->rights |= rights;
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_fpage_remove_rights (l4_fpage_t fpage, l4_word_t rights)
 {
   l4_fpage_t new_fpage = fpage;
@@ -118,7 +147,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_fpage_remove_rights_from (l4_fpage_t *fpage, l4_word_t rights)
 {
   fpage->rights &= ~rights;
@@ -127,7 +157,8 @@
 
 /* l4_unmap convenience interface.  */
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_unmap_fpage (l4_fpage_t fpage)
 {
   l4_load_mr (0, fpage.raw);
@@ -136,7 +167,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_unmap_fpages (l4_word_t nr, l4_fpage_t *fpages)
 {
   l4_load_mrs (0, nr, (l4_word_t *) fpages);
@@ -145,7 +177,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_flush (l4_fpage_t fpage)
 {
   l4_load_mr (0, fpage.raw);
@@ -154,7 +187,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_flush_fpages (l4_word_t nr, l4_fpage_t *fpages)
 {
   l4_load_mrs (0, nr, (l4_word_t *) fpages);
@@ -163,7 +197,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_fpage_t
+static inline l4_fpage_t
+__attribute__((__always_inline__))
 l4_get_status (l4_fpage_t fpage)
 {
   l4_fpage_t save_fpage;
@@ -177,21 +212,24 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_was_referenced (l4_fpage_t fpage)
 {
   return fpage.referenced;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_was_written (l4_fpage_t fpage)
 {
   return fpage.written;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_was_executed (l4_fpage_t fpage)
 {
   return fpage.executed;
Index: hurd-l4/libl4/l4/syscall.h
diff -u hurd-l4/libl4/l4/syscall.h:1.1 hurd-l4/libl4/l4/syscall.h:1.2
--- hurd-l4/libl4/l4/syscall.h:1.1      Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/syscall.h  Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* syscall.h - Public interface to the L4 system calls.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_SYSCALL_H
 #define _L4_SYSCALL_H  1
 
@@ -5,7 +26,7 @@
 #include <l4/vregs.h>
 #include <l4/kip.h>
 
-/* <l4/bits/syscall.h> defines extern inlines for all system calls.  */
+/* <l4/bits/syscall.h> defines all system calls.  */
 #include <l4/bits/syscall.h>
 
 /* l4_exchange_registers control argument.  */
Index: hurd-l4/libl4/l4/thread.h
diff -u hurd-l4/libl4/l4/thread.h:1.1 hurd-l4/libl4/l4/thread.h:1.2
--- hurd-l4/libl4/l4/thread.h:1.1       Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/thread.h   Thu Sep 18 11:46:58 2003
@@ -1,3 +1,24 @@
+/* thread.h - Public interface to L4 threads.
+   Copyright (C) 2003 Free Software Foundation, Inc.
+   Written by Marcus Brinkmann <address@hidden>.
+
+   This file is part of the GNU L4 library.
+ 
+   The GNU L4 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 L4 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 L4 library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
 #ifndef _L4_THREAD_H
 #define _L4_THREAD_H   1
 
@@ -14,12 +35,8 @@
        ((l4_thread_id_t) { .local.local = -1, .local._all_zero = 0 })
 
 
-#ifndef _L4_EXTERN_INLINE
-#define _L4_EXTERN_INLINE extern __inline
-#endif
-
-
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline  l4_thread_id_t
+__attribute__((__always_inline__))
 l4_global_id (l4_word_t thread_no, l4_word_t version)
 {
   l4_thread_id_t thread;
@@ -31,63 +48,72 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_version (l4_thread_id_t thread)
 {
   return thread.version;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_thread_no (l4_thread_id_t thread)
 {
   return thread.thread_no;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_thread_equal (l4_thread_id_t thread1, l4_thread_id_t thread2)
 {
   return thread1.raw == thread2.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_thread_not_equal (l4_thread_id_t thread1, l4_thread_id_t thread2)
 {
   return thread1.raw != thread2.raw;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_nil_thread (l4_thread_id_t thread)
 {
   return thread.raw == 0;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_local_id (l4_thread_id_t thread)
 {
   return thread._all_zero == 0;
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_is_global_id (l4_thread_id_t thread)
 {
   return thread._all_zero != 0;
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_myself (void)
 {
   return l4_my_global_id ();
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_global_id_of (l4_thread_id_t thread)
 {
   if (l4_is_global_id (thread))
@@ -106,7 +132,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_same_threads (l4_thread_id_t thread1, l4_thread_id_t thread2)
 {
   l4_thread_id_t global1 = l4_global_id_of (thread1);
@@ -116,7 +143,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_local_id_of (l4_thread_id_t thread)
 {
   if (l4_is_local_id (thread))
@@ -135,7 +163,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_user_defined_handle_of (l4_thread_id_t thread)
 {
   l4_thread_id_t dest = thread;
@@ -150,7 +179,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_user_defined_handle_of (l4_thread_id_t thread, l4_word_t handle)
 {
   l4_thread_id_t dest = thread;
@@ -164,7 +194,8 @@
 }
 
 
-_L4_EXTERN_INLINE l4_thread_id_t
+static inline l4_thread_id_t
+__attribute__((__always_inline__))
 l4_pager_of (l4_thread_id_t thread)
 {
   l4_thread_id_t dest = thread;
@@ -178,7 +209,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_set_pager_of (l4_thread_id_t thread, l4_thread_id_t pager_thread)
 {
   l4_thread_id_t dest = thread;
@@ -191,7 +223,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_start (l4_thread_id_t thread)
 {
   l4_thread_id_t dest = thread;
@@ -204,7 +237,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_start_sp_ip (l4_thread_id_t thread, l4_word_t sp_data, l4_word_t ip_data)
 {
   l4_thread_id_t dest = thread;
@@ -219,7 +253,8 @@
 }
 
 
-_L4_EXTERN_INLINE void
+static inline void
+__attribute__((__always_inline__))
 l4_start_sp_ip_flags (l4_thread_id_t thread, l4_word_t sp_data,
                      l4_word_t ip_data, l4_word_t flags_data)
 {
@@ -237,7 +272,8 @@
 
 
 #define __L4_STOP(name, extra_control)                         \
-_L4_EXTERN_INLINE l4_word_t                                    \
+static inline l4_word_t                                                \
+__attribute__((__always_inline__))                             \
 name (l4_thread_id_t thread)                                   \
 {                                                              \
   l4_thread_id_t dest = thread;                                        \
@@ -252,7 +288,8 @@
 }                                                              \
                                                                \
                                                                \
-_L4_EXTERN_INLINE l4_word_t                                    \
+static inline l4_word_t                                                \
+__attribute__((__always_inline__))                             \
 name ## _sp_ip_flags (l4_thread_id_t thread, l4_word_t *sp,    \
                       l4_word_t *ip, l4_word_t *flags)         \
 {                                                              \
@@ -276,14 +313,16 @@
 
 /* Convenience interface for l4_thread_control.  */ 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_associate_interrupt (l4_thread_id_t irq, l4_thread_id_t handler)
 {
   return l4_thread_control (irq, irq, l4_nilthread, handler, (void *) -1);
 }
 
 
-_L4_EXTERN_INLINE l4_word_t
+static inline l4_word_t
+__attribute__((__always_inline__))
 l4_deassociate_interrupt (l4_thread_id_t irq)
 {
   return l4_thread_control (irq, irq, l4_nilthread, irq, (void *) -1);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]