From f36bf3e81bb267b9ed3dc9dad2feed9a5e2d69a3 Mon Sep 17 00:00:00 2001 From: Peter Shipton Date: Mon, 7 Oct 2024 16:29:38 -0400 Subject: [PATCH] Add selected tracepoints for OpenJ9 -Xtrace Depends on https://github.com/eclipse-openj9/openj9/pull/20936 Issue https://github.ibm.com/runtimes/semeru-requests/issues/46 Signed-off-by: Peter Shipton --- make/modules/java.base/Lib.gmk | 22 +++++++++++++++- make/modules/java.base/lib/CoreLibraries.gmk | 26 +++++++++++++++++++ src/java.base/share/native/libjava/VM.c | 18 +++++++++++++ .../share/native/libjava/check_version.c | 18 +++++++++++++ src/java.base/share/native/libnio/nio_util.c | 13 ++++++++++ .../unix/native/libjava/UnixFileSystem_md.c | 9 +++++++ .../unix/native/libjava/io_util_md.c | 18 +++++++++++++ src/java.base/unix/native/libnio/ch/Net.c | 21 ++++++++++++++- .../unix/native/libnio/ch/UnixDispatcher.c | 9 +++++++ .../unix/native/libnio/ch/UnixDomainSockets.c | 14 +++++++++- .../windows/native/libjava/io_util_md.c | 24 +++++++++++++++++ src/java.base/windows/native/libnio/ch/Net.c | 16 ++++++++++++ .../native/libnio/ch/SocketDispatcher.c | 9 +++++++ .../native/libnio/ch/UnixDomainSockets.c | 14 +++++++++- 14 files changed, 227 insertions(+), 4 deletions(-) diff --git a/make/modules/java.base/Lib.gmk b/make/modules/java.base/Lib.gmk index 9eb8bf34779..365b0583663 100644 --- a/make/modules/java.base/Lib.gmk +++ b/make/modules/java.base/Lib.gmk @@ -24,7 +24,7 @@ # # =========================================================================== -# (c) Copyright IBM Corp. 2018, 2018 All Rights Reserved +# (c) Copyright IBM Corp. 2018, 2025 All Rights Reserved # =========================================================================== include CopyFiles.gmk @@ -80,6 +80,26 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBNIO, \ NAME := nio, \ OPTIMIZATION := HIGH, \ WARNINGS_AS_ERRORS_xlc := false, \ + Net.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + nio_util.c_CFLAGS := \ + -I$(OPENJ9_TOPDIR)/runtime/include \ + -I$(OPENJ9_TOPDIR)/runtime/oti \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR) \ + -I$(OPENJ9_TOPDIR)/runtime/jcl \ + -I$(OPENJ9_TOPDIR)/runtime/util \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + SocketDispatcher.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + UnixDispatcher.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + UnixDomainSockets.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ EXTRA_HEADER_DIRS := \ libnio/ch \ libnio/fs \ diff --git a/make/modules/java.base/lib/CoreLibraries.gmk b/make/modules/java.base/lib/CoreLibraries.gmk index b2b9bfe091e..1941f88dc0a 100644 --- a/make/modules/java.base/lib/CoreLibraries.gmk +++ b/make/modules/java.base/lib/CoreLibraries.gmk @@ -23,6 +23,10 @@ # questions. # +# =========================================================================== +# (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved +# =========================================================================== + ################################################################################ ## Build libverify ################################################################################ @@ -55,10 +59,32 @@ endif $(eval $(call SetupJdkLibrary, BUILD_LIBJAVA, \ NAME := java, \ OPTIMIZATION := HIGH, \ + check_version.c_CFLAGS := \ + -I$(OPENJ9_TOPDIR)/runtime/include \ + -I$(OPENJ9_TOPDIR)/runtime/oti \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR) \ + -I$(OPENJ9_TOPDIR)/runtime/jcl \ + -I$(OPENJ9_TOPDIR)/runtime/util \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + io_util_md.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \ ProcessImpl_md.c_CFLAGS := $(VERSION_CFLAGS), \ java_props_md.c_CFLAGS := \ -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"', \ + UnixFileSystem_md.c_CFLAGS := \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ + VM.c_CFLAGS := \ + -I$(OPENJ9_TOPDIR)/runtime/include \ + -I$(OPENJ9_TOPDIR)/runtime/oti \ + -I$(OPENJ9OMR_TOPDIR)/include_core \ + -I$(OPENJ9_VM_BUILD_DIR) \ + -I$(OPENJ9_TOPDIR)/runtime/jcl \ + -I$(OPENJ9_TOPDIR)/runtime/util \ + -I$(OPENJ9_VM_BUILD_DIR)/jcl, \ WARNINGS_AS_ERRORS_xlc := false, \ DISABLED_WARNINGS_gcc_ProcessImpl_md.c := unused-result, \ DISABLED_WARNINGS_clang_TimeZone_md.c := unused-variable, \ diff --git a/src/java.base/share/native/libjava/VM.c b/src/java.base/share/native/libjava/VM.c index 099ad46fff1..064f43842bc 100644 --- a/src/java.base/share/native/libjava/VM.c +++ b/src/java.base/share/native/libjava/VM.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "jni.h" #include "jni_util.h" #include "jvm.h" @@ -30,6 +36,13 @@ #include "jdk_internal_misc_VM.h" +#if defined(WIN32) +#include "j9access.h" +/* tracehelp.c defines getTraceInterfaceFromVM(), used by J9_UTINTERFACE_FROM_VM(). */ +#include "tracehelp.c" +#include "ut_jcl_java.c" +#endif /* defined(WIN32) */ + /* Only register the performance-critical methods */ static JNINativeMethod methods[] = { {"getNanoTimeAdjustment", "(J)J", (void *)&JVM_GetNanoTimeAdjustment} @@ -42,6 +55,11 @@ Java_jdk_internal_misc_VM_latestUserDefinedLoader0(JNIEnv *env, jclass cls) { JNIEXPORT void JNICALL Java_jdk_internal_misc_VM_initialize(JNIEnv *env, jclass cls) { +#if defined(WIN32) + /* Other platforms do this in check_version.c JNI_OnLoad. */ + UT_JCL_JAVA_MODULE_LOADED(J9_UTINTERFACE_FROM_VM(((J9VMThread *) env)->javaVM)); +#endif /* defined(WIN32) */ + // Registers implementations of native methods described in methods[] // above. // In particular, registers JVM_GetNanoTimeAdjustment as the implementation diff --git a/src/java.base/share/native/libjava/check_version.c b/src/java.base/share/native/libjava/check_version.c index 17a590fea14..1727793a010 100644 --- a/src/java.base/share/native/libjava/check_version.c +++ b/src/java.base/share/native/libjava/check_version.c @@ -23,12 +23,30 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "jni.h" #include "jni_util.h" #include "jvm.h" +#if !defined(WIN32) +#include "j9access.h" +/* tracehelp.c defines getTraceInterfaceFromVM(), used by J9_UTINTERFACE_FROM_VM(). */ +#include "tracehelp.c" +#include "ut_jcl_java.c" +#endif /* !defined(WIN32) */ + JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { +#if !defined(WIN32) + /* Windows doesn't call JNI_OnLoad for libjava.dll, initialize the tracepoint elsewhere. */ + UT_JCL_JAVA_MODULE_LOADED(J9_UTINTERFACE_FROM_VM((J9JavaVM *)vm)); +#endif /* !defined(WIN32) */ + return JNI_VERSION_1_2; } diff --git a/src/java.base/share/native/libnio/nio_util.c b/src/java.base/share/native/libnio/nio_util.c index 2235f0a5998..dbda9c4987c 100644 --- a/src/java.base/share/native/libnio/nio_util.c +++ b/src/java.base/share/native/libnio/nio_util.c @@ -23,10 +23,21 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "jni.h" #include "jvm.h" #include "jni_util.h" +#include "j9access.h" +/* tracehelp.c defines getTraceInterfaceFromVM(), used by J9_UTINTERFACE_FROM_VM(). */ +#include "tracehelp.c" +#include "ut_jcl_nio.c" + JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { @@ -36,5 +47,7 @@ DEF_JNI_OnLoad(JavaVM *vm, void *reserved) return JNI_EVERSION; /* JNI version not supported */ } + UT_JCL_NIO_MODULE_LOADED(J9_UTINTERFACE_FROM_VM((J9JavaVM *)vm)); + return JNI_VERSION_1_2; } diff --git a/src/java.base/unix/native/libjava/UnixFileSystem_md.c b/src/java.base/unix/native/libjava/UnixFileSystem_md.c index ffda8320d48..5321684baee 100644 --- a/src/java.base/unix/native/libjava/UnixFileSystem_md.c +++ b/src/java.base/unix/native/libjava/UnixFileSystem_md.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include #include @@ -51,6 +57,8 @@ #include "java_io_FileSystem.h" #include "java_io_UnixFileSystem.h" +#include "ut_jcl_java.h" + #if defined(_AIX) #if !defined(NAME_MAX) #define NAME_MAX MAXNAMLEN @@ -268,6 +276,7 @@ Java_java_io_UnixFileSystem_createFileExclusively0(JNIEnv *env, jclass cls, if (errno != EEXIST) JNU_ThrowIOExceptionWithLastError(env, "Could not open file"); } else { + Trc_io_UnixFileSystem_createFileExclusively_close(fd); if (close(fd) == -1) JNU_ThrowIOExceptionWithLastError(env, "Could not close file"); rv = JNI_TRUE; diff --git a/src/java.base/unix/native/libjava/io_util_md.c b/src/java.base/unix/native/libjava/io_util_md.c index 2e81cbd05c2..29139b9942f 100644 --- a/src/java.base/unix/native/libjava/io_util_md.c +++ b/src/java.base/unix/native/libjava/io_util_md.c @@ -22,6 +22,13 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "jni.h" #include "jni_util.h" #include "jvm.h" @@ -39,6 +46,8 @@ #include #endif +#include "ut_jcl_java.h" + #ifdef MACOSX #include @@ -90,6 +99,11 @@ handleOpen(const char *path, int oflag, int mode) { fd = -1; } } + if (-1 == fd) { + Trc_io_handleOpen_err(path, oflag, mode, 0, 0, errno); + } else { + Trc_io_handleOpen(path, oflag, mode, 0, 0, (jlong)fd); + } return fd; } @@ -167,6 +181,7 @@ fileDescriptorClose(JNIEnv *env, jobject this) dup2(devnull, fd); close(devnull); } + Trc_io_fileDescriptorClose((jlong)fd); } else { int result; #if defined(_AIX) @@ -176,7 +191,10 @@ fileDescriptorClose(JNIEnv *env, jobject this) result = close(fd); #endif if (result == -1 && errno != EINTR) { + Trc_io_fileDescriptorClose_err((jlong)fd, errno); JNU_ThrowIOExceptionWithLastError(env, "close failed"); + } else { + Trc_io_fileDescriptorClose((jlong)fd); } } } diff --git a/src/java.base/unix/native/libnio/ch/Net.c b/src/java.base/unix/native/libnio/ch/Net.c index 578c38a3b2f..ec078ce3cfc 100644 --- a/src/java.base/unix/native/libnio/ch/Net.c +++ b/src/java.base/unix/native/libnio/ch/Net.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include #include @@ -31,6 +37,7 @@ #include #include #include +#include #include "jni.h" #include "jni_util.h" @@ -47,6 +54,8 @@ #include #endif +#include "ut_jcl_nio.h" + /** * IP_MULTICAST_ALL supported since 2.6.31 but may not be available at * build time. @@ -380,12 +389,22 @@ Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6, SOCKETADDRESS sa; int sa_len = 0; int rv; + int fd; if (NET_InetAddressToSockaddr(env, iao, port, &sa, &sa_len, preferIPv6) != 0) { return IOS_THROWN; } - rv = connect(fdval(env, fdo), &sa.sa, sa_len); + fd = fdval(env, fdo); + if (AF_INET == sa.sa4.sin_family) { + char buf[INET_ADDRSTRLEN]; + Trc_nio_ch_Net_connect4((jlong)fd, inet_ntop(AF_INET, &sa.sa4.sin_addr, buf, sizeof(buf)), port, sa_len); + } else if (AF_INET6 == sa.sa6.sin6_family) { + char buf[INET6_ADDRSTRLEN]; + Trc_nio_ch_Net_connect6((jlong)fd, inet_ntop(AF_INET6, &sa.sa6.sin6_addr, buf, sizeof(buf)), port, ntohl(sa.sa6.sin6_scope_id), sa_len); + } + + rv = connect(fd, &sa.sa, sa_len); if (rv != 0) { if (errno == EINPROGRESS) { return IOS_UNAVAILABLE; diff --git a/src/java.base/unix/native/libnio/ch/UnixDispatcher.c b/src/java.base/unix/native/libnio/ch/UnixDispatcher.c index 4e9d7563c2e..46e7b471d9f 100644 --- a/src/java.base/unix/native/libnio/ch/UnixDispatcher.c +++ b/src/java.base/unix/native/libnio/ch/UnixDispatcher.c @@ -23,11 +23,19 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "nio.h" #include "nio_util.h" #include "sun_nio_ch_UnixDispatcher.h" +#include "ut_jcl_nio.h" + static int preCloseFD = -1; /* File descriptor to which we dup other fd's before closing them for real */ @@ -55,6 +63,7 @@ JNIEXPORT void JNICALL Java_sun_nio_ch_UnixDispatcher_close0(JNIEnv *env, jclass clazz, jobject fdo) { jint fd = fdval(env, fdo); + Trc_nio_ch_UnixDispatcher_close(fd); closeFileDescriptor(env, fd); } diff --git a/src/java.base/unix/native/libnio/ch/UnixDomainSockets.c b/src/java.base/unix/native/libnio/ch/UnixDomainSockets.c index c43c3b90695..a5c9a87176a 100644 --- a/src/java.base/unix/native/libnio/ch/UnixDomainSockets.c +++ b/src/java.base/unix/native/libnio/ch/UnixDomainSockets.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include #include @@ -41,6 +47,8 @@ #include "nio_util.h" #include "nio.h" +#include "ut_jcl_nio.h" + /* Subtle platform differences in how unnamed sockets (empty path) * are returned from getsockname() */ @@ -132,12 +140,16 @@ Java_sun_nio_ch_UnixDomainSockets_connect0(JNIEnv *env, jclass clazz, jobject fd struct sockaddr_un sa; int sa_len = 0; int rv; + int fd; if (unixSocketAddressToSockaddr(env, path, &sa, &sa_len) != 0) { return IOS_THROWN; } - rv = connect(fdval(env, fdo), (struct sockaddr *)&sa, sa_len); + fd = fdval(env, fdo); + Trc_nio_ch_UnixDomainSockets_connect(fd, sa.sun_path, sa_len); + + rv = connect(fd, (struct sockaddr *)&sa, sa_len); if (rv != 0) { if (errno == EINPROGRESS) { return IOS_UNAVAILABLE; diff --git a/src/java.base/windows/native/libjava/io_util_md.c b/src/java.base/windows/native/libjava/io_util_md.c index bae9803a564..285089953d5 100644 --- a/src/java.base/windows/native/libjava/io_util_md.c +++ b/src/java.base/windows/native/libjava/io_util_md.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include "jni.h" #include "jni_util.h" #include "jvm.h" @@ -41,6 +47,7 @@ #include #include +#include "ut_jcl_java.h" static DWORD MAX_INPUT_EVENTS = 2000; @@ -234,12 +241,22 @@ FD winFileHandleOpen(JNIEnv *env, jstring path, int flags) FILE_ATTRIBUTE_NORMAL; const DWORD flagsAndAttributes = maybeWriteThrough | maybeDeleteOnClose; HANDLE h = NULL; + char *pathStr = NULL; WCHAR *pathbuf = pathToNTPath(env, path, JNI_TRUE); if (pathbuf == NULL) { /* Exception already pending */ return -1; } + + if (TrcEnabled_Trc_io_handleOpen) { + int length = WideCharToMultiByte(CP_UTF8, 0, pathbuf, -1, NULL, 0, NULL, NULL); + pathStr = malloc(length); + if (NULL != pathStr) { + WideCharToMultiByte(CP_UTF8, 0, pathbuf, -1, pathStr, length, NULL, NULL); + } + } + h = CreateFileW( pathbuf, /* Wide char path name */ access, /* Read and/or write permission */ @@ -251,9 +268,13 @@ FD winFileHandleOpen(JNIEnv *env, jstring path, int flags) free(pathbuf); if (h == INVALID_HANDLE_VALUE) { + Trc_io_handleOpen_err(pathStr, access, sharing, disposition, flagsAndAttributes, GetLastError()); + free(pathStr); throwFileNotFoundException(env, path); return -1; } + Trc_io_handleOpen(pathStr, access, sharing, disposition, flagsAndAttributes, (jlong)h); + free(pathStr); return (jlong) h; } @@ -549,7 +570,10 @@ fileDescriptorClose(JNIEnv *env, jobject this) } if (CloseHandle(h) == 0) { /* Returns zero on failure */ + Trc_io_fileDescriptorClose_err((jlong)fd, GetLastError()); JNU_ThrowIOExceptionWithLastError(env, "close failed"); + } else { + Trc_io_fileDescriptorClose((jlong)fd); } } diff --git a/src/java.base/windows/native/libnio/ch/Net.c b/src/java.base/windows/native/libnio/ch/Net.c index 3ccdbcc4752..a5f7446e61a 100644 --- a/src/java.base/windows/native/libnio/ch/Net.c +++ b/src/java.base/windows/native/libnio/ch/Net.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include @@ -37,6 +43,8 @@ #include "sun_nio_ch_Net.h" #include "sun_nio_ch_PollArrayWrapper.h" +#include "ut_jcl_nio.h" + /** * Definitions to allow for building with older SDK include files. */ @@ -239,6 +247,14 @@ Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6, job NET_EnableFastTcpLoopbackConnect((jint)s); } + if (AF_INET == sa.sa4.sin_family) { + char buf[INET_ADDRSTRLEN]; + Trc_nio_ch_Net_connect4((jlong)s, inet_ntop(AF_INET, &sa.sa4.sin_addr, buf, sizeof(buf)), port, sa_len); + } else if (AF_INET6 == sa.sa6.sin6_family) { + char buf[INET6_ADDRSTRLEN]; + Trc_nio_ch_Net_connect6((jlong)s, inet_ntop(AF_INET6, &sa.sa6.sin6_addr, buf, sizeof(buf)), port, ntohl(sa.sa6.sin6_scope_id), sa_len); + } + rv = connect(s, &sa.sa, sa_len); if (rv != 0) { int err = WSAGetLastError(); diff --git a/src/java.base/windows/native/libnio/ch/SocketDispatcher.c b/src/java.base/windows/native/libnio/ch/SocketDispatcher.c index ff74a0abf10..96f9846ee58 100644 --- a/src/java.base/windows/native/libnio/ch/SocketDispatcher.c +++ b/src/java.base/windows/native/libnio/ch/SocketDispatcher.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include #include @@ -34,6 +40,8 @@ #include "nio.h" #include "nio_util.h" +#include "ut_jcl_nio.h" + /************************************************************** * SocketDispatcher.c @@ -282,6 +290,7 @@ Java_sun_nio_ch_SocketDispatcher_writev0(JNIEnv *env, jclass clazz, JNIEXPORT void JNICALL Java_sun_nio_ch_SocketDispatcher_close0(JNIEnv *env, jclass clazz, jint fd) { + Trc_nio_ch_SocketDispatcher_close(fd); if (closesocket(fd) == SOCKET_ERROR) { JNU_ThrowIOExceptionWithLastError(env, "Socket close failed"); } diff --git a/src/java.base/windows/native/libnio/ch/UnixDomainSockets.c b/src/java.base/windows/native/libnio/ch/UnixDomainSockets.c index e29d8e28efc..7246db25e0a 100644 --- a/src/java.base/windows/native/libnio/ch/UnixDomainSockets.c +++ b/src/java.base/windows/native/libnio/ch/UnixDomainSockets.c @@ -23,6 +23,12 @@ * questions. */ +/* + * =========================================================================== + * (c) Copyright IBM Corp. 2025, 2025 All Rights Reserved + * =========================================================================== + */ + #include #include @@ -38,6 +44,8 @@ #include "sun_nio_ch_Net.h" #include "sun_nio_ch_PollArrayWrapper.h" +#include "ut_jcl_nio.h" + /* The winsock provider ID of the Microsoft AF_UNIX implementation */ static GUID MS_PROVIDER_ID = {0xA00943D9,0x9C2E,0x4633,{0x9B,0x59,0,0x57,0xA3,0x16,0x09,0x94}}; @@ -195,12 +203,16 @@ Java_sun_nio_ch_UnixDomainSockets_connect0(JNIEnv *env, jclass clazz, jobject fd struct sockaddr_un sa; int sa_len = 0; int rv; + int fd; if (unixSocketAddressToSockaddr(env, addr, &sa, &sa_len) != 0) { return IOS_THROWN; } - rv = connect(fdval(env, fdo), (const struct sockaddr *)&sa, sa_len); + fd = fdval(env, fdo); + Trc_nio_ch_UnixDomainSockets_connect(fd, sa.sun_path, sa_len); + + rv = connect(fd, (const struct sockaddr *)&sa, sa_len); if (rv != 0) { int err = WSAGetLastError(); if (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK) {