1*cf84ac9aSAndroid Build Coastguard Worker #include "negated_errno.h" 2*cf84ac9aSAndroid Build Coastguard Worker 3*cf84ac9aSAndroid Build Coastguard Worker static void get_error(struct tcb * tcp,const bool check_errno)4*cf84ac9aSAndroid Build Coastguard Workerget_error(struct tcb *tcp, const bool check_errno) 5*cf84ac9aSAndroid Build Coastguard Worker { 6*cf84ac9aSAndroid Build Coastguard Worker /* 7*cf84ac9aSAndroid Build Coastguard Worker * The standard tile calling convention returns the value 8*cf84ac9aSAndroid Build Coastguard Worker * (or negative errno) in r0, and zero (or positive errno) in r1. 9*cf84ac9aSAndroid Build Coastguard Worker * Until at least kernel 3.8, however, the r1 value is not 10*cf84ac9aSAndroid Build Coastguard Worker * reflected in ptregs at this point, so we use r0 here. 11*cf84ac9aSAndroid Build Coastguard Worker */ 12*cf84ac9aSAndroid Build Coastguard Worker if (check_errno && is_negated_errno(tile_regs.regs[0])) { 13*cf84ac9aSAndroid Build Coastguard Worker tcp->u_rval = -1; 14*cf84ac9aSAndroid Build Coastguard Worker tcp->u_error = -tile_regs.regs[0]; 15*cf84ac9aSAndroid Build Coastguard Worker } else { 16*cf84ac9aSAndroid Build Coastguard Worker tcp->u_rval = tile_regs.regs[0]; 17*cf84ac9aSAndroid Build Coastguard Worker } 18*cf84ac9aSAndroid Build Coastguard Worker } 19