From: Eugene Syromyatnikov Date: Sun, 11 Feb 2018 21:50:38 +0000 (+0100) Subject: linux/ia64: remove IA-32 mode support X-Git-Tag: v4.21~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e26e9dacda6b83e69f59e1237c54fa6135efa999;p=strace linux/ia64: remove IA-32 mode support There is no compat support in strace and there are no systems within reach that would allow to test it. * linux/ia64/arch_regs.c (IA64_PSR_IS, ia64_ia32mode): Remove. * linux/ia64/get_error.c (get_error): Remove ia64_ia32mode branch. * linux/ia64/get_scno.c (arch_get_scno): Likewise. * linux/ia64/get_syscall_args.c (get_syscall_args): Likewise. * linux/ia64/set_error.c (arch_set_error, arch_set_success): Likewise. * linux/ia64/set_scno.c (arch_set_scno): Likewise. --- diff --git a/NEWS b/NEWS index 615635f5..82254711 100644 --- a/NEWS +++ b/NEWS @@ -61,6 +61,8 @@ Noteworthy changes in release ?.?? (????-??-??) build now. Use --enable-mpers=check to revert to the old behaviour. * Build-time requirement for the mpers support has been lowered from gawk 4 to gawk 3. + * Removed incomplete and unused support for IA-32 mode on the IA-64 + architecture. Noteworthy changes in release 4.20 (2017-11-13) =============================================== diff --git a/linux/ia64/arch_regs.c b/linux/ia64/arch_regs.c index deec1769..b79918e3 100644 --- a/linux/ia64/arch_regs.c +++ b/linux/ia64/arch_regs.c @@ -1,8 +1,5 @@ static struct pt_all_user_regs ia64_regs; unsigned long *const ia64_frame_ptr = &ia64_regs.gr[12]; -#define IA64_PSR_IS (1UL << 34) -#define ia64_ia32mode (ia64_regs.cr_ipsr & IA64_PSR_IS) - #define ARCH_REGS_FOR_GETREGS ia64_regs #define ARCH_PC_REG ia64_regs.br[0] diff --git a/linux/ia64/get_error.c b/linux/ia64/get_error.c index 41cae92e..61110779 100644 --- a/linux/ia64/get_error.c +++ b/linux/ia64/get_error.c @@ -3,20 +3,10 @@ static void get_error(struct tcb *tcp, const bool check_errno) { - if (ia64_ia32mode) { - int err = ia64_regs.gr[8]; - if (check_errno && is_negated_errno(err)) { - tcp->u_rval = -1; - tcp->u_error = -err; - } else { - tcp->u_rval = err; - } + if (ia64_regs.gr[10]) { + tcp->u_rval = -1; + tcp->u_error = ia64_regs.gr[8]; } else { - if (ia64_regs.gr[10]) { - tcp->u_rval = -1; - tcp->u_error = ia64_regs.gr[8]; - } else { - tcp->u_rval = ia64_regs.gr[8]; - } + tcp->u_rval = ia64_regs.gr[8]; } } diff --git a/linux/ia64/get_scno.c b/linux/ia64/get_scno.c index 0ddc17a9..88f2cad5 100644 --- a/linux/ia64/get_scno.c +++ b/linux/ia64/get_scno.c @@ -2,6 +2,6 @@ static int arch_get_scno(struct tcb *tcp) { - tcp->scno = ia64_ia32mode ? ia64_regs.gr[0] : ia64_regs.gr[15]; + tcp->scno = ia64_regs.gr[15]; return 1; } diff --git a/linux/ia64/get_syscall_args.c b/linux/ia64/get_syscall_args.c index 80f7404e..ad73c547 100644 --- a/linux/ia64/get_syscall_args.c +++ b/linux/ia64/get_syscall_args.c @@ -4,32 +4,23 @@ static int get_syscall_args(struct tcb *tcp) { - if (!ia64_ia32mode) { - unsigned long *rbs_end = - (unsigned long *) ia64_regs.ar[PT_AUR_BSP]; - unsigned long sof = (ia64_regs.cfm >> 0) & 0x7f; - unsigned long sol = (ia64_regs.cfm >> 7) & 0x7f; - unsigned long *out0 = ia64_rse_skip_regs(rbs_end, -sof + sol); - unsigned int i; + unsigned long *rbs_end = + (unsigned long *) ia64_regs.ar[PT_AUR_BSP]; + unsigned long sof = (ia64_regs.cfm >> 0) & 0x7f; + unsigned long sol = (ia64_regs.cfm >> 7) & 0x7f; + unsigned long *out0 = ia64_rse_skip_regs(rbs_end, -sof + sol); + unsigned int i; - for (i = 0; i < tcp->s_ent->nargs; ++i) { - if (umove(tcp, - (unsigned long) ia64_rse_skip_regs(out0, i), - &tcp->u_arg[i]) < 0) { - if (errno == EPERM) - tcp->u_arg[i] = 0; - else - return -1; - } + for (i = 0; i < tcp->s_ent->nargs; ++i) { + if (umove(tcp, + (unsigned long) ia64_rse_skip_regs(out0, i), + &tcp->u_arg[i]) < 0) { + if (errno == EPERM) + tcp->u_arg[i] = 0; + else + return -1; } - } else { - /* truncate away IVE sign-extension */ - tcp->u_arg[0] = 0xffffffff & ia64_regs.gr[11]; /* EBX */ - tcp->u_arg[1] = 0xffffffff & ia64_regs.gr[ 9]; /* ECX */ - tcp->u_arg[2] = 0xffffffff & ia64_regs.gr[10]; /* EDX */ - tcp->u_arg[3] = 0xffffffff & ia64_regs.gr[14]; /* ESI */ - tcp->u_arg[4] = 0xffffffff & ia64_regs.gr[15]; /* EDI */ - tcp->u_arg[5] = 0xffffffff & ia64_regs.gr[13]; /* EBP */ } + return 1; } diff --git a/linux/ia64/set_error.c b/linux/ia64/set_error.c index c566b638..69344997 100644 --- a/linux/ia64/set_error.c +++ b/linux/ia64/set_error.c @@ -1,12 +1,9 @@ static int arch_set_error(struct tcb *tcp) { - if (ia64_ia32mode) { - ia64_regs.gr[8] = -tcp->u_error; - } else { - ia64_regs.gr[8] = tcp->u_error; - ia64_regs.gr[10] = -1; - } + ia64_regs.gr[8] = tcp->u_error; + ia64_regs.gr[10] = -1; + return set_regs(tcp->pid); } @@ -14,8 +11,7 @@ static int arch_set_success(struct tcb *tcp) { ia64_regs.gr[8] = tcp->u_rval; - if (!ia64_ia32mode) { - ia64_regs.gr[10] = 0; - } + ia64_regs.gr[10] = 0; + return set_regs(tcp->pid); } diff --git a/linux/ia64/set_scno.c b/linux/ia64/set_scno.c index 1af7b025..8e0f9c45 100644 --- a/linux/ia64/set_scno.c +++ b/linux/ia64/set_scno.c @@ -1,10 +1,7 @@ static int arch_set_scno(struct tcb *tcp, kernel_ulong_t scno) { - if (ia64_ia32mode) - ia64_regs.gr[0] = scno; - else - ia64_regs.gr[15] = scno; + ia64_regs.gr[15] = scno; return set_regs(tcp->pid); }