diff options
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | defs.h | 2 | ||||
-rw-r--r-- | resource.c | 22 |
3 files changed, 13 insertions, 12 deletions
diff --git a/configure.ac b/configure.ac index 0969173..e5c837b 100644 --- a/configure.ac +++ b/configure.ac @@ -309,7 +309,6 @@ AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64], AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) AC_CHECK_SIZEOF([off_t],,[#include <sys/types.h>]) -AC_CHECK_SIZEOF([rlim_t],,[#include <sys/resource.h>]) AC_CACHE_CHECK([for SA_RESTORER], [st_cv_sa_restorer], [st_cv_sa_restorer="$(echo SA_RESTORER | @@ -370,7 +370,7 @@ struct arm_pt_regs { # define DEFAULT_PERSONALITY 0 #endif #ifndef PERSONALITY0_WORDSIZE -# define PERSONALITY0_WORDSIZE (int)(sizeof(long)) +# define PERSONALITY0_WORDSIZE SIZEOF_LONG #endif #if defined(I386) || defined(X86_64) @@ -88,10 +88,6 @@ static const struct xlat resources[] = { XLAT_END }; -#if !(SIZEOF_RLIM_T == 4 || SIZEOF_RLIM_T == 8) -# error "Unsupported SIZEOF_RLIM_T value" -#endif - static const char * sprint_rlim64(uint64_t lim) { @@ -135,7 +131,7 @@ decode_rlimit64(struct tcb *tcp, unsigned long addr) print_rlimit64(tcp, addr); } -#if SIZEOF_RLIM_T == 4 || SUPPORTED_PERSONALITIES > 1 +#if !defined(current_wordsize) || current_wordsize == 4 static const char * sprint_rlim32(uint32_t lim) @@ -176,22 +172,28 @@ decode_rlimit(struct tcb *tcp, unsigned long addr) else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp))) tprintf("%#lx", addr); else { -# if SIZEOF_RLIM_T == 4 - print_rlimit32(tcp, addr); +# if defined(X86_64) || defined(X32) + /* + * i386 is the only personality on X86_64 and X32 + * with 32-bit rlim_t. + * When current_personality is X32, current_wordsize + * equals to 4 but rlim_t is 64-bit. + */ + if (current_personality == 1) # else if (current_wordsize == 4) +# endif print_rlimit32(tcp, addr); else print_rlimit64(tcp, addr); -# endif } } -#else /* SIZEOF_RLIM_T == 8 && SUPPORTED_PERSONALITIES == 1 */ +#else /* defined(current_wordsize) && current_wordsize != 4 */ # define decode_rlimit decode_rlimit64 -#endif /* SIZEOF_RLIM_T == 4 || SUPPORTED_PERSONALITIES > 1 */ +#endif int sys_getrlimit(struct tcb *tcp) |