Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37518178
en ru br
ALT Linux repositórios
S:0.3.113-alt1
5.0: 0.3.107-alt1
4.1: 0.3.106-alt2
4.0: 0.3.106-alt1
3.0: 0.3.104-alt1

Group :: Sistema/Bibliotecas
RPM: libaio

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: libaio-0.3.113.patch
Download


 .gear/libaio.spec            | 102 +++++++++++++++++++++++++++++++++++++++++++
 .gear/rules                  |   5 +++
 .gear/tags/list              |   1 +
 .gear/upstream/filter-tag    |   1 +
 .gear/upstream/remotes       |   3 ++
 .gear/upstream/transform-tag |   1 +
 Makefile                     |   5 ++-
 harness/Makefile             |   2 +-
 harness/main.c               |  10 +++++
 src/Makefile                 |  12 ++---
 src/compat-0_1.c             |   7 ++-
 src/io_cancel.c              |   2 +-
 src/io_getevents.c           |   2 +-
 src/io_pgetevents.c          |  38 +++++++++++++---
 src/io_queue_wait.c          |   2 +-
 src/libaio.h                 |  23 ++++++++--
 src/syscall-arm.h            |  10 ++---
 src/syscall-ia64.h           |  11 ++---
 src/syscall-m68k.h           |   5 +++
 src/syscall-mips.h           |  54 +++++++++++++++++++++++
 src/syscall-parisc.h         |   6 +++
 src/syscall-sh.h             |   6 +++
 src/syscall-x86_64.h         |  12 +++++
 src/syscall.h                |  25 ++++++++++-
 24 files changed, 308 insertions(+), 37 deletions(-)
diff --git a/.gear/libaio.spec b/.gear/libaio.spec
new file mode 100644
index 0000000..07ff145
--- /dev/null
+++ b/.gear/libaio.spec
@@ -0,0 +1,102 @@
+Name: libaio
+Version: 0.3.113
+Release: alt1
+
+Summary: Linux-native asynchronous I/O access library
+License: LGPLv2+
+Group: System/Libraries
+Url: https://pagure.io/libaio
+Source: %name-%version.tar
+Patch: %name-%version.patch
+
+BuildRequires: /proc
+
+%description
+The Linux-native asynchronous I/O facility ("async I/O", or "aio") has a richer
+API and capability set than the simple POSIX async I/O facility. This library,
+libaio, provides the Linux-native API for async I/O. The POSIX async I/O
+facility requires this library in order to provide kernel-accelerated async I/O
+capabilities, as do applications which require the Linux-native async I/O API.
+
+%package devel
+Summary: Development files for Linux-native asynchronous I/O access
+Group: Development/C
+Requires: libaio = %version-%release
+
+%description devel
+This package provides header files to include and libraries to link with
+for the Linux-native asynchronous I/O facility ("async I/O", or "aio").
+
+%package devel-static
+Summary: Linux-native asynchronous I/O access static library
+Group: Development/C
+Requires: libaio-devel = %version-%release
+
+%description devel-static
+This package contains static library for
+the Linux-native asynchronous I/O facility ("async I/O", or "aio").
+
+%prep
+%setup
+%patch -p1
+
+%build
+%make_build
+
+%install
+%makeinstall_std \
+	prefix=%_prefix libdir=/%_lib usrlibdir=%_libdir
+
+%check
+%make partcheck
+
+%files
+/%_lib/*.so.*
+
+%files devel
+%_libdir/*.so
+%_includedir/*
+
+%files devel-static
+%_libdir/*.a
+
+%changelog
+* Fri Mar 24 2023 Alexey Shabalin <shaba@altlinux.org> 0.3.113-alt1
+- new version 0.3.113
+
+* Thu Jun 24 2021 Alexey Shabalin <shaba@altlinux.org> 0.3.112-alt1
+- new version 0.3.112
+
+* Wed Jun 27 2018 Alexey Shabalin <shaba@altlinux.ru> 0.3.111-alt1
+- 0.3.111
+- add package with static library
+- add patches from debian for support more arches
+
+* Sat Jan 28 2017 Michael Shigorin <mike@altlinux.org> 0.3.110-alt1.1
+- E2K: partially added mcst patch.
+
+* Tue Aug 19 2014 Gleb F-Malinovskiy <glebfm@altlinux.org> 0.3.110-alt1
+- New version.
+
+* Thu Aug 11 2011 Dmitry V. Levin <ldv@altlinux.org> 0.3.109-alt2
+- Imported manpage fixes from Debian.
+- Made %name.so symlink relative.
+- Rebuilt for debuginfo.
+
+* Mon Oct 18 2010 Victor Forsiuk <force@altlinux.org> 0.3.109-alt1
+- 0.3.109
+
+* Wed Aug 26 2009 Victor Forsyuk <force@altlinux.org> 0.3.107-alt2
+- Move library to /lib (close: ALT#21230).
+
+* Mon Dec 15 2008 Victor Forsyuk <force@altlinux.org> 0.3.107-alt1
+- 0.3.107
+
+* Mon Apr 07 2008 Victor Forsyuk <force@altlinux.org> 0.3.106-alt2
+- One-letter spec fix, library symlink should be owned only by -devel.
+
+* Mon Apr 10 2006 Victor Forsyuk <force@altlinux.ru> 0.3.106-alt1
+- 0.3.106
+
+* Fri Jul 29 2005 Victor Forsyuk <force@altlinux.ru> 0.3.104-alt1
+- Initial build.
diff --git a/.gear/rules b/.gear/rules
new file mode 100644
index 0000000..ed8cbb6
--- /dev/null
+++ b/.gear/rules
@@ -0,0 +1,5 @@
+tar: @name@-@version@:.
+diff: @name@-@version@:. . name=@name@-@version@.patch
+spec: .gear/libaio.spec
+
+
diff --git a/.gear/tags/list b/.gear/tags/list
new file mode 100644
index 0000000..8cbb033
--- /dev/null
+++ b/.gear/tags/list
@@ -0,0 +1 @@
+1b18bfafc6a2f7b9fa2c6be77a95afed8b7be448 libaio-0.3.113
diff --git a/.gear/upstream/filter-tag b/.gear/upstream/filter-tag
new file mode 100755
index 0000000..b205ea5
--- /dev/null
+++ b/.gear/upstream/filter-tag
@@ -0,0 +1 @@
+grep libaio-
diff --git a/.gear/upstream/remotes b/.gear/upstream/remotes
new file mode 100644
index 0000000..bbfd2bb
--- /dev/null
+++ b/.gear/upstream/remotes
@@ -0,0 +1,3 @@
+[remote "upstream"]
+	url = https://pagure.io/libaio.git
+	fetch = +refs/heads/*:refs/remotes/upstream/*
diff --git a/.gear/upstream/transform-tag b/.gear/upstream/transform-tag
new file mode 100755
index 0000000..2440c5f
--- /dev/null
+++ b/.gear/upstream/transform-tag
@@ -0,0 +1 @@
+sed -e 's,libaio-,,'
diff --git a/Makefile b/Makefile
index c1fb831..859fc0b 100644
--- a/Makefile
+++ b/Makefile
@@ -4,9 +4,12 @@ VERSION=$(shell awk '/Version:/ { print $$2 }' $(SPECFILE))
 TAG = $(NAME)-$(VERSION)
 RPMBUILD=$(shell `which rpmbuild >&/dev/null` && echo "rpmbuild" || echo "rpm")
 
+DESTDIR=
 prefix=/usr
 includedir=$(prefix)/include
 libdir=$(prefix)/lib
+libdir=$(prefix)/lib
+usrlibdir=$(prefix)/lib
 
 default: all
 
@@ -14,7 +17,7 @@ all:
 	@$(MAKE) -C src
 
 install:
-	@$(MAKE) -C src install prefix=$(DESTDIR)$(prefix) includedir=$(DESTDIR)$(includedir) libdir=$(DESTDIR)$(libdir)
+	@$(MAKE) -C src install DESTDIR=$(DESTDIR) prefix=$(prefix) includedir=$(includedir) libdir=$(libdir) usrlibdir=$(usrlibdir)
 
 check:
 	@$(MAKE) -C harness check
diff --git a/harness/Makefile b/harness/Makefile
index 4f225d3..3da39b1 100644
--- a/harness/Makefile
+++ b/harness/Makefile
@@ -1,6 +1,6 @@
 # foo.
 TEST_SRCS:=$(shell find cases/ -name \*.t | sort -n -t/ -k2)
-EXTRAPROGS:=cases/8.p cases/10.p
+EXTRAPROGS:=cases/8.p cases/10.p cases/23.p
 PARTPROGS:=$(filter-out $(EXTRAPROGS), $(patsubst %.t,%.p,$(TEST_SRCS)))
 PROGS:=$(PARTPROGS) $(EXTRAPROGS)
 HARNESS_SRCS:=main.c
diff --git a/harness/main.c b/harness/main.c
index 82e9c69..c521693 100644
--- a/harness/main.c
+++ b/harness/main.c
@@ -12,7 +12,17 @@
 #include <libaio.h>
 
 #if __LP64__ == 0
+#if defined(__i386__) || defined(__powerpc__) || defined(__mips__)
 #define KERNEL_RW_POINTER	((void *)0xc0010000)
+#elif defined(__arm__) || defined(__m68k__) || defined(__s390__) || defined(__sh__) || defined(__x86_64__)
+#define KERNEL_RW_POINTER	((void *)0x00010000)
+#elif defined(__hppa__)
+#define KERNEL_RW_POINTER	((void *)0x10100000)
+#elif defined(__sparc__)
+#define KERNEL_RW_POINTER	((void *)0xf0010000)
+#else
+#error Unknown kernel memory address.
+#endif
 #else
 //#warning Not really sure where kernel memory is.  Guessing.
 #define KERNEL_RW_POINTER	((void *)0xffffffff81000000)
diff --git a/src/Makefile b/src/Makefile
index d080a1b..28e2822 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,6 +1,8 @@
+DESTDIR=
 prefix=/usr
 includedir=$(prefix)/include
 libdir=$(prefix)/lib
+usrlibdir=$(prefix)/lib
 
 CFLAGS ?= -g -fomit-frame-pointer -O2
 CFLAGS += -Wall -I. -fPIC
@@ -59,12 +61,12 @@ $(libname): $(libaio_sobjs) libaio.map
 	$(CC) $(SO_CFLAGS) -Wl,--version-script=libaio.map -Wl,-soname=$(soname) -o $@ $(libaio_sobjs) $(LINK_FLAGS)
 
 install: $(all_targets)
-	install -D -m 644 libaio.h $(includedir)/libaio.h
-	install -D -m 644 libaio.a $(libdir)/libaio.a
+	install -D -m 644 libaio.h $(DESTDIR)$(includedir)/libaio.h
+	install -D -m 644 libaio.a $(DESTDIR)$(usrlibdir)/libaio.a
 ifeq ($(ENABLE_SHARED),1)
-	install -D -m 755 $(libname) $(libdir)/$(libname)
-	ln -sf $(libname) $(libdir)/$(soname)
-	ln -sf $(libname) $(libdir)/libaio.so
+	install -D -m 644 $(libname) $(DESTDIR)$(libdir)/$(libname)
+	ln -sfr $(DESTDIR)$(libdir)/$(libname) $(DESTDIR)$(libdir)/$(soname)
+	ln -sfr $(DESTDIR)$(libdir)/$(libname) $(DESTDIR)$(usrlibdir)/libaio.so
 endif
 
 $(libaio_objs): libaio.h
diff --git a/src/compat-0_1.c b/src/compat-0_1.c
index 722e107..ac40fcc 100644
--- a/src/compat-0_1.c
+++ b/src/compat-0_1.c
@@ -28,7 +28,6 @@
 
 
 /* ABI change.  Provide partial compatibility on this one for now. */
-SYMVER(compat0_1_io_cancel, io_cancel, 0.1);
 int compat0_1_io_cancel(io_context_t ctx, struct iocb *iocb)
 {
 	struct io_event event;
@@ -36,8 +35,8 @@ int compat0_1_io_cancel(io_context_t ctx, struct iocb *iocb)
 	/* FIXME: the old ABI would return the event on the completion queue */
 	return io_cancel(ctx, iocb, &event);
 }
+SYMVER(compat0_1_io_cancel, io_cancel, 0.1);
 
-SYMVER(compat0_1_io_queue_wait, io_queue_wait, 0.1);
 int compat0_1_io_queue_wait(io_context_t ctx, struct timespec *when)
 {
 	struct timespec timeout;
@@ -45,10 +44,10 @@ int compat0_1_io_queue_wait(io_context_t ctx, struct timespec *when)
 		timeout = *when;
 	return io_getevents(ctx, 0, 0, NULL, when ? &timeout : NULL);
 }
+SYMVER(compat0_1_io_queue_wait, io_queue_wait, 0.1);
 
 
 /* ABI change.  Provide backwards compatibility for this one. */
-SYMVER(compat0_1_io_getevents, io_getevents, 0.1);
 int compat0_1_io_getevents(io_context_t ctx, long nr,
 		       struct io_event *events,
 		       const struct timespec *const_timeout)
@@ -59,4 +58,4 @@ int compat0_1_io_getevents(io_context_t ctx, long nr,
 	return io_getevents(ctx, 1, nr, events,
 			const_timeout ? &timeout : NULL);
 }
-
+SYMVER(compat0_1_io_getevents, io_getevents, 0.1);
diff --git a/src/io_cancel.c b/src/io_cancel.c
index 2f0f5f4..441806d 100644
--- a/src/io_cancel.c
+++ b/src/io_cancel.c
@@ -20,4 +20,4 @@
 #include "syscall.h"
 
 io_syscall3(int, io_cancel_0_4, io_cancel, io_context_t, ctx, struct iocb *, iocb, struct io_event *, event)
-DEFSYMVER(io_cancel_0_4, io_cancel, 0.4)
+DEFSYMVER(io_cancel_0_4, io_cancel, 0.4);
diff --git a/src/io_getevents.c b/src/io_getevents.c
index 90d6081..88d285a 100644
--- a/src/io_getevents.c
+++ b/src/io_getevents.c
@@ -32,4 +32,4 @@ int io_getevents_0_4(io_context_t ctx, long min_nr, long nr, struct io_event * e
 	return __io_getevents_0_4(ctx, min_nr, nr, events, timeout);
 }
 
-DEFSYMVER(io_getevents_0_4, io_getevents, 0.4)
+DEFSYMVER(io_getevents_0_4, io_getevents, 0.4);
diff --git a/src/io_pgetevents.c b/src/io_pgetevents.c
index e6b0614..b2515f2 100644
--- a/src/io_pgetevents.c
+++ b/src/io_pgetevents.c
@@ -33,17 +33,41 @@ int io_pgetevents(io_context_t ctx, long min_nr, long nr,
 		struct io_event *events, struct timespec *timeout,
 		sigset_t *sigmask)
 {
-	struct {
-		unsigned long ss;
-		unsigned long ss_len;
-	} data;
+	struct io_sigset aio_sigset;
+#ifndef __LP64__
+	struct io_sigset_compat aio_sigset_compat = { 0 };
+#endif
+	int ret;
 
 	if (aio_ring_is_empty(ctx, timeout))
 		return 0;
 
-	data.ss = (unsigned long)sigmask;
-	data.ss_len = _NSIG / 8;
-	return __io_pgetevents(ctx, min_nr, nr, events, timeout, &data);
+	aio_sigset.ss = (unsigned long)sigmask;
+	aio_sigset.ss_len = _NSIG / 8;
+	ret = __io_pgetevents(ctx, min_nr, nr, events, timeout, &aio_sigset);
+
+#ifndef __LP64__
+	/*
+	 * The compat kernel syscall got introduced with an broken layout for
+	 * its sigset argument, expecting it to contain a pointer for the
+	 * non-compat pointer size.
+	 *
+	 * To cope with this on unfixed kernels, in case we are built as a
+	 * 32-bit library (which could run on a kernel with compat code) and
+	 * when the syscall returns EINVAL due to the kernel not finding the
+	 * sigset size member when unpacking the structure, we retry with
+	 * the fixed up compat layout, which requires the padding to be
+	 * zero-filled, otherwise the 64-bit pointer will contain garbage.
+	 */
+	if (ret != -EINVAL)
+		return ret;
+
+	aio_sigset_compat.ss = (unsigned long)sigmask;
+	aio_sigset_compat.ss_len = _NSIG / 8;
+	ret = __io_pgetevents(ctx, min_nr, nr, events, timeout, &aio_sigset_compat);
+#endif
+
+	return ret;
 }
 #else
 int io_pgetevents(io_context_t ctx, long min_nr, long nr,
diff --git a/src/io_queue_wait.c b/src/io_queue_wait.c
index 538d2f3..6f69a51 100644
--- a/src/io_queue_wait.c
+++ b/src/io_queue_wait.c
@@ -28,4 +28,4 @@ int io_queue_wait_0_4(io_context_t ctx, struct timespec *timeout)
 {
 	return io_getevents(ctx, 0, 0, NULL, timeout);
 }
-DEFSYMVER(io_queue_wait_0_4, io_queue_wait, 0.4)
+DEFSYMVER(io_queue_wait_0_4, io_queue_wait, 0.4);
diff --git a/src/libaio.h b/src/libaio.h
index 24b4b8a..28cec59 100644
--- a/src/libaio.h
+++ b/src/libaio.h
@@ -52,9 +52,10 @@ typedef enum io_iocb_cmd {
 
 /* little endian, 32 bits */
 #if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \
-    defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \
-    defined(__cris__) || defined(__loongarch32) || \
-    (defined(__riscv) && __riscv_xlen == 32) || \
+    (defined(__sh__) && defined(__LITTLE_ENDIAN__)) || \
+    defined(__bfin__) || \
+    (defined(__MIPSEL__) && !defined(__mips64)) || \
+    defined(__cris__) || defined(__loongarch32) || (defined(__riscv) && __riscv_xlen == 32) || \
     (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
          __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 4)
 #define PADDED(x, y)	x; unsigned y
@@ -62,7 +63,8 @@ typedef enum io_iocb_cmd {
 #define PADDEDul(x, y)	unsigned long x; unsigned y
 
 /* little endian, 64 bits */
-#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
+#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || defined(__e2k__) || \
+      (defined(__mips64) && defined(__MIPSEL__)) || \
       (defined(__aarch64__) && defined(__AARCH64EL__)) || \
       defined(__loongarch64) || \
       (defined(__riscv) && __riscv_xlen == 64) || \
@@ -74,7 +76,9 @@ typedef enum io_iocb_cmd {
 
 /* big endian, 64 bits */
 #elif defined(__powerpc64__) || defined(__s390x__) || \
+      (defined(__hppa__) && defined(__arch64__)) || \
       (defined(__sparc__) && defined(__arch64__)) || \
+      (defined(__mips64) && defined(__MIPSEB__)) || \
       (defined(__aarch64__) && defined(__AARCH64EB__)) || \
       (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
            __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 8)
@@ -85,6 +89,7 @@ typedef enum io_iocb_cmd {
 /* big endian, 32 bits */
 #elif defined(__PPC__) || defined(__s390__) || \
       (defined(__arm__) && defined(__ARMEB__)) || \
+      (defined(__sh__) && defined (__BIG_ENDIAN__)) || \
       defined(__sparc__) || defined(__MIPSEB__) || defined(__m68k__) || \
       defined(__hppa__) || defined(__frv__) || defined(__avr32__) || \
       (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
@@ -146,6 +151,16 @@ struct io_event {
 	PADDEDul(res2, __pad4);
 };
 
+struct io_sigset {
+	unsigned long ss;
+	unsigned long ss_len;
+};
+
+struct io_sigset_compat {
+	PADDEDptr(unsigned long ss, __ss_pad);
+	unsigned long ss_len;
+};
+
 #undef PADDED
 #undef PADDEDptr
 #undef PADDEDul
diff --git a/src/syscall-arm.h b/src/syscall-arm.h
index 556852b..315a37b 100644
--- a/src/syscall-arm.h
+++ b/src/syscall-arm.h
@@ -19,8 +19,8 @@
 #define __NR_SYSCALL_BASE	__NR_OABI_SYSCALL_BASE
 #endif
 
-#define __NR_io_setup			(__NR_SYSCALL_BASE+243)
-#define __NR_io_destroy			(__NR_SYSCALL_BASE+244)
-#define __NR_io_getevents		(__NR_SYSCALL_BASE+245)
-#define __NR_io_submit			(__NR_SYSCALL_BASE+246)
-#define __NR_io_cancel			(__NR_SYSCALL_BASE+247)
+#define __NR_io_setup		(__NR_SYSCALL_BASE + 243)
+#define __NR_io_destroy		(__NR_SYSCALL_BASE + 244)
+#define __NR_io_getevents	(__NR_SYSCALL_BASE + 245)
+#define __NR_io_submit		(__NR_SYSCALL_BASE + 246)
+#define __NR_io_cancel		(__NR_SYSCALL_BASE + 247)
diff --git a/src/syscall-ia64.h b/src/syscall-ia64.h
index a21e93b..765c423 100644
--- a/src/syscall-ia64.h
+++ b/src/syscall-ia64.h
@@ -1,5 +1,6 @@
-#define __NR_io_setup		1238
-#define __NR_io_destroy		1239
-#define __NR_io_getevents	1240
-#define __NR_io_submit		1241
-#define __NR_io_cancel		1242
+#define __NR_Linux		1024
+#define __NR_io_setup		(__NR_Linux + 214)
+#define __NR_io_destroy		(__NR_Linux + 215)
+#define __NR_io_getevents	(__NR_Linux + 216)
+#define __NR_io_submit		(__NR_Linux + 217)
+#define __NR_io_cancel		(__NR_Linux + 218)
diff --git a/src/syscall-m68k.h b/src/syscall-m68k.h
new file mode 100644
index 0000000..2dd4a9b
--- /dev/null
+++ b/src/syscall-m68k.h
@@ -0,0 +1,5 @@
+#define __NR_io_setup		241
+#define __NR_io_destroy		242
+#define __NR_io_getevents	243
+#define __NR_io_submit		244
+#define __NR_io_cancel		245
diff --git a/src/syscall-mips.h b/src/syscall-mips.h
new file mode 100644
index 0000000..2c4245e
--- /dev/null
+++ b/src/syscall-mips.h
@@ -0,0 +1,54 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1995, 96, 97, 98, 99, 2000 by Ralf Baechle
+ * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
+ */
+
+#ifndef _MIPS_SIM_ABI32
+#define _MIPS_SIM_ABI32			1
+#define _MIPS_SIM_NABI32		2
+#define _MIPS_SIM_ABI64			3
+#endif
+
+#if _MIPS_SIM == _MIPS_SIM_ABI32
+
+/*
+ * Linux o32 style syscalls are in the range from 4000 to 4999.
+ */
+#define __NR_Linux			4000
+#define __NR_io_setup			(__NR_Linux + 241)
+#define __NR_io_destroy			(__NR_Linux + 242)
+#define __NR_io_getevents		(__NR_Linux + 243)
+#define __NR_io_submit			(__NR_Linux + 244)
+#define __NR_io_cancel			(__NR_Linux + 245)
+
+#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
+
+#if _MIPS_SIM == _MIPS_SIM_ABI64
+
+/*
+ * Linux 64-bit syscalls are in the range from 5000 to 5999.
+ */
+#define __NR_Linux			5000
+#define __NR_io_setup			(__NR_Linux + 200)
+#define __NR_io_destroy			(__NR_Linux + 201)
+#define __NR_io_getevents		(__NR_Linux + 202)
+#define __NR_io_submit			(__NR_Linux + 203)
+#define __NR_io_cancel			(__NR_Linux + 204)
+#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
+
+#if _MIPS_SIM == _MIPS_SIM_NABI32
+
+/*
+ * Linux N32 syscalls are in the range from 6000 to 6999.
+ */
+#define __NR_Linux			6000
+#define __NR_io_setup			(__NR_Linux + 200)
+#define __NR_io_destroy			(__NR_Linux + 201)
+#define __NR_io_getevents		(__NR_Linux + 202)
+#define __NR_io_submit			(__NR_Linux + 203)
+#define __NR_io_cancel			(__NR_Linux + 204)
+#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
diff --git a/src/syscall-parisc.h b/src/syscall-parisc.h
new file mode 100644
index 0000000..252dccb
--- /dev/null
+++ b/src/syscall-parisc.h
@@ -0,0 +1,6 @@
+#define __NR_Linux                0
+#define __NR_io_setup           (__NR_Linux + 215)
+#define __NR_io_destroy         (__NR_Linux + 216)
+#define __NR_io_getevents       (__NR_Linux + 217)
+#define __NR_io_submit          (__NR_Linux + 218)
+#define __NR_io_cancel          (__NR_Linux + 219)
diff --git a/src/syscall-sh.h b/src/syscall-sh.h
new file mode 100644
index 0000000..6c00573
--- /dev/null
+++ b/src/syscall-sh.h
@@ -0,0 +1,6 @@
+/* Copy from ./arch/sh/include/asm/unistd_32.h */
+#define __NR_io_setup       245
+#define __NR_io_destroy     246
+#define __NR_io_getevents   247
+#define __NR_io_submit      248
+#define __NR_io_cancel      249
diff --git a/src/syscall-x86_64.h b/src/syscall-x86_64.h
index 0eccef3..fc2dd98 100644
--- a/src/syscall-x86_64.h
+++ b/src/syscall-x86_64.h
@@ -1,6 +1,18 @@
+#ifndef __NR_io_setup
 #define __NR_io_setup		206
+#endif
+#ifndef __NR_io_destroy
 #define __NR_io_destroy		207
+#endif
+#ifndef __NR_io_getevents
 #define __NR_io_getevents	208
+#endif
+#ifndef __NR_io_submit
 #define __NR_io_submit		209
+#endif
+#ifndef __NR_io_cancel
 #define __NR_io_cancel		210
+#endif
+#ifndef __NR_io_pgetevents
 #define __NR_io_pgetevents	333
+#endif
diff --git a/src/syscall.h b/src/syscall.h
index d2a117b..57dd1fa 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -2,14 +2,27 @@
 #include <unistd.h>
 #include <errno.h>
 
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
 #define _SYMSTR(str)	#str
 #define SYMSTR(str)	_SYMSTR(str)
 
+#if __has_attribute(__symver__)
+#define SYMVER(compat_sym, orig_sym, ver_sym)	\
+	extern __typeof(compat_sym) compat_sym \
+	  __attribute__((__symver__(SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym))))
+#define DEFSYMVER(compat_sym, orig_sym, ver_sym)	\
+	extern __typeof(compat_sym) compat_sym \
+	  __attribute__((__symver__(SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym))))
+#else
 #define SYMVER(compat_sym, orig_sym, ver_sym)	\
-	__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym));
+	__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@LIBAIO_" SYMSTR(ver_sym))
 
 #define DEFSYMVER(compat_sym, orig_sym, ver_sym)	\
-	__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym));
+	__asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym))
+#endif
 
 #if defined(__i386__)
 #include "syscall-i386.h"
@@ -27,6 +40,14 @@
 #include "syscall-arm.h"
 #elif defined(__sparc__)
 #include "syscall-sparc.h"
+#elif defined(__m68k__)
+#include "syscall-m68k.h"
+#elif defined(__hppa__)
+#include "syscall-parisc.h"
+#elif defined(__mips__)
+#include "syscall-mips.h"
+#elif defined(__sh__)
+#include "syscall-sh.h"
 #elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
 #include "syscall-generic.h"
 #else
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009