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)
@@ -15,7 +15,7 @@
   GOT_BASE[1] = (unsigned long) MODULE; \
 }
 
-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;
@@ -72,7 +72,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;
@@ -104,7 +104,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");
@@ -128,7 +128,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)
 {
