xref: /aosp_15_r20/external/strace/tests-m32/accept_compat.h (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
1*cf84ac9aSAndroid Build Coastguard Worker #ifndef _STRACE_TESTS_ACCEPT_COMPAT_H_
2*cf84ac9aSAndroid Build Coastguard Worker #define _STRACE_TESTS_ACCEPT_COMPAT_H_
3*cf84ac9aSAndroid Build Coastguard Worker 
4*cf84ac9aSAndroid Build Coastguard Worker #include <unistd.h>
5*cf84ac9aSAndroid Build Coastguard Worker #include <sys/socket.h>
6*cf84ac9aSAndroid Build Coastguard Worker #include <asm/unistd.h>
7*cf84ac9aSAndroid Build Coastguard Worker 
8*cf84ac9aSAndroid Build Coastguard Worker #if defined __NR_socketcall && defined __sparc__
9*cf84ac9aSAndroid Build Coastguard Worker /*
10*cf84ac9aSAndroid Build Coastguard Worker  * Work around the fact that
11*cf84ac9aSAndroid Build Coastguard Worker  * - glibc >= 2.26 uses accept4 syscall to implement accept() call on sparc;
12*cf84ac9aSAndroid Build Coastguard Worker  * - accept syscall had not been wired up on sparc until v4.4-rc8~4^2~1.
13*cf84ac9aSAndroid Build Coastguard Worker  */
14*cf84ac9aSAndroid Build Coastguard Worker static inline int
do_accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen)15*cf84ac9aSAndroid Build Coastguard Worker do_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
16*cf84ac9aSAndroid Build Coastguard Worker {
17*cf84ac9aSAndroid Build Coastguard Worker 	const long args[] = { sockfd, (long) addr, (long) addrlen };
18*cf84ac9aSAndroid Build Coastguard Worker 
19*cf84ac9aSAndroid Build Coastguard Worker 	return syscall(__NR_socketcall, 5, args);
20*cf84ac9aSAndroid Build Coastguard Worker }
21*cf84ac9aSAndroid Build Coastguard Worker #else
22*cf84ac9aSAndroid Build Coastguard Worker # define do_accept accept
23*cf84ac9aSAndroid Build Coastguard Worker #endif
24*cf84ac9aSAndroid Build Coastguard Worker 
25*cf84ac9aSAndroid Build Coastguard Worker #endif /* !_STRACE_TESTS_ACCEPT_COMPAT_H_ */
26