blob: 95273965d563ca05473b38e983000ec0c7d5f708 [file] [log] [blame]
Dmitry V. Levind70d1c42015-03-22 22:13:55 +00001if (!ia64_ia32mode) {
2 unsigned long *rbs_end =
3 (unsigned long *) ia64_regs.ar[PT_AUR_BSP];
4 unsigned long sof = (ia64_regs.cfm >> 0) & 0x7f;
5 unsigned long sol = (ia64_regs.cfm >> 7) & 0x7f;
6 unsigned long *out0 = ia64_rse_skip_regs(rbs_end, -sof + sol);
7 unsigned int i;
8
9 for (i = 0; i < tcp->s_ent->nargs; ++i) {
10 if (umoven(tcp, (unsigned long) ia64_rse_skip_regs(out0, i),
11 sizeof(long), &tcp->u_arg[i]) < 0)
12 return -1;
13 }
14} else {
15 /* truncate away IVE sign-extension */
16 tcp->u_arg[0] = 0xffffffff & ia64_regs.gr[11]; /* EBX */
17 tcp->u_arg[1] = 0xffffffff & ia64_regs.gr[ 9]; /* ECX */
18 tcp->u_arg[2] = 0xffffffff & ia64_regs.gr[10]; /* EDX */
19 tcp->u_arg[3] = 0xffffffff & ia64_regs.gr[14]; /* ESI */
20 tcp->u_arg[4] = 0xffffffff & ia64_regs.gr[15]; /* EDI */
21 tcp->u_arg[5] = 0xffffffff & ia64_regs.gr[13]; /* EBP */
22}