Dmitry V. Levin
d70d1c4aa6
Split code that use arch-specific registers to separate arch files. * syscall.c: Move definitions of variables containing fetched registers to linux/*/arch_regs.c files. [HAVE_GETRVAL2] (getrval2): Move arch-specific code to linux/*/arch_getrval2.c, include "arch_getrval2.c". (print_pc): Move arch-specific code to linux/*/print_pc.c files, include "print_pc.c". [X86_64] (x86_64_getregs_old): Rename to getregs_old, move to linux/x86_64/getregs_old.c, include "getregs_old.c". [POWERPC] (powerpc_getregs_old): Rename to getregs_old, move to linux/powerpc/getregs_old.c, include "getregs_old.c". (get_regs) [X86_64, POWERPC]: Update callers. (get_scno): Move arch-specific code to linux/*/get_scno.c, include "get_scno.c". (get_syscall_args): Move arch-specific code to linux/*/get_syscall_args.c, include "get_syscall_args.c". (get_error): Move arch-specific code to linux/*/get_error.c, include "get_error.c". (get_syscall_result): Move arch-specific code to linux/*/get_syscall_result.c, include "get_syscall_result.c". * Makefile.am (EXTRA_DIST): Add new linux/*/*.c files.
23 lines
839 B
C
23 lines
839 B
C
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;
|
|
|
|
for (i = 0; i < tcp->s_ent->nargs; ++i) {
|
|
if (umoven(tcp, (unsigned long) ia64_rse_skip_regs(out0, i),
|
|
sizeof(long), &tcp->u_arg[i]) < 0)
|
|
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 */
|
|
}
|