xref: /aosp_15_r20/external/strace/linux/aarch64/get_scno.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
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 Worker arch_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 	switch (aarch64_io.iov_len) {
8*cf84ac9aSAndroid Build Coastguard Worker 		case sizeof(aarch64_regs):
9*cf84ac9aSAndroid Build Coastguard Worker 			/* We are in 64-bit mode */
10*cf84ac9aSAndroid Build Coastguard Worker 			scno = aarch64_regs.regs[8];
11*cf84ac9aSAndroid Build Coastguard Worker 			break;
12*cf84ac9aSAndroid Build Coastguard Worker 		case sizeof(arm_regs):
13*cf84ac9aSAndroid Build Coastguard Worker 			/* We are in 32-bit mode */
14*cf84ac9aSAndroid Build Coastguard Worker 			/* Note: we don't support OABI, unlike 32-bit ARM build */
15*cf84ac9aSAndroid Build Coastguard Worker 			scno = arm_regs.ARM_r7;
16*cf84ac9aSAndroid Build Coastguard Worker 			break;
17*cf84ac9aSAndroid Build Coastguard Worker 	}
18*cf84ac9aSAndroid Build Coastguard Worker 
19*cf84ac9aSAndroid Build Coastguard Worker 	tcp->scno = scno;
20*cf84ac9aSAndroid Build Coastguard Worker 	return 1;
21*cf84ac9aSAndroid Build Coastguard Worker }
22