From: Dmitry V. Levin Date: Mon, 18 Mar 2013 23:28:29 +0000 (+0000) Subject: Fix build with older versions of libaio.h X-Git-Tag: v4.8~84 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b211d8df0c28490b883fb521329faab384d4520;p=strace Fix build with older versions of libaio.h * configure.ac: When libaio.h is available, check for struct iocb.u.c.flags, IO_CMD_PWRITE and IO_CMD_PWRITEV. * desc.c (print_common_flags): Check for HAVE_STRUCT_IOCB_U_C_FLAGS. (sys_io_submit): Check for HAVE_DECL_IO_CMD_PWRITE and HAVE_DECL_IO_CMD_PWRITEV. --- diff --git a/configure.ac b/configure.ac index 998324d2..2f813820 100644 --- a/configure.ac +++ b/configure.ac @@ -204,7 +204,6 @@ AC_CHECK_HEADERS(m4_normalize([ elf.h inttypes.h ioctls.h - libaio.h linux/capability.h linux/perf_event.h linux/ptrace.h @@ -294,6 +293,11 @@ AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64], AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([rlim_t],,[#include ]) +AC_CHECK_HEADERS([libaio.h], [ + AC_CHECK_MEMBERS([struct iocb.u.c.flags],,, [#include ]) + AC_CHECK_DECLS([IO_CMD_PWRITE, IO_CMD_PWRITEV],,, [#include ]) +]) + AC_PATH_PROG([PERL], [perl]) AC_CONFIG_FILES([Makefile tests/Makefile]) diff --git a/desc.c b/desc.c index d3faf3ad..69d9e438 100644 --- a/desc.c +++ b/desc.c @@ -854,10 +854,14 @@ iocb_cmd_lookup(unsigned cmd, enum iocb_sub *sub) static void print_common_flags(struct iocb *iocb) { +#if HAVE_STRUCT_IOCB_U_C_FLAGS if (iocb->u.c.flags & IOCB_RESFD) tprintf(", resfd=%d", iocb->u.c.resfd); if (iocb->u.c.flags & ~IOCB_RESFD) tprintf(", flags=%x", iocb->u.c.flags); +#else +# warning "libaio.h is too old => limited io_submit decoding" +#endif } #endif /* HAVE_LIBAIO_H */ @@ -901,13 +905,14 @@ sys_io_submit(struct tcb *tcp) tprintf("filedes:%d", iocb.aio_fildes); switch (sub) { case SUB_COMMON: +#if HAVE_DECL_IO_CMD_PWRITE if (iocb.aio_lio_opcode == IO_CMD_PWRITE) { tprints(", str:"); printstr(tcp, (unsigned long)iocb.u.c.buf, iocb.u.c.nbytes); - } else { + } else +#endif tprintf(", buf:%p", iocb.u.c.buf); - } tprintf(", nbytes:%lu, offset:%llx", iocb.u.c.nbytes, iocb.u.c.offset); @@ -919,7 +924,12 @@ sys_io_submit(struct tcb *tcp) tprints(", "); tprint_iov(tcp, iocb.u.v.nr, (unsigned long)iocb.u.v.vec, - iocb.aio_lio_opcode == IO_CMD_PWRITEV); +#if HAVE_DECL_IO_CMD_PWRITEV + iocb.aio_lio_opcode == IO_CMD_PWRITEV +#else + 0 +#endif + ); break; case SUB_POLL: tprintf(", %x", iocb.u.poll.events); @@ -932,7 +942,7 @@ sys_io_submit(struct tcb *tcp) if (i) tprints("}"); #else -#warning "libaio-devel is not available => no io_submit decoding" +#warning "libaio.h is not available => no io_submit decoding" tprintf("%#lx", tcp->u_arg[2]); #endif }