Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | From: Nathan Rossi <nathan.rossi@xilinx.com> |
| 2 | Date: Tue, 27 Jan 2015 14:59:35 +1000 |
| 3 | Subject: [PATCH] Generic arch dectection for padding defines |
| 4 | |
| 5 | When available use the GNU C defines for endian and bitwidth to |
| 6 | determine the padding required. This reduces the need to define the |
| 7 | padding selection for every architecture. |
| 8 | |
| 9 | Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com> |
| 10 | Signed-off-by: Jeff Moyer <jmoyer@redhat.com> |
| 11 | Upstream-Status: Backport |
| 12 | --- |
| 13 | src/libaio.h | 16 ++++++++++++---- |
| 14 | 1 file changed, 12 insertions(+), 4 deletions(-) |
| 15 | |
| 16 | diff --git a/src/libaio.h b/src/libaio.h |
| 17 | index 1223146..4a4e0f5 100644 |
| 18 | --- a/src/libaio.h |
| 19 | +++ b/src/libaio.h |
| 20 | @@ -52,14 +52,18 @@ typedef enum io_iocb_cmd { |
| 21 | /* little endian, 32 bits */ |
| 22 | #if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \ |
| 23 | defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \ |
| 24 | - defined(__cris__) |
| 25 | + defined(__cris__) || \ |
| 26 | + (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ |
| 27 | + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 4) |
| 28 | #define PADDED(x, y) x; unsigned y |
| 29 | #define PADDEDptr(x, y) x; unsigned y |
| 30 | #define PADDEDul(x, y) unsigned long x; unsigned y |
| 31 | |
| 32 | /* little endian, 64 bits */ |
| 33 | #elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \ |
| 34 | - (defined(__aarch64__) && defined(__AARCH64EL__)) |
| 35 | + (defined(__aarch64__) && defined(__AARCH64EL__)) || \ |
| 36 | + (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ |
| 37 | + __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 8) |
| 38 | #define PADDED(x, y) x, y |
| 39 | #define PADDEDptr(x, y) x |
| 40 | #define PADDEDul(x, y) unsigned long x |
| 41 | @@ -67,7 +71,9 @@ typedef enum io_iocb_cmd { |
| 42 | /* big endian, 64 bits */ |
| 43 | #elif defined(__powerpc64__) || defined(__s390x__) || \ |
| 44 | (defined(__sparc__) && defined(__arch64__)) || \ |
| 45 | - (defined(__aarch64__) && defined(__AARCH64EB__)) |
| 46 | + (defined(__aarch64__) && defined(__AARCH64EB__)) || \ |
| 47 | + (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ |
| 48 | + __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 8) |
| 49 | #define PADDED(x, y) unsigned y; x |
| 50 | #define PADDEDptr(x,y) x |
| 51 | #define PADDEDul(x, y) unsigned long x |
| 52 | @@ -76,7 +82,9 @@ typedef enum io_iocb_cmd { |
| 53 | #elif defined(__PPC__) || defined(__s390__) || \ |
| 54 | (defined(__arm__) && defined(__ARMEB__)) || \ |
| 55 | defined(__sparc__) || defined(__MIPSEB__) || defined(__m68k__) || \ |
| 56 | - defined(__hppa__) || defined(__frv__) || defined(__avr32__) |
| 57 | + defined(__hppa__) || defined(__frv__) || defined(__avr32__) || \ |
| 58 | + (defined(__GNUC__) && defined(__BYTE_ORDER__) && \ |
| 59 | + __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 4) |
| 60 | #define PADDED(x, y) unsigned y; x |
| 61 | #define PADDEDptr(x, y) unsigned y; x |
| 62 | #define PADDEDul(x, y) unsigned y; unsigned long x |
| 63 | -- |
| 64 | 2.1.1 |
| 65 | |