1*cf84ac9aSAndroid Build Coastguard Worker /* Return codes: 1 - ok, 0 - ignore, other - error. */ 2*cf84ac9aSAndroid Build Coastguard Worker static int arch_get_scno(struct tcb * tcp)3*cf84ac9aSAndroid Build Coastguard Workerarch_get_scno(struct tcb *tcp) 4*cf84ac9aSAndroid Build Coastguard Worker { 5*cf84ac9aSAndroid Build Coastguard Worker /* Retrieve the syscall trap instruction. */ 6*cf84ac9aSAndroid Build Coastguard Worker unsigned long trap; 7*cf84ac9aSAndroid Build Coastguard Worker errno = 0; 8*cf84ac9aSAndroid Build Coastguard Worker trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (void *) sparc_regs.tpc, 0); 9*cf84ac9aSAndroid Build Coastguard Worker if (errno == 0) { 10*cf84ac9aSAndroid Build Coastguard Worker trap >>= 32; 11*cf84ac9aSAndroid Build Coastguard Worker switch (trap) { 12*cf84ac9aSAndroid Build Coastguard Worker case 0x91d02010: 13*cf84ac9aSAndroid Build Coastguard Worker /* Linux/SPARC syscall trap. */ 14*cf84ac9aSAndroid Build Coastguard Worker update_personality(tcp, 1); 15*cf84ac9aSAndroid Build Coastguard Worker break; 16*cf84ac9aSAndroid Build Coastguard Worker case 0x91d0206d: 17*cf84ac9aSAndroid Build Coastguard Worker /* Linux/SPARC64 syscall trap. */ 18*cf84ac9aSAndroid Build Coastguard Worker update_personality(tcp, 0); 19*cf84ac9aSAndroid Build Coastguard Worker break; 20*cf84ac9aSAndroid Build Coastguard Worker } 21*cf84ac9aSAndroid Build Coastguard Worker } 22*cf84ac9aSAndroid Build Coastguard Worker 23*cf84ac9aSAndroid Build Coastguard Worker tcp->scno = sparc_regs.u_regs[U_REG_G1]; 24*cf84ac9aSAndroid Build Coastguard Worker return 1; 25*cf84ac9aSAndroid Build Coastguard Worker } 26