From: Guillem Jover Date: Wed, 14 Aug 2019 01:18:50 +0000 (+0200) Subject: [PATCH libaio 04/11] Fix and improve MIPS support X-Git-Tag: archive/raspbian/0.3.112-13+rpi1~1^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=dc51b09ff6fd3985a8aa6d574a3787678d8d2142;p=libaio.git [PATCH libaio 04/11] Fix and improve MIPS support Fix structure padding for MIPS 64, add syscall definitions, and the kernel R/W pointer. Signed-off-by: Guillem Jover Gbp-Pq: Name 0004-Fix-and-improve-MIPS-support.patch --- diff --git a/harness/main.c b/harness/main.c index 0eed7bd..33d8e46 100644 --- a/harness/main.c +++ b/harness/main.c @@ -12,7 +12,7 @@ #include #if __LP64__ == 0 -#if defined(__i386__) || defined(__powerpc__) +#if defined(__i386__) || defined(__powerpc__) || defined(__mips__) #define KERNEL_RW_POINTER ((void *)0xc0010000) #elif defined(__arm__) || defined(__s390__) #define KERNEL_RW_POINTER ((void *)0x00010000) diff --git a/src/libaio.h b/src/libaio.h index 8b33382..26b07f9 100644 --- a/src/libaio.h +++ b/src/libaio.h @@ -52,7 +52,9 @@ typedef enum io_iocb_cmd { /* little endian, 32 bits */ #if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \ - defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \ + defined(__sh__) || \ + defined(__bfin__) || \ + (defined(__MIPSEL__) && !defined(__mips64)) || \ defined(__cris__) || (defined(__riscv) && __riscv_xlen == 32) || \ (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 4) @@ -62,6 +64,7 @@ typedef enum io_iocb_cmd { /* little endian, 64 bits */ #elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \ + (defined(__mips64) && defined(__MIPSEL__)) || \ (defined(__aarch64__) && defined(__AARCH64EL__)) || \ (defined(__riscv) && __riscv_xlen == 64) || \ (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ @@ -73,6 +76,7 @@ typedef enum io_iocb_cmd { /* big endian, 64 bits */ #elif defined(__powerpc64__) || defined(__s390x__) || \ (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) 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.h b/src/syscall.h index b53da4c..db78e28 100644 --- a/src/syscall.h +++ b/src/syscall.h @@ -27,6 +27,8 @@ #include "syscall-arm.h" #elif defined(__sparc__) #include "syscall-sparc.h" +#elif defined(__mips__) +#include "syscall-mips.h" #elif defined(__aarch64__) || defined(__riscv) #include "syscall-generic.h" #else