strace/linux/ia64/get_syscall_args.c
Dmitry V. Levin d70d1c4aa6 syscall.c: split arch specific code into separate arch files
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.
2015-03-23 22:24:59 +00:00

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 */
}