xref: /aosp_15_r20/external/strace/linux/mips/get_syscall_args.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker /* Return -1 on error or 1 on success (never 0!). */
2*cf84ac9aSAndroid Build Coastguard Worker static int
get_syscall_args(struct tcb * tcp)3*cf84ac9aSAndroid Build Coastguard Worker get_syscall_args(struct tcb *tcp)
4*cf84ac9aSAndroid Build Coastguard Worker {
5*cf84ac9aSAndroid Build Coastguard Worker #if defined LINUX_MIPSN64 || defined LINUX_MIPSN32
6*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[0] = mips_REG_A0;
7*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[1] = mips_REG_A1;
8*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[2] = mips_REG_A2;
9*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[3] = mips_REG_A3;
10*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[4] = mips_REG_A4;
11*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[5] = mips_REG_A5;
12*cf84ac9aSAndroid Build Coastguard Worker #elif defined LINUX_MIPSO32
13*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[0] = mips_REG_A0;
14*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[1] = mips_REG_A1;
15*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[2] = mips_REG_A2;
16*cf84ac9aSAndroid Build Coastguard Worker 	tcp->u_arg[3] = mips_REG_A3;
17*cf84ac9aSAndroid Build Coastguard Worker 	if (tcp->s_ent->nargs > 4
18*cf84ac9aSAndroid Build Coastguard Worker 	    && umoven(tcp, mips_REG_SP + 4 * sizeof(tcp->u_arg[0]),
19*cf84ac9aSAndroid Build Coastguard Worker 		      (tcp->s_ent->nargs - 4) * sizeof(tcp->u_arg[0]),
20*cf84ac9aSAndroid Build Coastguard Worker 		      &tcp->u_arg[4]) < 0) {
21*cf84ac9aSAndroid Build Coastguard Worker 		/*
22*cf84ac9aSAndroid Build Coastguard Worker 		 * Let's proceed with the first 4 arguments
23*cf84ac9aSAndroid Build Coastguard Worker 		 * instead of reporting the failure.
24*cf84ac9aSAndroid Build Coastguard Worker 		 */
25*cf84ac9aSAndroid Build Coastguard Worker 		memset(&tcp->u_arg[4], 0,
26*cf84ac9aSAndroid Build Coastguard Worker 		       (tcp->s_ent->nargs - 4) * sizeof(tcp->u_arg[0]));
27*cf84ac9aSAndroid Build Coastguard Worker 	}
28*cf84ac9aSAndroid Build Coastguard Worker #else
29*cf84ac9aSAndroid Build Coastguard Worker # error unsupported mips abi
30*cf84ac9aSAndroid Build Coastguard Worker #endif
31*cf84ac9aSAndroid Build Coastguard Worker 	return 1;
32*cf84ac9aSAndroid Build Coastguard Worker }
33