From: Dmitry V. Levin Date: Mon, 17 Jul 2017 11:59:26 +0000 (+0000) Subject: aio: use PRINT_FIELD_* macros X-Git-Tag: v4.19~254 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6fe6c27917885e7178548514c7c214d5372f7f6f;p=strace aio: use PRINT_FIELD_* macros This also fixes output correctness for struct iocb. * aio.c: Include "print_fields.h". (print_common_flags, print_iocb_header, print_iocb, print_io_event): Use PRINT_FIELD_D, PRINT_FIELD_U, PRINT_FIELD_X, PRINT_FIELD_FD, and PRINT_FIELD_STRN. * tests/aio.c (main): Update expected output. --- diff --git a/aio.c b/aio.c index 7adb20df..27799a99 100644 --- a/aio.c +++ b/aio.c @@ -30,6 +30,7 @@ */ #include "defs.h" +#include "print_fields.h" #include SYS_FUNC(io_setup) @@ -84,12 +85,11 @@ print_common_flags(struct tcb *tcp, const struct iocb *cb) { /* IOCB_FLAG_RESFD is available since v2.6.22-rc1~47 */ #ifdef IOCB_FLAG_RESFD - if (cb->aio_flags & IOCB_FLAG_RESFD) { - tprints(", resfd="); - printfd(tcp, cb->aio_resfd); - } + if (cb->aio_flags & IOCB_FLAG_RESFD) + PRINT_FIELD_FD(", ", *cb, aio_resfd, tcp); + if (cb->aio_flags & ~IOCB_FLAG_RESFD) - tprintf(", flags=%#x", cb->aio_flags); + PRINT_FIELD_X(", ", *cb, aio_flags); #endif } @@ -106,19 +106,22 @@ print_iocb_header(struct tcb *tcp, const struct iocb *cb) { enum iocb_sub sub; - if (cb->aio_data) - tprintf("data=%#" PRIx64 ", ", - (uint64_t) cb->aio_data); + if (cb->aio_data){ + PRINT_FIELD_X("", *cb, aio_data); + tprints(", "); + } - if (cb->aio_key) - tprintf("key=%u, ", cb->aio_key); + if (cb->aio_key) { + PRINT_FIELD_U("", *cb, aio_key); + tprints(", "); + } + tprints("aio_lio_opcode="); sub = tprint_lio_opcode(cb->aio_lio_opcode); if (cb->aio_reqprio) - tprintf(", reqprio=%hd", cb->aio_reqprio); + PRINT_FIELD_D(", ", *cb, aio_reqprio); - tprints(", fildes="); - printfd(tcp, cb->aio_fildes); + PRINT_FIELD_FD(", ", *cb, aio_fildes, tcp); return sub; } @@ -131,28 +134,27 @@ print_iocb(struct tcb *tcp, const struct iocb *cb) switch (sub) { case SUB_COMMON: if (cb->aio_lio_opcode == 1 && iocb_is_valid(cb)) { - tprints(", str="); - printstrn(tcp, cb->aio_buf, cb->aio_nbytes); + PRINT_FIELD_STRN(", ", *cb, aio_buf, + cb->aio_nbytes, tcp); } else { - tprintf(", buf=%#" PRIx64, (uint64_t) cb->aio_buf); + PRINT_FIELD_X(", ", *cb, aio_buf); } - tprintf(", nbytes=%" PRIu64 ", offset=%" PRId64, - (uint64_t) cb->aio_nbytes, (int64_t) cb->aio_offset); + PRINT_FIELD_U(", ", *cb, aio_nbytes); + PRINT_FIELD_D(", ", *cb, aio_offset); print_common_flags(tcp, cb); break; case SUB_VECTOR: if (iocb_is_valid(cb)) { - tprints(", iovec="); + tprints(", aio_buf="); tprint_iov(tcp, cb->aio_nbytes, cb->aio_buf, cb->aio_lio_opcode == 8 ? IOV_DECODE_STR : IOV_DECODE_ADDR); } else { - tprintf(", buf=%#" PRIx64 ", nbytes=%" PRIu64, - (uint64_t) cb->aio_buf, - (uint64_t) cb->aio_nbytes); + PRINT_FIELD_X(", ", *cb, aio_buf); + PRINT_FIELD_U(", ", *cb, aio_nbytes); } - tprintf(", offset=%" PRId64, (int64_t) cb->aio_offset); + PRINT_FIELD_D(", ", *cb, aio_offset); print_common_flags(tcp, cb); break; case SUB_NONE: @@ -204,10 +206,11 @@ print_io_event(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data) { struct io_event *event = elem_buf; - tprintf("{data=%#" PRIx64 ", obj=%#" PRIx64 - ", res=%" PRId64 ", res2=%" PRId64 "}", - (uint64_t) event->data, (uint64_t) event->obj, - (int64_t) event->res, (int64_t) event->res2); + PRINT_FIELD_X("{", *event, data); + PRINT_FIELD_X(", ", *event, obj); + PRINT_FIELD_D(", ", *event, res); + PRINT_FIELD_D(", ", *event, res2); + tprints("}"); return true; } diff --git a/tests/aio.c b/tests/aio.c index 77b6c05d..4ba1bec5 100644 --- a/tests/aio.c +++ b/tests/aio.c @@ -239,11 +239,12 @@ main(void) if (rc != (long) nr) perror_msg_and_skip("io_submit"); printf("io_submit(%#lx, %u, [" - "{data=%#" PRI__x64 ", pread, reqprio=11, fildes=0, " - "buf=%p, nbytes=%u, offset=%" PRI__d64 "}, " - "{data=%#" PRI__x64 ", pread, reqprio=22, fildes=0, " - "buf=%p, nbytes=%u, offset=%" PRI__d64 "}" - "]) = %s\n", + "{aio_data=%#" PRI__x64 ", aio_lio_opcode=pread, aio_reqprio=11" + ", aio_fildes=0, aio_buf=%p, aio_nbytes=%u, aio_offset=%" + PRI__d64 "}, " + "{aio_data=%#" PRI__x64 ", aio_lio_opcode=pread, aio_reqprio=22" + ", aio_fildes=0, aio_buf=%p, aio_nbytes=%u, aio_offset=%" + PRI__d64 "}]) = %s\n", *ctx, nr, cb[0].aio_data, data0, sizeof_data0, cb[0].aio_offset, cb[1].aio_data, data1, sizeof_data1, cb[1].aio_offset, @@ -299,8 +300,8 @@ main(void) sprintrc(rc)); rc = syscall(__NR_io_cancel, *ctx, cbc, ev); - printf("io_cancel(%#lx, {data=%#" PRI__x64 - ", pread, reqprio=99, fildes=-42}, %p) = %s\n", + printf("io_cancel(%#lx, {aio_data=%#" PRI__x64 ", aio_lio_opcode=pread" + ", aio_reqprio=99, aio_fildes=-42}, %p) = %s\n", *ctx, cbc->aio_data, ev, sprintrc(rc)); rc = syscall(__NR_io_submit, (unsigned long) 0xfacef157beeff00dULL, @@ -315,21 +316,24 @@ main(void) rc = syscall(__NR_io_submit, *ctx, 1057L, cbvs2); printf("io_submit(%#lx, %ld, [" - "{data=%#" PRI__x64 ", key=%u, %hu /* SUB_??? */, fildes=%d}, " - "{key=%u, pwrite, reqprio=%hd, fildes=%d, str=NULL" - ", nbytes=%" PRI__u64 ", offset=%" PRI__d64 + "{aio_data=%#" PRI__x64 ", aio_key=%u" + ", aio_lio_opcode=%hu /* SUB_??? */, aio_fildes=%d}" + ", {aio_key=%u, aio_lio_opcode=pwrite, aio_reqprio=%hd" + ", aio_fildes=%d, aio_buf=NULL" + ", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64 # ifdef IOCB_FLAG_RESFD - ", resfd=%d, flags=%#x" + ", aio_resfd=%d, aio_flags=%#x" # endif - "}, " - "{key=%u, pwrite, reqprio=%hd, fildes=%d, buf=%#" PRI__x64 - ", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, " - "{key=%u, pwrite, reqprio=%hd, fildes=%d" - ", str=\"\\0\\1\\2\\3%.28s\"..." - ", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}, " - "{key=%u, pwritev, reqprio=%hd, fildes=%d, buf=%#" PRI__x64 - ", nbytes=%" PRI__u64 ", offset=%" PRI__d64 "}" - ", {NULL}, {%#lx}, %p]) = %s\n", + "}, {aio_key=%u, aio_lio_opcode=pwrite, aio_reqprio=%hd" + ", aio_fildes=%d, aio_buf=%#" PRI__x64 + ", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64 + "}, {aio_key=%u, aio_lio_opcode=pwrite, aio_reqprio=%hd" + ", aio_fildes=%d, aio_buf=\"\\0\\1\\2\\3%.28s\"..." + ", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64 + "}, {aio_key=%u, aio_lio_opcode=pwritev, aio_reqprio=%hd" + ", aio_fildes=%d, aio_buf=%#" PRI__x64 + ", aio_nbytes=%" PRI__u64 ", aio_offset=%" PRI__d64 + "}, {NULL}, {%#lx}, %p]) = %s\n", *ctx, 1057L, cbv2[0].aio_data, cbv2[0].aio_key, cbv2[0].aio_lio_opcode, cbv2[0].aio_fildes, @@ -350,12 +354,14 @@ main(void) if (rc != (long) nr) perror_msg_and_skip("io_submit"); printf("io_submit(%#lx, %u, [" - "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, " - "iovec=[{iov_base=%p, iov_len=%u}" - ", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}, " - "{data=%#" PRI__x64 ", preadv, reqprio=%hd, fildes=0, " - "iovec=[{iov_base=%p, iov_len=%u}" - ", {iov_base=%p, iov_len=%u}], offset=%" PRI__d64 "}" + "{aio_data=%#" PRI__x64 ", aio_lio_opcode=preadv" + ", aio_reqprio=%hd, aio_fildes=0, " + "aio_buf=[{iov_base=%p, iov_len=%u}" + ", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}, " + "{aio_data=%#" PRI__x64 ", aio_lio_opcode=preadv" + ", aio_reqprio=%hd, aio_fildes=0" + ", aio_buf=[{iov_base=%p, iov_len=%u}" + ", {iov_base=%p, iov_len=%u}], aio_offset=%" PRI__d64 "}" "]) = %s\n", *ctx, nr, cbv[0].aio_data, cbv[0].aio_reqprio,