From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1799 Path: news.gmane.org!not-for-mail From: Isaac Dunham Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH/RFC] inline cleanup/C89 support Date: Thu, 30 Aug 2012 15:45:34 -0700 Message-ID: <20120830154534.454e8d66@newbook> References: <12609.132.241.65.179.1345698455.squirrel@lavabit.com> <503622B4.8020506@barfooze.de> <20120823123453.GO27715@brightrain.aerifal.cx> <20120823172519.39f899b6@newbook> <20120824020749.GU27715@brightrain.aerifal.cx> <20120824023425.GV27715@brightrain.aerifal.cx> <20120824075315.GF10731@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/7uX9JnC=yKk2JCZAgJEE_p_" X-Trace: ger.gmane.org 1346366753 17579 80.91.229.3 (30 Aug 2012 22:45:53 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 30 Aug 2012 22:45:53 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1800-gllmg-musl=m.gmane.org@lists.openwall.com Fri Aug 31 00:45:54 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1T7DUm-0004cq-RU for gllmg-musl@plane.gmane.org; Fri, 31 Aug 2012 00:45:53 +0200 Original-Received: (qmail 20099 invoked by uid 550); 30 Aug 2012 22:45:50 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 20088 invoked from network); 30 Aug 2012 22:45:49 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=0GwKaNB+B7YgvTfZaOiBkLEkS3JmGKwzw97Cm/84Y9CPTcO75o1jd9jPFA1nNFV6IN1qX/0X9BIkrzQDNHDJubqlhIGlhE82LX8JKuBzKlasbcVGhYW41shXHfQOoHucsykjq8PQwvlYXZrEtjqX2Cbr2WsyPj0dovZPHJpxXjQ=; h=Date:From:To:Subject:Message-ID:In-Reply-To:References:X-Mailer:Mime-Version:Content-Type; In-Reply-To: <20120824075315.GF10731@port70.net> X-Mailer: Claws Mail 3.7.4 (GTK+ 2.20.1; i486-pc-linux-gnu) Xref: news.gmane.org gmane.linux.lib.musl.general:1799 Archived-At: --MP_/7uX9JnC=yKk2JCZAgJEE_p_ Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Fri, 24 Aug 2012 09:53:16 +0200 Szabolcs Nagy wrote: > * Rich Felker [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 --MP_/7uX9JnC=yKk2JCZAgJEE_p_ Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=inline.diff 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 -#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 -#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; --MP_/7uX9JnC=yKk2JCZAgJEE_p_--