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)
===============================================
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]
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];
}
}
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;
}
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;
}
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);
}
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);
}
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);
}