From: Isaac Dunham <idunham@lavabit.com>
To: musl@lists.openwall.com
Subject: [PATCH/RFC] inline cleanup/C89 support
Date: Thu, 30 Aug 2012 15:45:34 -0700 [thread overview]
Message-ID: <20120830154534.454e8d66@newbook> (raw)
In-Reply-To: <20120824075315.GF10731@port70.net>
[-- Attachment #1: Type: text/plain, Size: 1451 bytes --]
On Fri, 24 Aug 2012 09:53:16 +0200
Szabolcs Nagy <nsz@port70.net> wrote:
> * Rich Felker <dalias@aerifal.cx> [2012-08-23 22:34:25 -0400]:
..
> > #if __STDC_VERSION__ >= 199901L
> > #define __inline inline
> > #define __restrict restrict
> > #endif
> >
> > added near the top of headers that need to use inline and/or
> > restrict.
(As previously stated, it appears-per a grep of glibc-that restrict is
not needed in these headers.)
This patch is updated for C++:
#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
#define __inline inline
#endif
> this won't work with c++, nor old strict c compilers
> without __inline and __restrict and can break various
> c parsing tools (ctags, swig, various lints, ..)
1. Do any of these "old strict c compilers" exist on Linux? Are any of
them worth supporting?
The Linux compilers I'm aware of are all nominally C99 capable (pcc,
tcc, gcc, clang, llvm-gcc, icc, OpenWatcom...), support __inline
(gcc-compatibles), or are hopelessly incomplete/outdated and buggy
(TenDRA, dev86 bcc). The latter ones probably wouldn't work properly
with musl, period.
2. Have you tested those C parsing tools? Have they been updated to
support C99?
3. Would OpenWatcom + musl be usable? Last I knew, OpenWatcom wasn't
compatible with the standard Linux ABI, and ISTR it had to use its own
libc.
If it is a realistic combination (can produce a working hello world),
then it *might* be worth supporting.
Isaac Dunham
[-- Attachment #2: inline.diff --]
[-- Type: text/x-patch, Size: 13468 bytes --]
diff --git a/arch/arm/bits/syscall.h b/arch/arm/bits/syscall.h
index 9932c9e..b84db9b 100644
--- a/arch/arm/bits/syscall.h
+++ b/arch/arm/bits/syscall.h
@@ -1,3 +1,7 @@
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __SYSCALL_LL_E(x) \
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
@@ -7,37 +11,37 @@
long (__syscall)(long, ...);
-static inline long __syscall0(long n)
+static __inline long __syscall0(long n)
{
return (__syscall)(n);
}
-static inline long __syscall1(long n, long a)
+static __inline long __syscall1(long n, long a)
{
return (__syscall)(n, a);
}
-static inline long __syscall2(long n, long a, long b)
+static __inline long __syscall2(long n, long a, long b)
{
return (__syscall)(n, a, b);
}
-static inline long __syscall3(long n, long a, long b, long c)
+static __inline long __syscall3(long n, long a, long b, long c)
{
return (__syscall)(n, a, b, c);
}
-static inline long __syscall4(long n, long a, long b, long c, long d)
+static __inline long __syscall4(long n, long a, long b, long c, long d)
{
return (__syscall)(n, a, b, c, d);
}
-static inline long __syscall5(long n, long a, long b, long c, long d, long e)
+static __inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
return (__syscall)(n, a, b, c, d, e);
}
-static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
+static __inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
return (__syscall)(n, a, b, c, d, e, f);
}
diff --git a/arch/i386/bits/syscall.h b/arch/i386/bits/syscall.h
index 4b574e9..b9335b3 100644
--- a/arch/i386/bits/syscall.h
+++ b/arch/i386/bits/syscall.h
@@ -1,3 +1,7 @@
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __SYSCALL_LL_E(x) \
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
@@ -5,7 +9,7 @@
#define __SYSCALL_SSLEN 8
-static inline long __syscall0(long __n)
+static __inline long __syscall0(long __n)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n) : "memory");
@@ -14,42 +18,42 @@ static inline long __syscall0(long __n)
#ifndef __PIC__
-static inline long __syscall1(long __n, long __a1)
+static __inline long __syscall1(long __n, long __a1)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1) : "memory");
return __ret;
}
-static inline long __syscall2(long __n, long __a1, long __a2)
+static __inline long __syscall2(long __n, long __a1, long __a2)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2) : "memory");
return __ret;
}
-static inline long __syscall3(long __n, long __a1, long __a2, long __a3)
+static __inline long __syscall3(long __n, long __a1, long __a2, long __a3)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3) : "memory");
return __ret;
}
-static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
+static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4) : "memory");
return __ret;
}
-static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
+static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
{
unsigned long __ret;
__asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4), "D"(__a5) : "memory");
return __ret;
}
-static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
+static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
{
unsigned long __ret;
__asm__ __volatile__ ("pushl %7 ; pushl %%ebp ; mov 4(%%esp),%%ebp ; int $128 ; popl %%ebp ; popl %%ecx"
@@ -59,7 +63,7 @@ static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __
#else
-static inline long __syscall1(long __n, long __a1)
+static __inline long __syscall1(long __n, long __a1)
{
unsigned long __ret;
__asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
@@ -67,7 +71,7 @@ static inline long __syscall1(long __n, long __a1)
return __ret;
}
-static inline long __syscall2(long __n, long __a1, long __a2)
+static __inline long __syscall2(long __n, long __a1, long __a2)
{
unsigned long __ret;
__asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
@@ -75,7 +79,7 @@ static inline long __syscall2(long __n, long __a1, long __a2)
return __ret;
}
-static inline long __syscall3(long __n, long __a1, long __a2, long __a3)
+static __inline long __syscall3(long __n, long __a1, long __a2, long __a3)
{
unsigned long __ret;
__asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
@@ -83,7 +87,7 @@ static inline long __syscall3(long __n, long __a1, long __a2, long __a3)
return __ret;
}
-static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
+static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
{
unsigned long __ret;
__asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
@@ -92,7 +96,7 @@ static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __
}
#if 0
-static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
+static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
{
unsigned long __ret;
__asm__ __volatile__ ("pushl %2 ; pushl %%ebx ; mov 4(%%esp),%%ebx ; int $128 ; popl %%ebx ; popl %%ecx"
@@ -100,13 +104,13 @@ static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __
return __ret;
}
#else
-static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
+static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
{
return (__syscall)(__n, __a1, __a2, __a3, __a4, __a5);
}
#endif
-static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
+static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
{
return (__syscall)(__n, __a1, __a2, __a3, __a4, __a5, __a6);
}
diff --git a/arch/mips/bits/syscall.h b/arch/mips/bits/syscall.h
index 6c51bab..795f432 100644
--- a/arch/mips/bits/syscall.h
+++ b/arch/mips/bits/syscall.h
@@ -1,3 +1,7 @@
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __SYSCALL_LL_E(x) \
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
@@ -7,37 +11,37 @@
long (__syscall)(long, ...);
-static inline long __syscall0(long n)
+static __inline long __syscall0(long n)
{
return (__syscall)(n);
}
-static inline long __syscall1(long n, long a)
+static __inline long __syscall1(long n, long a)
{
return (__syscall)(n, a);
}
-static inline long __syscall2(long n, long a, long b)
+static __inline long __syscall2(long n, long a, long b)
{
return (__syscall)(n, a, b);
}
-static inline long __syscall3(long n, long a, long b, long c)
+static __inline long __syscall3(long n, long a, long b, long c)
{
return (__syscall)(n, a, b, c);
}
-static inline long __syscall4(long n, long a, long b, long c, long d)
+static __inline long __syscall4(long n, long a, long b, long c, long d)
{
return (__syscall)(n, a, b, c, d);
}
-static inline long __syscall5(long n, long a, long b, long c, long d, long e)
+static __inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
return (__syscall)(n, a, b, c, d, e);
}
-static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
+static __inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
return (__syscall)(n, a, b, c, d, e, f);
}
diff --git a/arch/x86_64/bits/syscall.h b/arch/x86_64/bits/syscall.h
index 567cfcb..e19efb9 100644
--- a/arch/x86_64/bits/syscall.h
+++ b/arch/x86_64/bits/syscall.h
@@ -1,23 +1,27 @@
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __SYSCALL_LL_E(x) (x)
#define __SYSCALL_LL_O(x) (x)
#define __SYSCALL_SSLEN 8
-static inline long __syscall0(long __n)
+static __inline long __syscall0(long __n)
{
unsigned long __ret;
__asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n) : "rcx", "r11", "memory");
return __ret;
}
-static inline long __syscall1(long __n, long __a1)
+static __inline long __syscall1(long __n, long __a1)
{
unsigned long __ret;
__asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1) : "rcx", "r11", "memory");
return __ret;
}
-static inline long __syscall2(long __n, long __a1, long __a2)
+static __inline long __syscall2(long __n, long __a1, long __a2)
{
unsigned long __ret;
__asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1), "S"(__a2)
@@ -25,7 +29,7 @@ static inline long __syscall2(long __n, long __a1, long __a2)
return __ret;
}
-static inline long __syscall3(long __n, long __a1, long __a2, long __a3)
+static __inline long __syscall3(long __n, long __a1, long __a2, long __a3)
{
unsigned long __ret;
__asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1), "S"(__a2),
@@ -33,7 +37,7 @@ static inline long __syscall3(long __n, long __a1, long __a2, long __a3)
return __ret;
}
-static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
+static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4)
{
unsigned long __ret;
register long __r10 __asm__("r10") = __a4;
@@ -42,7 +46,7 @@ static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __
return __ret;
}
-static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
+static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5)
{
unsigned long __ret;
register long __r10 __asm__("r10") = __a4;
@@ -52,7 +56,7 @@ static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __
return __ret;
}
-static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
+static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6)
{
unsigned long __ret;
register long __r10 __asm__("r10") = __a4;
diff --git a/include/byteswap.h b/include/byteswap.h
index 8689cd5..347ceb4 100644
--- a/include/byteswap.h
+++ b/include/byteswap.h
@@ -3,26 +3,21 @@
#include <stdint.h>
-#if __STDC_VERSION__ >= 199901L
-inline
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
#endif
-static uint16_t __bswap_16(uint16_t __x)
+
+__inline static uint16_t __bswap_16(uint16_t __x)
{
return __x<<8 | __x>>8;
}
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static uint32_t __bswap_32(uint32_t __x)
+__inline static uint32_t __bswap_32(uint32_t __x)
{
return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24;
}
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static uint64_t __bswap_64(uint64_t __x)
+__inline static uint64_t __bswap_64(uint64_t __x)
{
return __bswap_32(__x)+0ULL<<32 | __bswap_32(__x>>32);
}
diff --git a/include/endian.h b/include/endian.h
index 41ca171..0f68b1f 100644
--- a/include/endian.h
+++ b/include/endian.h
@@ -1,6 +1,10 @@
#ifndef _ENDIAN_H
#define _ENDIAN_H
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define __PDP_ENDIAN 3412
@@ -20,26 +24,17 @@
#include <stdint.h>
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static uint16_t __bswap16(uint16_t __x)
+__inline static uint16_t __bswap16(uint16_t __x)
{
return __x<<8 | __x>>8;
}
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static uint32_t __bswap32(uint32_t __x)
+__inline static uint32_t __bswap32(uint32_t __x)
{
return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24;
}
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static uint64_t __bswap64(uint64_t __x)
+__inline static uint64_t __bswap64(uint64_t __x)
{
return __bswap32(__x)+0ULL<<32 | __bswap32(__x>>32);
}
diff --git a/include/math.h b/include/math.h
index 2fdcb7b..f752a35 100644
--- a/include/math.h
+++ b/include/math.h
@@ -5,6 +5,10 @@
extern "C" {
#endif
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus)
+#define __inline inline
+#endif
+
#define __NEED_float_t
#define __NEED_double_t
#define __NEED___uint16_t
@@ -83,10 +87,7 @@ int __signbitl(long double);
#define isunordered(x,y) (isnan((x)) ? ((void)(y),1) : isnan((y)))
-#if __STDC_VERSION__ >= 199901L
-inline
-#endif
-static int __isrel(long double __x, long double __y, int __rel)
+__inline static int __isrel(long double __x, long double __y, int __rel)
{
if (isunordered(__x, __y)) return 0;
if (__rel==-2) return __x < __y;
next prev parent reply other threads:[~2012-08-30 22:45 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-23 5:07 compatability: bits/syscall.h requires C99 idunham
2012-08-23 6:11 ` [PATCH] Problem is static inline idunham
2012-08-23 6:20 ` [PATCH 2/1] " idunham
2012-08-23 6:43 ` Szabolcs Nagy
2012-08-23 6:51 ` [PATCH] " Szabolcs Nagy
2012-08-23 12:18 ` Rich Felker
2012-08-23 12:31 ` compatability: bits/syscall.h requires C99 John Spencer
2012-08-23 12:34 ` Rich Felker
2012-08-24 0:25 ` Isaac Dunham
2012-08-24 2:07 ` Rich Felker
2012-08-24 2:34 ` Rich Felker
2012-08-24 3:31 ` [PATCH/RFC] __inline for C89 compilers (take 3?) Isaac Dunham
2012-08-24 7:53 ` compatability: bits/syscall.h requires C99 Szabolcs Nagy
2012-08-30 22:45 ` Isaac Dunham [this message]
2012-08-31 8:34 ` [PATCH/RFC] inline cleanup/C89 support Szabolcs Nagy
2012-08-31 19:27 ` Isaac Dunham
2012-09-02 16:51 ` Rich Felker
2012-09-04 15:49 ` philomath
2012-09-04 17:44 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120830154534.454e8d66@newbook \
--to=idunham@lavabit.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).