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 kernel_ulong_t scno = 0; 6*cf84ac9aSAndroid Build Coastguard Worker 7*cf84ac9aSAndroid Build Coastguard Worker if (upeek(tcp, REG_A3, &alpha_a3) < 0) 8*cf84ac9aSAndroid Build Coastguard Worker return -1; 9*cf84ac9aSAndroid Build Coastguard Worker if (upeek(tcp, REG_R0, &scno) < 0) 10*cf84ac9aSAndroid Build Coastguard Worker return -1; 11*cf84ac9aSAndroid Build Coastguard Worker 12*cf84ac9aSAndroid Build Coastguard Worker /* 13*cf84ac9aSAndroid Build Coastguard Worker * Do some sanity checks to figure out if it's 14*cf84ac9aSAndroid Build Coastguard Worker * really a syscall entry 15*cf84ac9aSAndroid Build Coastguard Worker */ 16*cf84ac9aSAndroid Build Coastguard Worker if (!scno_in_range(scno)) { 17*cf84ac9aSAndroid Build Coastguard Worker if (alpha_a3 == 0 || alpha_a3 == -1UL) { 18*cf84ac9aSAndroid Build Coastguard Worker if (debug_flag) 19*cf84ac9aSAndroid Build Coastguard Worker error_msg("stray syscall exit: r0 = %lu", scno); 20*cf84ac9aSAndroid Build Coastguard Worker return 0; 21*cf84ac9aSAndroid Build Coastguard Worker } 22*cf84ac9aSAndroid Build Coastguard Worker } 23*cf84ac9aSAndroid Build Coastguard Worker 24*cf84ac9aSAndroid Build Coastguard Worker tcp->scno = scno; 25*cf84ac9aSAndroid Build Coastguard Worker return 1; 26*cf84ac9aSAndroid Build Coastguard Worker } 27