mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Isaac Dunham <idunham@lavabit.com>
To: musl@lists.openwall.com
Subject: Re: compatability: bits/syscall.h requires C99
Date: Thu, 23 Aug 2012 17:25:19 -0700	[thread overview]
Message-ID: <20120823172519.39f899b6@newbook> (raw)
In-Reply-To: <20120823123453.GO27715@brightrain.aerifal.cx>

[-- Attachment #1: Type: text/plain, Size: 2360 bytes --]

On Thu, 23 Aug 2012 08:34:53 -0400
Rich Felker <dalias@aerifal.cx> wrote:

> On Thu, Aug 23, 2012 at 02:31:48PM +0200, John Spencer wrote:
> > On 08/23/2012 07:07 AM, idunham@lavabit.com wrote:
> > >Upstream insists on using --std=c89
> > insisting on c89 sounds really stupid.
> 
> Agreed. This does not improve compatibility; it breaks compatibility,
> especially if they happen to #include any third-party library header
> which is not _documented_ as being c89 compatible. (Even if it happens
> to work with -std=c89 now, unless it's documented that it does and
> always will, this might change in a future version.)

1- Per grep, they don't use third-party headers.

2- I believe the point is prevent breaking C89 platforms, by making
non-C89 code FTBFS anywhere. Since they build-test every pull request
automatically, there's little chance of non-C89 code getting merged.

This will work unless a libc breaks C89 compatability in its headers,
and musl is the only libc yet that does this.
(If you're providing the only case where C89 is broken, it's rather
hard to argue that a musl-specific workaround is inappropriate...
time to get a flamesuit on)

> > (and your musl patch is very ugly, if not entirely pointless)
just following the advice I was given on IRC re: <bits/io.h> !
> I had some potential ideas for other ways to do this. Anyway the
> discussion is not entirely pointless since we need to address
> "restrict" at some point too, and the mechanisms for doing so will be
> similar (but worse, since "restrict" is not a keyword by default in
> most compilers without -std=c99, unlike "inline" which works unless
> you intentionally enable strict-mode)...

macros available in different modes 
(courtesy of gcc -E -dM - < /dev/null ):
std=c89,c99:
__STRICT_ANSI__ 1
std=c89, gnu89
__GNUC_GNU_INLINE__ 1
std=c99,gnu99:
__GNUC_STDC_INLINE__ 1
__STDC_VERSION__ 199901L

So putting ~ this at the top of the header should work
(not verbatim, just the general concept!):
#if !(__STDC_VERSION__ >= 199901L) && __STRICT_ANSI__
#define inline __inline
#define restrict /* fallback for C89 compilers */
#endif

OTOH, s/inline/__inline/g is probably better/more universal, since
__inline is supported on some alternate compilers.


Here's a patch that will make the latter change to
arch/*/bits/syscall.h; I've left arch/*/*.h alone.

HTH,
Isaac Dunham

[-- Attachment #2: inline.diff --]
[-- Type: text/x-patch, Size: 10004 bytes --]

diff --git a/arch/arm/bits/syscall.h b/arch/arm/bits/syscall.h
index 9932c9e..c5e25b7 100644
--- a/arch/arm/bits/syscall.h
+++ b/arch/arm/bits/syscall.h
@@ -7,37 +7,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..77c7f11 100644
--- a/arch/i386/bits/syscall.h
+++ b/arch/i386/bits/syscall.h
@@ -5,7 +5,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 +14,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 +59,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 +67,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 +75,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 +83,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 +92,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 +100,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..9a2de2e 100644
--- a/arch/mips/bits/syscall.h
+++ b/arch/mips/bits/syscall.h
@@ -7,37 +7,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..217515f 100644
--- a/arch/x86_64/bits/syscall.h
+++ b/arch/x86_64/bits/syscall.h
@@ -3,21 +3,21 @@
 
 #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 +25,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 +33,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 +42,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 +52,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;

  reply	other threads:[~2012-08-24  0:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-23  5:07 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 [this message]
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             ` [PATCH/RFC] inline cleanup/C89 support Isaac Dunham
2012-08-31  8:34               ` 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=20120823172519.39f899b6@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).