Index: torsocks-2.5.0/configure.ac =================================================================== --- torsocks-2.5.0.orig/configure.ac +++ torsocks-2.5.0/configure.ac @@ -53,11 +53,16 @@ AC_CHECK_HEADERS(dlfcn.h sys/syscall.h s dnl Checks for required library functions. AC_CHECK_FUNCS(strcspn strdup strerror strcasecmp strncasecmp mmap munmap \ - socket connect close syscall recv send memset memcpy strlen \ + socket connect close recv send memset memcpy strlen \ strcmp malloc calloc strstr strtoul free,, [AC_MSG_ERROR("Required function not found")] ) +AS_CASE([$host_os], + [gnu*], [], + [AC_CHECK_FUNCS(syscall)] +) + dnl Checks for optional library functions. AC_CHECK_FUNCS(strlcpy strlcat) @@ -124,7 +129,7 @@ dnl location on Unixish system. AC_MSG_CHECKING(file name of the C library) AS_CASE([$host_os], [darwin*], [libc_name="libSystem.dylib"], - [linux*|kfreebsd*-gnu|freebsd*], + [linux*|kfreebsd*-gnu|freebsd*|gnu*], [ libc_name=`ldd /usr/bin/yes | grep 'libc\.' | cut -d ' ' -f 1 | tr -d '\t'` if test "${libc_name}" == ""; then Index: torsocks-2.5.0/src/lib/syscall.c =================================================================== --- torsocks-2.5.0.orig/src/lib/syscall.c +++ torsocks-2.5.0/src/lib/syscall.c @@ -23,6 +23,8 @@ #include "torsocks.h" +#ifndef __GNU__ + /* syscall(2) */ TSOCKS_LIBC_DECL(syscall, LIBC_SYSCALL_RET_TYPE, LIBC_SYSCALL_SIG) @@ -703,3 +705,5 @@ LIBC___SYSCALL_DECL } #endif /* __NetBSD__, __FreeBSD__ */ + +#endif /* !__GNU__ */ Index: torsocks-2.5.0/src/lib/accept.c =================================================================== --- torsocks-2.5.0.orig/src/lib/accept.c +++ torsocks-2.5.0/src/lib/accept.c @@ -87,7 +87,7 @@ LIBC_ACCEPT_DECL return tsocks_accept(LIBC_ACCEPT_ARGS); } -#if (defined(__linux__)) +#if (defined(__linux__) || defined(__GNU__)) TSOCKS_LIBC_DECL(accept4, LIBC_ACCEPT4_RET_TYPE, LIBC_ACCEPT4_SIG) @@ -155,4 +155,4 @@ LIBC_ACCEPT4_DECL return tsocks_accept4(LIBC_ACCEPT4_ARGS); } -#endif +#endif /* __linux__, __GNU__ */ Index: torsocks-2.5.0/src/lib/torsocks.c =================================================================== --- torsocks-2.5.0.orig/src/lib/torsocks.c +++ torsocks-2.5.0/src/lib/torsocks.c @@ -240,11 +240,16 @@ static void init_libc_symbols(void) tsocks_libc_connect = dlsym(libc_ptr, LIBC_CONNECT_NAME_STR); tsocks_libc_close = dlsym(libc_ptr, LIBC_CLOSE_NAME_STR); tsocks_libc_socket = dlsym(libc_ptr, LIBC_SOCKET_NAME_STR); +#ifndef __GNU__ tsocks_libc_syscall = dlsym(libc_ptr, LIBC_SYSCALL_NAME_STR); +#endif tsocks_libc_execve = dlsym(libc_ptr, LIBC_EXECVE_NAME_STR); tsocks_libc_accept4 = dlsym(libc_ptr, LIBC_ACCEPT4_NAME_STR); if (!tsocks_libc_connect || !tsocks_libc_close || !tsocks_libc_socket || - !tsocks_libc_syscall || !tsocks_libc_execve || ! tsocks_libc_accept4) { +#ifndef __GNU__ + !tsocks_libc_syscall || +#endif + !tsocks_libc_execve || ! tsocks_libc_accept4) { ERR("Unable to lookup symbols in " LIBC_NAME "(%s)", dlerror()); goto error; } Index: torsocks-2.5.0/src/lib/torsocks.h =================================================================== --- torsocks-2.5.0.orig/src/lib/torsocks.h +++ torsocks-2.5.0/src/lib/torsocks.h @@ -242,6 +242,10 @@ struct hostent **result, int *h_errnop #define LIBC_SYSCALL_SIG long int number, ... #define LIBC_SYSCALL_ARGS number +#endif /* __linux__ */ + +#if (defined(__linux__) || defined(__GNU__)) + /* accept4(2) */ #define LIBC_ACCEPT4_NAME accept4 #define LIBC_ACCEPT4_NAME_STR XSTR(LIBC_ACCEPT4_NAME) @@ -250,7 +254,7 @@ struct hostent **result, int *h_errnop int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags #define LIBC_ACCEPT4_ARGS sockfd, addr, addrlen, flags -#endif /* __linux__ */ +#endif /* __linux__, __GNU__ */ #if (defined(__FreeBSD__) || defined(__darwin__) || defined(__NetBSD__)) @@ -328,10 +332,12 @@ TSOCKS_DECL(socketpair, LIBC_SOCKETPAIR_ #define LIBC_SOCKETPAIR_DECL \ LIBC_SOCKETPAIR_RET_TYPE LIBC_SOCKETPAIR_NAME(LIBC_SOCKETPAIR_SIG) +#ifndef __GNU__ /* syscall(2) */ extern TSOCKS_LIBC_DECL(syscall, LIBC_SYSCALL_RET_TYPE, LIBC_SYSCALL_SIG) #define LIBC_SYSCALL_DECL \ LIBC_SYSCALL_RET_TYPE LIBC_SYSCALL_NAME(LIBC_SYSCALL_SIG) +#endif /* !__GNU__ */ /* __syscall(2) */ #if (defined(__FreeBSD__) || defined(__NetBSD__)) @@ -414,12 +420,12 @@ TSOCKS_DECL(accept, LIBC_ACCEPT_RET_TYPE LIBC_ACCEPT_NAME(LIBC_ACCEPT_SIG) /* accept4(2) */ -#if (defined(__linux__)) +#if (defined(__linux__) || defined(__GNU__)) extern TSOCKS_LIBC_DECL(accept4, LIBC_ACCEPT4_RET_TYPE, LIBC_ACCEPT4_SIG) TSOCKS_DECL(accept4, LIBC_ACCEPT4_RET_TYPE, LIBC_ACCEPT4_SIG) #define LIBC_ACCEPT4_DECL LIBC_ACCEPT4_RET_TYPE \ LIBC_ACCEPT4_NAME(LIBC_ACCEPT4_SIG) -#endif +#endif /* __linux__, __GNU__ */ /* listen(2) */ extern TSOCKS_LIBC_DECL(listen, LIBC_LISTEN_RET_TYPE, LIBC_LISTEN_SIG)