diff mbox

[v2,01/16] Add __ASSUME_SYSVIPC_SYSCALL for Linux

Message ID 1478114813-3526-2-git-send-email-adhemerval.zanella@linaro.org
State Superseded
Headers show

Commit Message

Adhemerval Zanella Nov. 2, 2016, 7:26 p.m. UTC
Changes from previous version:

  - Use __ASSUME_SYSVIPC_SYSCALL instead of __NR_syscall to issue the
    wired syscall or the ipc one.

--

On current minimum supported kernels, the SysV IPC on Linux is provided
by either the ipc syscalls or correspondent wire syscalls.  Also, for
architectures that supports wire syscalls all syscalls are supported
in a set (msgct, msgrcv, msgsnd, msgget, semctl, semget, semop, semtimedop,
shmctl, shmat, shmget, shmdt).

The architectures that only supports ipc syscall are:

  - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and
    powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.

And the architectures that only supports wired syscalls are:

  - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile
    (tilepro, tilegx, and tilegx64), and x86_64

Also arm is the only one that supports both wire syscalls and the
ipc, although the ipc one is deprecated.

This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired
syscalls are supported on the system and the general idea is to use
it where possible.

I also checked the syscall table for all architectures on Linux 4.9
and there is no change on described support for Linux 2.6.32/3.2.

	* sysdeps/unix/sysv/linux/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): New define.
	* sysdeps/unix/sysv/linux/i386/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Undef.
	* sysdeps/unix/sysv/linux/m68k/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/mips/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/s390/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/sh/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/sparc/kernel-features.h
	(__ASSUME_SYSVIPC_SYSCALL): Likewise.
---
 ChangeLog                                         | 19 +++++++++++++++++++
 sysdeps/unix/sysv/linux/i386/kernel-features.h    |  3 +++
 sysdeps/unix/sysv/linux/kernel-features.h         |  4 ++++
 sysdeps/unix/sysv/linux/m68k/kernel-features.h    |  3 +++
 sysdeps/unix/sysv/linux/mips/kernel-features.h    |  2 ++
 sysdeps/unix/sysv/linux/powerpc/kernel-features.h |  3 +++
 sysdeps/unix/sysv/linux/s390/kernel-features.h    |  3 +++
 sysdeps/unix/sysv/linux/sh/kernel-features.h      |  3 +++
 sysdeps/unix/sysv/linux/sparc/kernel-features.h   |  3 +++
 9 files changed, 43 insertions(+)

-- 
2.7.4

Comments

Joseph Myers Nov. 2, 2016, 9:10 p.m. UTC | #1
On Wed, 2 Nov 2016, Adhemerval Zanella wrote:

> The architectures that only supports ipc syscall are:

> 

>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.


You list microblaze in this list, but I don't see a corresponding 
kernel-features.h #undef for it.

-- 
Joseph S. Myers
joseph@codesourcery.com
Adhemerval Zanella Nov. 2, 2016, 10:27 p.m. UTC | #2
On 02/11/2016 19:10, Joseph Myers wrote:
> On Wed, 2 Nov 2016, Adhemerval Zanella wrote:

> 

>> The architectures that only supports ipc syscall are:

>>

>>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.

> 

> You list microblaze in this list, but I don't see a corresponding 

> kernel-features.h #undef for it.

> 


It is indeed a mistake from the script I used to check various kernel
syscall table list.  On 3.2, microblaze code [1] in fact defines
the old ipc syscall as 'sys_ni_syscall', so the architecture only
supports wire ones.

I am rechecking all architectures to see I missed something related.

[1] arch/microblaze/kernel/syscall_table.S
Adhemerval Zanella Nov. 2, 2016, 10:33 p.m. UTC | #3
On 02/11/2016 20:27, Adhemerval Zanella wrote:
> 

> 

> On 02/11/2016 19:10, Joseph Myers wrote:

>> On Wed, 2 Nov 2016, Adhemerval Zanella wrote:

>>

>>> The architectures that only supports ipc syscall are:

>>>

>>>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>>>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.

>>

>> You list microblaze in this list, but I don't see a corresponding 

>> kernel-features.h #undef for it.

>>

> 

> It is indeed a mistake from the script I used to check various kernel

> syscall table list.  On 3.2, microblaze code [1] in fact defines

> the old ipc syscall as 'sys_ni_syscall', so the architecture only

> supports wire ones.

> 

> I am rechecking all architectures to see I missed something related.


Microblaze seems the only one that I got a wrong result (basically
my script was grepping a comment about sys_ipc without checking if
it was defined as sys_ni_syscall).
Yury Norov Nov. 3, 2016, 5:06 p.m. UTC | #4
On Wed, Nov 02, 2016 at 05:26:38PM -0200, Adhemerval Zanella wrote:
> Changes from previous version:

> 

>   - Use __ASSUME_SYSVIPC_SYSCALL instead of __NR_syscall to issue the

>     wired syscall or the ipc one.

> 

> --

> 

> On current minimum supported kernels, the SysV IPC on Linux is provided

> by either the ipc syscalls or correspondent wire syscalls.  Also, for

> architectures that supports wire syscalls all syscalls are supported

> in a set (msgct, msgrcv, msgsnd, msgget, semctl, semget, semop, semtimedop,

> shmctl, shmat, shmget, shmdt).

> 

> The architectures that only supports ipc syscall are:

> 

>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.

> 

> And the architectures that only supports wired syscalls are:

> 

>   - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile

>     (tilepro, tilegx, and tilegx64), and x86_64

> 

> Also arm is the only one that supports both wire syscalls and the

> ipc, although the ipc one is deprecated.

> 

> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired

> syscalls are supported on the system and the general idea is to use

> it where possible.

> 

> I also checked the syscall table for all architectures on Linux 4.9

> and there is no change on described support for Linux 2.6.32/3.2.

> 

> 	* sysdeps/unix/sysv/linux/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): New define.

> 	* sysdeps/unix/sysv/linux/i386/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Undef.

> 	* sysdeps/unix/sysv/linux/m68k/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> 	* sysdeps/unix/sysv/linux/mips/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> 	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> 	* sysdeps/unix/sysv/linux/s390/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> 	* sysdeps/unix/sysv/linux/sh/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> 	* sysdeps/unix/sysv/linux/sparc/kernel-features.h

> 	(__ASSUME_SYSVIPC_SYSCALL): Likewise.

> ---

>  ChangeLog                                         | 19 +++++++++++++++++++

>  sysdeps/unix/sysv/linux/i386/kernel-features.h    |  3 +++

>  sysdeps/unix/sysv/linux/kernel-features.h         |  4 ++++

>  sysdeps/unix/sysv/linux/m68k/kernel-features.h    |  3 +++

>  sysdeps/unix/sysv/linux/mips/kernel-features.h    |  2 ++

>  sysdeps/unix/sysv/linux/powerpc/kernel-features.h |  3 +++

>  sysdeps/unix/sysv/linux/s390/kernel-features.h    |  3 +++

>  sysdeps/unix/sysv/linux/sh/kernel-features.h      |  3 +++

>  sysdeps/unix/sysv/linux/sparc/kernel-features.h   |  3 +++

>  9 files changed, 43 insertions(+)

> 

> diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h

> index 148963c..3da13d4 100644

> --- a/sysdeps/unix/sysv/linux/i386/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h

> @@ -52,3 +52,6 @@

>  # undef __ASSUME_SENDMSG_SYSCALL

>  # undef __ASSUME_RECVMSG_SYSCALL

>  #endif

> +

> +/* i686 only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h

> index 1d3b554..cb0bc28 100644

> --- a/sysdeps/unix/sysv/linux/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/kernel-features.h

> @@ -147,3 +147,7 @@

>     separate syscalls were only added later.  */

>  #define __ASSUME_SENDMSG_SYSCALL	1

>  #define __ASSUME_RECVMSG_SYSCALL	1

> +

> +/* Support for SysV IPC through wired syscalls.  All supported architectures

> +   either support ipc syscall and/or all the ipc correspondent syscalls.  */

> +#define __ASSUME_SYSVIPC_SYSCALL	1

> diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> index 46ec601..f0fd7ce 100644

> --- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h

> @@ -54,3 +54,6 @@

>  # undef __ASSUME_REQUEUE_PI

>  # undef __ASSUME_SET_ROBUST_LIST

>  #endif

> +

> +/* m68k only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h

> index b486d90..5e88c8e 100644

> --- a/sysdeps/unix/sysv/linux/mips/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h

> @@ -32,6 +32,8 @@

>     pairs to start with an even-number register.  */

>  #if _MIPS_SIM == _ABIO32

>  # define __ASSUME_ALIGNED_REGISTER_PAIRS	1

> +/* mips32 only supports ipc syscall.  */

> +# undef __ASSUME_SYSVIPC_SYSCALL

>  #endif

>  

>  /* Define that mips64-n32 is a ILP32 ABI to set the correct interface to

> diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h

> index 42a53f2..a81caf3 100644

> --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h

> @@ -52,3 +52,6 @@

>  #endif

>  

>  #include_next <kernel-features.h>

> +

> +/* powerpc only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h

> index b3edee4..8fd7853 100644

> --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h

> @@ -48,3 +48,6 @@

>  # undef __ASSUME_SENDMSG_SYSCALL

>  # undef __ASSUME_RECVMSG_SYSCALL

>  #endif

> + 


Trailing whitespace

> +/* s390 only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h

> index c5240fa..cb09603 100644

> --- a/sysdeps/unix/sysv/linux/sh/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h

> @@ -49,3 +49,6 @@

>     the kernel interface for p{read,write}64 adds a dummy long argument

>     before the offset.  */

>  #define __ASSUME_PRW_DUMMY_ARG	1

> +

> +/* sh only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> index 69c9c7c..20578bb 100644

> --- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> +++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h

> @@ -37,3 +37,6 @@

>  # undef __ASSUME_REQUEUE_PI

>  # undef __ASSUME_SET_ROBUST_LIST

>  #endif

> +

> +/* sparc only supports ipc syscall.  */

> +#undef __ASSUME_SYSVIPC_SYSCALL

> -- 

> 2.7.4
Adhemerval Zanella Nov. 3, 2016, 8:13 p.m. UTC | #5
On 03/11/2016 15:06, Yury Norov wrote:
>> diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h

>> index b3edee4..8fd7853 100644

>> --- a/sysdeps/unix/sysv/linux/s390/kernel-features.h

>> +++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h

>> @@ -48,3 +48,6 @@

>>  # undef __ASSUME_SENDMSG_SYSCALL

>>  # undef __ASSUME_RECVMSG_SYSCALL

>>  #endif

>> + 

> 

> Trailing whitespace


Ack, I fixed it in my local branch.
Arnd Bergmann Nov. 7, 2016, 11:28 a.m. UTC | #6
On Wednesday, November 2, 2016 5:26:38 PM CET Adhemerval Zanella wrote:

> The architectures that only supports ipc syscall are:

>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.


If you want to mention the architectures not supported by glibc, this
also includes

cris, frv, m32r, and mn10300

> And the architectures that only supports wired syscalls are:

>   - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile

>     (tilepro, tilegx, and tilegx64), and x86_64


similarly, this also includes

arc, avr32, blackfin, c6x, h8300, hexagon, metag, openrisc, score,
unicore32, and xtensa
 
> Also arm is the only one that supports both wire syscalls and the

> ipc, although the ipc one is deprecated.


AFAICT, ipc syscall on ARM is only defined for OABI, which glibc
no longer has.

From the kernel sources, I also see sh64 and microblaze define
both __NR_ipc and the individual numbers, although microblaze
returns -ENOSYS for ipc().

> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired

> syscalls are supported on the system and the general idea is to use

> it where possible.


We might add the individual syscalls on all architectures at some point
in the kernel, including the ones that currently use the combined
ipc call. A patch series for this has been discussed in the past,
but I think we never fully resolved the handling of the IPC_64
flag, so it did not get merged so far.

With your current approach, this won't cause problems as architectures
that don't have the individual calls with old kernel versions will
still use the ipc() wrapper in the kernel.


	Arnd
Adhemerval Zanella Nov. 7, 2016, 1:17 p.m. UTC | #7
On 07/11/2016 09:28, Arnd Bergmann wrote:
> On Wednesday, November 2, 2016 5:26:38 PM CET Adhemerval Zanella wrote:

> 

>> The architectures that only supports ipc syscall are:

>>   - i386, m68k, microblaze, mips32, powerpc (powerpc32, powerpc64, and

>>     powerpc64le), s390 (32 and 64 bits), sh, sparc32, and sparc64.

> 

> If you want to mention the architectures not supported by glibc, this

> also includes

> 

> cris, frv, m32r, and mn10300

> 


I think for commit/code comment mentioning only the supported archs
should be suffice.

>> And the architectures that only supports wired syscalls are:

>>   - aarch64, alpha, hppa, ia64, mips64, mips64n32, nios2, tile

>>     (tilepro, tilegx, and tilegx64), and x86_64

> 

> similarly, this also includes

> 

> arc, avr32, blackfin, c6x, h8300, hexagon, metag, openrisc, score,

> unicore32, and xtensa

>  

>> Also arm is the only one that supports both wire syscalls and the

>> ipc, although the ipc one is deprecated.

> 

> AFAICT, ipc syscall on ARM is only defined for OABI, which glibc

> no longer has.


Indeed, I think I should note that glibc's supported arm eabi should
use wire syscalls (although for a source standpoint it will still
see __NR_ipc defined).

> 

> From the kernel sources, I also see sh64 and microblaze define

> both __NR_ipc and the individual numbers, although microblaze

> returns -ENOSYS for ipc().


Indeed, in my first analysis I did not filter 'sys_ni_syscall' while
checking the syscall table in kernel files.  With this checked 
microblaze should that ipc is defined as 'sys_ni_syscall'.

> 

>> This patch adds a new define, __ASSUME_SYSVIPC_SYSCALL, that wired

>> syscalls are supported on the system and the general idea is to use

>> it where possible.

> 

> We might add the individual syscalls on all architectures at some point

> in the kernel, including the ones that currently use the combined

> ipc call. A patch series for this has been discussed in the past,

> but I think we never fully resolved the handling of the IPC_64

> flag, so it did not get merged so far.

> 

> With your current approach, this won't cause problems as architectures

> that don't have the individual calls with old kernel versions will

> still use the ipc() wrapper in the kernel.

> 


That's the idea and if a architecture eventually adds wire ipc support
it just need to correct undefine __ASSUME_SYSVIPC_SYSCALL within correct
kernel header version.

> 

> 	Arnd

>
diff mbox

Patch

diff --git a/sysdeps/unix/sysv/linux/i386/kernel-features.h b/sysdeps/unix/sysv/linux/i386/kernel-features.h
index 148963c..3da13d4 100644
--- a/sysdeps/unix/sysv/linux/i386/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/i386/kernel-features.h
@@ -52,3 +52,6 @@ 
 # undef __ASSUME_SENDMSG_SYSCALL
 # undef __ASSUME_RECVMSG_SYSCALL
 #endif
+
+/* i686 only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 1d3b554..cb0bc28 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -147,3 +147,7 @@ 
    separate syscalls were only added later.  */
 #define __ASSUME_SENDMSG_SYSCALL	1
 #define __ASSUME_RECVMSG_SYSCALL	1
+
+/* Support for SysV IPC through wired syscalls.  All supported architectures
+   either support ipc syscall and/or all the ipc correspondent syscalls.  */
+#define __ASSUME_SYSVIPC_SYSCALL	1
diff --git a/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index 46ec601..f0fd7ce 100644
--- a/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -54,3 +54,6 @@ 
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
+
+/* m68k only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/mips/kernel-features.h b/sysdeps/unix/sysv/linux/mips/kernel-features.h
index b486d90..5e88c8e 100644
--- a/sysdeps/unix/sysv/linux/mips/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/mips/kernel-features.h
@@ -32,6 +32,8 @@ 
    pairs to start with an even-number register.  */
 #if _MIPS_SIM == _ABIO32
 # define __ASSUME_ALIGNED_REGISTER_PAIRS	1
+/* mips32 only supports ipc syscall.  */
+# undef __ASSUME_SYSVIPC_SYSCALL
 #endif
 
 /* Define that mips64-n32 is a ILP32 ABI to set the correct interface to
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
index 42a53f2..a81caf3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
@@ -52,3 +52,6 @@ 
 #endif
 
 #include_next <kernel-features.h>
+
+/* powerpc only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/s390/kernel-features.h b/sysdeps/unix/sysv/linux/s390/kernel-features.h
index b3edee4..8fd7853 100644
--- a/sysdeps/unix/sysv/linux/s390/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/s390/kernel-features.h
@@ -48,3 +48,6 @@ 
 # undef __ASSUME_SENDMSG_SYSCALL
 # undef __ASSUME_RECVMSG_SYSCALL
 #endif
+ 
+/* s390 only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/sh/kernel-features.h b/sysdeps/unix/sysv/linux/sh/kernel-features.h
index c5240fa..cb09603 100644
--- a/sysdeps/unix/sysv/linux/sh/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sh/kernel-features.h
@@ -49,3 +49,6 @@ 
    the kernel interface for p{read,write}64 adds a dummy long argument
    before the offset.  */
 #define __ASSUME_PRW_DUMMY_ARG	1
+
+/* sh only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/sparc/kernel-features.h b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
index 69c9c7c..20578bb 100644
--- a/sysdeps/unix/sysv/linux/sparc/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/sparc/kernel-features.h
@@ -37,3 +37,6 @@ 
 # undef __ASSUME_REQUEUE_PI
 # undef __ASSUME_SET_ROBUST_LIST
 #endif
+
+/* sparc only supports ipc syscall.  */
+#undef __ASSUME_SYSVIPC_SYSCALL