From: Dmitry V. Levin Date: Fri, 3 May 2013 22:27:45 +0000 (+0000) Subject: arm, aarch64, ppc: fix printllval-based decoders X-Git-Tag: v4.8~52 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a55b6b193c0bc7e84fd3b56be20ce546c51eb068;p=strace arm, aarch64, ppc: fix printllval-based decoders * util.c (printllval) [ARM || POWERPC]: Align argument number. [AARCH64]: Align argument number in 32bit mode. * file.c (sys_fadvise64_64) [ARM || POWERPC]: Remove no longer needed printllval workaround. [AARCH64]: Fix printing POSIX_FADV_* constants in 32bit mode. --- diff --git a/file.c b/file.c index 35f2b710..94644673 100644 --- a/file.c +++ b/file.c @@ -2681,13 +2681,9 @@ sys_fadvise64_64(struct tcb *tcp) if (entering(tcp)) { int argn; printfd(tcp, tcp->u_arg[0]); -#if defined ARM || defined POWERPC - argn = printllval(tcp, ", %lld, ", 2); -#else argn = printllval(tcp, ", %lld, ", 1); -#endif argn = printllval(tcp, "%lld, ", argn); -#if defined ARM || defined POWERPC +#if defined ARM || defined AARCH64 || defined POWERPC printxval(advise, tcp->u_arg[1], "POSIX_FADV_???"); #else printxval(advise, tcp->u_arg[argn], "POSIX_FADV_???"); diff --git a/util.c b/util.c index eda66692..6f9f5057 100644 --- a/util.c +++ b/util.c @@ -186,8 +186,8 @@ printllval(struct tcb *tcp, const char *format, int arg_no) tprintf(format, tcp->u_arg[arg_no]); arg_no++; } else { -# if defined(POWERPC64) - /* Align arg_no to next even number */ +# if defined(AARCH64) || defined(POWERPC64) + /* Align arg_no to the next even number. */ arg_no = (arg_no + 1) & 0xe; # endif tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1])); @@ -215,6 +215,10 @@ printllval(struct tcb *tcp, const char *format, int arg_no) # if SIZEOF_LONG > 4 # error BUG: must not combine two args for long long on this arch # endif +#if defined(ARM) || defined(POWERPC) + /* Align arg_no to the next even number. */ + arg_no = (arg_no + 1) & 0xe; +#endif tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1])); arg_no += 2; #endif