printxval: support more architectures

* configure.ac: Define SIZEOF_LONG_LONG.
* util.c (printllval): Handle all architectures with sizeof(long) > 4
and sizeof(long) == sizeof(long long).
This commit is contained in:
Дмитрий Левин 2013-05-04 19:51:57 +00:00
parent 80acf62207
commit 7a498be266
2 changed files with 16 additions and 23 deletions

View File

@ -298,6 +298,7 @@ AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64],
fi)
AC_CHECK_SIZEOF([long])
AC_CHECK_SIZEOF([long long])
AC_CHECK_SIZEOF([rlim_t],,[#include <sys/resource.h>])
AC_CHECK_HEADERS([libaio.h], [

38
util.c
View File

@ -177,29 +177,26 @@ printxval(const struct xlat *xlat, int val, const char *dflt)
int
printllval(struct tcb *tcp, const char *format, int arg_no)
{
#if defined(X86_64) || defined(POWERPC64) || defined(TILE) || defined(AARCH64) || \
defined(LINUX_MIPSN64) || defined(SPARC64)
if (current_personality == 0) {
/* Technically, format expects "long long",
* but we supply "long". We expect that
* on this arch, they are the same.
*/
#if SIZEOF_LONG > 4 && SIZEOF_LONG == SIZEOF_LONG_LONG
# if SUPPORTED_PERSONALITIES > 1
if (current_wordsize > 4) {
# endif
tprintf(format, tcp->u_arg[arg_no]);
arg_no++;
# if SUPPORTED_PERSONALITIES > 1
} else {
# if defined(AARCH64) || defined(POWERPC64)
# if defined(AARCH64) || defined(POWERPC64)
/* Align arg_no to the next even number. */
arg_no = (arg_no + 1) & 0xe;
# endif
# endif
tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
arg_no += 2;
}
#elif defined IA64 || defined ALPHA || defined S390X
/* Technically, format expects "long long",
* but we supply "long". We expect that
* on this arch, they are the same.
*/
tprintf(format, tcp->u_arg[arg_no]);
# endif /* SUPPORTED_PERSONALITIES */
#elif SIZEOF_LONG > 4
# error Unsupported configuration: SIZEOF_LONG > 4 && SIZEOF_LONG_LONG > SIZEOF_LONG
#elif defined LINUX_MIPSN32
tprintf(format, tcp->ext_arg[arg_no]);
arg_no++;
#elif defined X32
if (current_personality == 0) {
@ -209,20 +206,15 @@ printllval(struct tcb *tcp, const char *format, int arg_no)
tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
arg_no += 2;
}
#elif defined LINUX_MIPSN32
tprintf(format, tcp->ext_arg[arg_no]);
arg_no++;
#else
# if SIZEOF_LONG > 4
# error BUG: must not combine two args for long long on this arch
# endif
#if defined(ARM) || defined(POWERPC)
# if defined(ARM) || defined(POWERPC)
/* Align arg_no to the next even number. */
arg_no = (arg_no + 1) & 0xe;
#endif
# endif
tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]));
arg_no += 2;
#endif
return arg_no;
}