C++程序  |  26行  |  548 B

/* Return codes: 1 - ok, 0 - ignore, other - error. */
static int
arch_get_scno(struct tcb *tcp)
{
	/* Retrieve the syscall trap instruction. */
	unsigned long trap;
	errno = 0;
	trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *) sparc_regs.tpc, 0);
	if (errno)
		return -1;
	trap >>= 32;
	switch (trap) {
	case 0x91d02010:
		/* Linux/SPARC syscall trap. */
		update_personality(tcp, 1);
		break;
	case 0x91d0206d:
		/* Linux/SPARC64 syscall trap. */
		update_personality(tcp, 0);
		break;
	}

	tcp->scno = sparc_regs.u_regs[U_REG_G1];
	return 1;
}