/* * Print 64bit argument at position llarg and return the index of the next * argument. */ int printllval(struct tcb *tcp, const char *format, int llarg) { # if defined(X86_64) || defined(POWERPC64) if (current_personality == 0) { tprintf(format, tcp->u_arg[llarg]); llarg++; } else { # ifdef POWERPC64 /* Align 64bit argument to 64bit boundary. */ llarg = (llarg + 1) & 0x1e; # endif tprintf(format, LONG_LONG(tcp->u_arg[llarg], tcp->u_arg[llarg + 1])); llarg += 2; } # elif defined IA64 || defined ALPHA tprintf(format, tcp->u_arg[llarg]); llarg++; # elif defined LINUX_MIPSN32 || defined X32 tprintf(format, tcp->ext_arg[llarg]); llarg++; # else tprintf(format, LONG_LONG(tcp->u_arg[llarg], tcp->u_arg[llarg + 1])); llarg += 2; # endif return llarg; }
/* * Print 64bit argument at position arg_no and return the index of the next * argument. */ int printllval(struct tcb *tcp, const char *format, int arg_no, bool align) { #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 (align) { /* 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 /* 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) { tprintf(format, tcp->ext_arg[arg_no]); arg_no++; } else { tprintf(format, LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1])); arg_no += 2; } #else # if defined __ARM_EABI__ || \ defined LINUX_MIPSO32 || \ defined POWERPC || \ defined XTENSA if (align) { /* 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 return arg_no; }
/* * Fetch 64bit argument at position arg_no and * return the index of the next argument. */ int getllval(struct tcb *tcp, unsigned long long *val, int arg_no) { #if SIZEOF_LONG > 4 && SIZEOF_LONG == SIZEOF_LONG_LONG # if SUPPORTED_PERSONALITIES > 1 if (current_wordsize > 4) { # endif *val = tcp->u_arg[arg_no]; arg_no++; # if SUPPORTED_PERSONALITIES > 1 } else { # 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]); arg_no += 2; } # endif /* SUPPORTED_PERSONALITIES > 1 */ #elif SIZEOF_LONG > 4 # error Unsupported configuration: SIZEOF_LONG > 4 && SIZEOF_LONG_LONG > SIZEOF_LONG #elif defined LINUX_MIPSN32 *val = tcp->ext_arg[arg_no]; arg_no++; #elif defined X32 if (current_personality == 0) { *val = tcp->ext_arg[arg_no]; arg_no++; } else { *val = LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]); arg_no += 2; } #else # if defined __ARM_EABI__ || \ defined LINUX_MIPSO32 || \ defined POWERPC || \ defined XTENSA /* Align arg_no to the next even number. */ arg_no = (arg_no + 1) & 0xe; # endif *val = LONG_LONG(tcp->u_arg[arg_no], tcp->u_arg[arg_no + 1]); arg_no += 2; #endif return arg_no; }