getllval(struct tcb *tcp, unsigned long long *val, int arg_no)
{
#if SIZEOF_LONG > 4 && SIZEOF_LONG == SIZEOF_LONG_LONG
-# if SUPPORTED_PERSONALITIES > 1
-# ifdef X86_64
- if (current_personality != 1) {
-# else
- if (current_wordsize > 4) {
-# endif
-# endif
- *val = tcp->u_arg[arg_no];
- arg_no++;
-# if SUPPORTED_PERSONALITIES > 1
- } else {
+# ifndef current_klongsize
+ if (current_klongsize < SIZEOF_LONG) {
# if defined(AARCH64) || defined(POWERPC64)
/* Align arg_no to the next even number. */
arg_no = (arg_no + 1) & 0xe;
# endif /* AARCH64 || POWERPC64 */
- *val = LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
+ *val = ULONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
arg_no += 2;
+ } else
+# endif /* !current_klongsize */
+ {
+ *val = tcp->u_arg[arg_no];
+ arg_no++;
}
-# endif /* SUPPORTED_PERSONALITIES > 1 */
#elif SIZEOF_LONG > 4
# error Unsupported configuration: SIZEOF_LONG > 4 && SIZEOF_LONG_LONG > SIZEOF_LONG
#elif HAVE_STRUCT_TCB_EXT_ARG
-# if SUPPORTED_PERSONALITIES > 1
- if (current_personality == 1) {
- *val = LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
+# ifndef current_klongsize
+ if (current_klongsize < SIZEOF_LONG_LONG) {
+ *val = ULONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
arg_no += 2;
} else
-# endif
+# endif /* !current_klongsize */
{
*val = tcp->ext_arg[arg_no];
arg_no++;
if (arg_no == 3)
arg_no++;
# endif /* __ARM_EABI__ || LINUX_MIPSO32 || POWERPC || XTENSA || SH */
- *val = LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
+ *val = ULONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]);
arg_no += 2;
#endif
}
void
-printaddr_ull(const unsigned long long addr)
+printaddr_klu(const kernel_ulong_t addr)
{
if (!addr)
tprints("NULL");
else
- tprintf("%#llx", addr);
+ tprintf("%#" PRI_klx, addr);
}
#define DEF_PRINTNUM(name, type) \
int
umovestr(struct tcb *tcp, long addr, unsigned int len, char *laddr)
{
-#if SIZEOF_LONG == 4
- const unsigned long x01010101 = 0x01010101ul;
- const unsigned long x80808080 = 0x80808080ul;
-#elif SIZEOF_LONG == 8
- const unsigned long x01010101 = 0x0101010101010101ul;
- const unsigned long x80808080 = 0x8080808080808080ul;
-#else
-# error SIZEOF_LONG > 8
-#endif
+ const unsigned long x01010101 = (unsigned long) 0x0101010101010101ULL;
+ const unsigned long x80808080 = (unsigned long) 0x8080808080808080ULL;
int pid = tcp->pid;
unsigned int n, m, nread;
* - umoven_func has not returned false.
*/
bool
-print_array(struct tcb *tcp,
- const unsigned long start_addr,
+print_array(struct tcb *const tcp,
+ const kernel_ureg_t start_addr,
const size_t nmemb,
void *const elem_buf,
const size_t elem_size,
}
const size_t size = nmemb * elem_size;
- const unsigned long end_addr = start_addr + size;
+ const kernel_ureg_t end_addr = start_addr + size;
if (end_addr <= start_addr || size / elem_size != nmemb) {
printaddr(start_addr);
return false;
}
- const unsigned long abbrev_end =
+ const kernel_ureg_t abbrev_end =
(abbrev(tcp) && max_strlen < nmemb) ?
start_addr + elem_size * max_strlen : end_addr;
- unsigned long cur;
+ kernel_ureg_t cur;
for (cur = start_addr; cur < end_addr; cur += elem_size) {
if (cur != start_addr)
return cur >= end_addr;
}
-long long
-getarg_ll(struct tcb *tcp, int argn)
-{
-#if HAVE_STRUCT_TCB_EXT_ARG
-# if SUPPORTED_PERSONALITIES > 1
- if (current_personality == 1)
- return (long) tcp->u_arg[argn];
- else
-# endif
- return (long long) tcp->ext_arg[argn];
-#else
- return (long) tcp->u_arg[argn];
-#endif
-}
-
-unsigned long long
-getarg_ull(struct tcb *tcp, int argn)
+kernel_ulong_t
+getarg_klu(struct tcb *tcp, int argn)
{
#if HAVE_STRUCT_TCB_EXT_ARG
-# if SUPPORTED_PERSONALITIES > 1
- if (current_personality == 1)
- return (unsigned long) tcp->u_arg[argn];
- else
-# endif
- return (unsigned long long) tcp->ext_arg[argn];
+# ifndef current_klongsize
+ if (current_klongsize < sizeof(*tcp->ext_arg)) {
+ return tcp->u_arg[argn];
+ } else
+# endif /* !current_klongsize */
+ {
+ return tcp->ext_arg[argn];
+ }
#else
- return (unsigned long) tcp->u_arg[argn];
+ return tcp->u_arg[argn];
#endif
}
const int n = tcp->s_ent->nargs;
int i;
for (i = 0; i < n; ++i)
- tprintf("%s%#llx", i ? ", " : "", getarg_ull(tcp, i));
+ tprintf("%s%#" PRI_klx, i ? ", " : "", getarg_klu(tcp, i));
return RVAL_DECODED;
}