xref: /aosp_15_r20/external/strace/linux/nios2/get_error.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker static void
get_error(struct tcb * tcp,const bool check_errno)2*cf84ac9aSAndroid Build Coastguard Worker get_error(struct tcb *tcp, const bool check_errno)
3*cf84ac9aSAndroid Build Coastguard Worker {
4*cf84ac9aSAndroid Build Coastguard Worker 	/*
5*cf84ac9aSAndroid Build Coastguard Worker 	 * The system call convention specifies that r2 contains the return
6*cf84ac9aSAndroid Build Coastguard Worker 	 * value on success or a positive error number on failure.  A flag
7*cf84ac9aSAndroid Build Coastguard Worker 	 * indicating successful completion is written to r7; r7=0 indicates
8*cf84ac9aSAndroid Build Coastguard Worker 	 * the system call success, r7=1 indicates an error.  The positive
9*cf84ac9aSAndroid Build Coastguard Worker 	 * errno value written in r2.
10*cf84ac9aSAndroid Build Coastguard Worker 	 */
11*cf84ac9aSAndroid Build Coastguard Worker 	if (nios2_regs.regs[7]) {
12*cf84ac9aSAndroid Build Coastguard Worker 		tcp->u_rval = -1;
13*cf84ac9aSAndroid Build Coastguard Worker 		tcp->u_error = nios2_regs.regs[2];
14*cf84ac9aSAndroid Build Coastguard Worker 	} else {
15*cf84ac9aSAndroid Build Coastguard Worker 		tcp->u_rval = nios2_regs.regs[2];
16*cf84ac9aSAndroid Build Coastguard Worker 	}
17*cf84ac9aSAndroid Build Coastguard Worker }
18