Index: uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h	(working copy)
@@ -17,7 +17,7 @@
 
 #define DL_MALLOC_ALIGN 8  /* EABI needs 8 byte alignment for STRD LDRD*/
 
-static __inline__ unsigned long arm_modulus(unsigned long m, unsigned long p)
+static __always_inline unsigned long arm_modulus(unsigned long m, unsigned long p)
 {
 	unsigned long i,t,inc;
 	i=p; t=0;
@@ -74,7 +74,7 @@ unsigned long _dl_linux_resolver(struct 
    first element of the GOT.  We used to use the PIC register to do this
    without a constant pool reference, but GCC 4.2 will use a pseudo-register
    for the PIC base, so it may not be in r10.  */
-static __inline__ Elf32_Addr __attribute__ ((unused))
+static __always_inline Elf32_Addr __attribute__ ((unused))
 elf_machine_dynamic (void)
 {
   Elf32_Addr dynamic;
@@ -106,7 +106,7 @@ elf_machine_dynamic (void)
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr __attribute__ ((unused))
+static __always_inline Elf32_Addr __attribute__ ((unused))
 elf_machine_load_address (void)
 {
 	extern void __dl_start __asm__ ("_dl_start");
@@ -130,7 +130,7 @@ elf_machine_load_address (void)
 	return pcrel_addr - got_addr;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h	(working copy)
@@ -90,7 +90,7 @@ void _dl_init_got(unsigned long *lpnt,st
 #define ELF_MACHINE_PLTREL_OVERLAP 1
 
 /* Return the value of the GOT pointer.  */
-static __inline__ Elf32_Addr * __attribute__ ((const))
+static __always_inline Elf32_Addr * __attribute__ ((const))
 ppc_got (void)
 {
 	Elf32_Addr *got;
@@ -109,14 +109,14 @@ ppc_got (void)
 
 /* Return the link-time address of _DYNAMIC, stored as
    the first value in the GOT. */
-static __inline__ Elf32_Addr __attribute__ ((const))
+static __always_inline Elf32_Addr __attribute__ ((const))
 elf_machine_dynamic (void)
 {
 	return *ppc_got();
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr __attribute__ ((const))
+static __always_inline Elf32_Addr __attribute__ ((const))
 elf_machine_load_address (void)
 {
   Elf32_Addr *branchaddr;
@@ -164,7 +164,7 @@ elf_machine_load_address (void)
   return runtime_dynamic - elf_machine_dynamic ();
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h	(working copy)
@@ -42,7 +42,7 @@ extern unsigned long _dl_linux_resolver(
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  */
-static __inline__ Elf32_Addr elf_machine_dynamic(void)
+static __always_inline Elf32_Addr elf_machine_dynamic(void)
 {
 	register Elf32_Addr *got;
 
@@ -70,7 +70,7 @@ static __inline__ Elf32_Addr elf_machine
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr elf_machine_load_address(void)
+static __always_inline Elf32_Addr elf_machine_load_address(void)
 {
 	Elf32_Addr addr;
 
@@ -123,7 +123,7 @@ static __inline__ Elf32_Addr elf_machine
 	}						\
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		     Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h	(working copy)
@@ -41,7 +41,7 @@ extern unsigned long _dl_linux_resolver 
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_dynamic (void)
 {
 	register Elf32_Addr *got __asm__ ("%a5");
@@ -50,7 +50,7 @@ elf_machine_dynamic (void)
 
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_load_address (void)
 {
 	Elf32_Addr addr;
@@ -60,7 +60,7 @@ elf_machine_load_address (void)
 	return addr;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h	(working copy)
@@ -42,8 +42,8 @@ extern unsigned long _dl_linux_resolver(
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  */
-static __inline__ Elf32_Addr elf_machine_dynamic (void) attribute_unused;
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr elf_machine_dynamic (void) attribute_unused;
+static __always_inline Elf32_Addr
 elf_machine_dynamic (void)
 {
 	register Elf32_Addr *got __asm__ ("%ebx");
@@ -52,8 +52,8 @@ elf_machine_dynamic (void)
 
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr elf_machine_load_address (void) attribute_unused;
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr elf_machine_load_address (void) attribute_unused;
+static __always_inline Elf32_Addr
 elf_machine_load_address (void)
 {
 	/* It doesn't matter what variable this is, the reference never makes
@@ -66,7 +66,7 @@ elf_machine_load_address (void)
 	return addr;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h	(working copy)
@@ -39,7 +39,7 @@ extern unsigned long _dl_linux_resolver(
      || ((type) == R_CRIS_GLOB_DAT)) * ELF_RTYPE_CLASS_PLT)	\
    | (((type) == R_CRIS_COPY) * ELF_RTYPE_CLASS_COPY))
 
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_dynamic(void)
 {
 	/* Don't just set this to an asm variable "r0" since that's not logical
@@ -61,7 +61,7 @@ elf_machine_dynamic(void)
    there's some other symbol we could use, that we don't *have* to force a
    GOT entry for.  */
 
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_load_address(void)
 {
 	Elf32_Addr gotaddr_diff;
@@ -95,7 +95,7 @@ elf_machine_load_address(void)
 	return gotaddr_diff;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative(Elf32_Addr load_off, const Elf32_Addr rel_addr,
                      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h	(working copy)
@@ -87,7 +87,7 @@ extern unsigned long _dl_linux_resolver 
   (((type) == R_XTENSA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
 
 /* Return the link-time address of _DYNAMIC.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_dynamic (void)
 {
   /* This function is only used while bootstrapping the runtime linker.
@@ -97,7 +97,7 @@ elf_machine_dynamic (void)
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_load_address (void)
 {
   Elf32_Addr addr, tmp;
@@ -118,7 +118,7 @@ elf_machine_load_address (void)
   return addr - 3;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h	(working copy)
@@ -49,7 +49,7 @@ unsigned long _dl_linux_resolver(struct 
 
 #ifndef COMPILE_ASM
 /* Cheap modulo implementation, taken from arm/ld_sysdep.h. */
-static __inline__ unsigned long
+static __always_inline unsigned long
 sparc_mod(unsigned long m, unsigned long p)
 {
 	unsigned long i, t, inc;
@@ -127,7 +127,7 @@ do {    register Elf32_Addr pc __asm__("
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_dynamic (void)
 {
 	register Elf32_Addr *got __asm__ ("%l7");
@@ -138,7 +138,7 @@ elf_machine_dynamic (void)
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr
+static __always_inline Elf32_Addr
 elf_machine_load_address (void)
 {
 	register Elf32_Addr *pc __asm__ ("%o7"), *got __asm__ ("%l7");
@@ -157,7 +157,7 @@ elf_machine_load_address (void)
 	return (Elf32_Addr) got - *got + (pc[2] - pc[3]) * 4 - 4;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h	(working copy)
@@ -163,7 +163,7 @@ void _dl_perform_mips_global_got_relocat
 
 #define OFFSET_GP_GOT 0x7ff0
 
-static __inline__ ElfW(Addr) *
+static __always_inline ElfW(Addr) *
 elf_mips_got_from_gpreg (ElfW(Addr) gpreg)
 {
 	/* FIXME: the offset of gp from GOT may be system-dependent. */
@@ -173,7 +173,7 @@ elf_mips_got_from_gpreg (ElfW(Addr) gpre
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  We assume its $gp points to the primary GOT.  */
-static __inline__ ElfW(Addr)
+static __always_inline ElfW(Addr)
 elf_machine_dynamic (void)
 {
 	register ElfW(Addr) gp __asm__ ("$28");
@@ -192,7 +192,7 @@ elf_machine_dynamic (void)
 #endif
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ ElfW(Addr)
+static __always_inline ElfW(Addr)
 elf_machine_load_address (void)
 {
 	ElfW(Addr) addr;
@@ -208,7 +208,7 @@ elf_machine_load_address (void)
 	return addr;
 }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (ElfW(Addr) load_off, const ElfW(Addr) rel_addr,
 		      ElfW(Word) relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h	(working copy)
@@ -25,7 +25,7 @@
 struct elf_resolve;
 extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry);
 
-static __inline__ unsigned int
+static __always_inline unsigned int
 _dl_urem(unsigned int n, unsigned int base)
 {
   int res;
@@ -100,7 +100,7 @@ _dl_urem(unsigned int n, unsigned int ba
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT.  This must be inlined in a function which
    uses global data.  */
-static __inline__ Elf32_Addr __attribute__ ((unused))
+static __always_inline Elf32_Addr __attribute__ ((unused))
 elf_machine_dynamic (void)
 {
 	register Elf32_Addr *got;
@@ -109,7 +109,7 @@ elf_machine_dynamic (void)
 }
 
 /* Return the run-time load address of the shared object.  */
-static __inline__ Elf32_Addr __attribute__ ((unused))
+static __always_inline Elf32_Addr __attribute__ ((unused))
 elf_machine_load_address (void)
 {
 	Elf32_Addr addr;
@@ -151,7 +151,7 @@ elf_machine_load_address (void)
     } \
   }
 
-static __inline__ void
+static __always_inline void
 elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
Index: uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h
===================================================================
--- uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h	(revision 25503)
+++ uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h	(working copy)
@@ -213,7 +213,7 @@ while (0)
 #endif
 
 #include <elf.h>
-static __inline__ void
+static __always_inline void
 elf_machine_relative (DL_LOADADDR_TYPE load_off, const Elf32_Addr rel_addr,
 		      Elf32_Word relative_count)
 {
