# HG changeset patch # User mbaesken # Date 1559746432 -7200 # Node ID 47ee6c00d27c7f578a50b149ef7d4ab627559e51 # Parent ceabad8004686cf02cceb750ef93a5a318d02e5b 8224958: add os::dll_load calls to event log Reviewed-by: dholmes, mdoerr, stuefe diff -r ceabad800468 -r 47ee6c00d27c src/hotspot/os/aix/os_aix.cpp --- a/src/hotspot/os/aix/os_aix.cpp Fri Jun 07 08:47:28 2019 -0300 +++ b/src/hotspot/os/aix/os_aix.cpp Wed Jun 05 16:53:52 2019 +0200 @@ -1327,16 +1327,21 @@ // RTLD_LAZY is currently not implemented. The dl is loaded immediately with all its dependants. void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { + Events::log(NULL, "Loaded shared library %s", filename); // Reload dll cache. Don't do this in signal handling. LoadedLibraries::reload(); return result; } else { // error analysis when dlopen fails - const char* const error_report = ::dlerror(); - if (error_report && ebuf && ebuflen > 0) { + const char* error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + if (ebuf != NULL && ebuflen > 0) { snprintf(ebuf, ebuflen - 1, "%s, LIBPATH=%s, LD_LIBRARY_PATH=%s : %s", filename, ::getenv("LIBPATH"), ::getenv("LD_LIBRARY_PATH"), error_report); } + Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); } return NULL; } diff -r ceabad800468 -r 47ee6c00d27c src/hotspot/os/bsd/os_bsd.cpp --- a/src/hotspot/os/bsd/os_bsd.cpp Fri Jun 07 08:47:28 2019 -0300 +++ b/src/hotspot/os/bsd/os_bsd.cpp Wed Jun 05 16:53:52 2019 +0200 @@ -1265,13 +1265,21 @@ #else void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { + Events::log(NULL, "Loaded shared library %s", filename); // Successful loading return result; } - // Read system error message into ebuf - ::strncpy(ebuf, ::dlerror(), ebuflen-1); - ebuf[ebuflen-1]='\0'; + const char* error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + if (ebuf != NULL && ebuflen > 0) { + // Read system error message into ebuf + ::strncpy(ebuf, error_report, ebuflen-1); + ebuf[ebuflen-1]='\0'; + } + Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); return NULL; #endif // STATIC_BUILD @@ -1283,16 +1291,24 @@ #else void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { + Events::log(NULL, "Loaded shared library %s", filename); // Successful loading return result; } Elf32_Ehdr elf_head; - // Read system error message into ebuf - // It may or may not be overwritten below - ::strncpy(ebuf, ::dlerror(), ebuflen-1); - ebuf[ebuflen-1]='\0'; + const char* const error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + if (ebuf != NULL && ebuflen > 0) { + // Read system error message into ebuf + ::strncpy(ebuf, error_report, ebuflen-1); + ebuf[ebuflen-1]='\0'; + } + Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + int diag_msg_max_length=ebuflen-strlen(ebuf); char* diag_msg_buf=ebuf+strlen(ebuf); diff -r ceabad800468 -r 47ee6c00d27c src/hotspot/os/linux/os_linux.cpp --- a/src/hotspot/os/linux/os_linux.cpp Fri Jun 07 08:47:28 2019 -0300 +++ b/src/hotspot/os/linux/os_linux.cpp Wed Jun 05 16:53:52 2019 +0200 @@ -1881,8 +1881,17 @@ int ebuflen) { void * result = ::dlopen(filename, RTLD_LAZY); if (result == NULL) { - ::strncpy(ebuf, ::dlerror(), ebuflen - 1); - ebuf[ebuflen-1] = '\0'; + const char* error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + if (ebuf != NULL && ebuflen > 0) { + ::strncpy(ebuf, error_report, ebuflen-1); + ebuf[ebuflen-1]='\0'; + } + Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + } else { + Events::log(NULL, "Loaded shared library %s", filename); } return result; } diff -r ceabad800468 -r 47ee6c00d27c src/hotspot/os/solaris/os_solaris.cpp --- a/src/hotspot/os/solaris/os_solaris.cpp Fri Jun 07 08:47:28 2019 -0300 +++ b/src/hotspot/os/solaris/os_solaris.cpp Wed Jun 05 16:53:52 2019 +0200 @@ -1528,15 +1528,22 @@ void * result= ::dlopen(filename, RTLD_LAZY); if (result != NULL) { // Successful loading + Events::log(NULL, "Loaded shared library %s", filename); return result; } Elf32_Ehdr elf_head; - - // Read system error message into ebuf - // It may or may not be overwritten below - ::strncpy(ebuf, ::dlerror(), ebuflen-1); - ebuf[ebuflen-1]='\0'; + const char* error_report = ::dlerror(); + if (error_report == NULL) { + error_report = "dlerror returned no error description"; + } + if (ebuf != NULL && ebuflen > 0) { + ::strncpy(ebuf, error_report, ebuflen-1); + ebuf[ebuflen-1]='\0'; + } + + Events::log(NULL, "Loading shared library %s failed, %s", filename, error_report); + int diag_msg_max_length=ebuflen-strlen(ebuf); char* diag_msg_buf=ebuf+strlen(ebuf); diff -r ceabad800468 -r 47ee6c00d27c src/hotspot/os/windows/os_windows.cpp --- a/src/hotspot/os/windows/os_windows.cpp Fri Jun 07 08:47:28 2019 -0300 +++ b/src/hotspot/os/windows/os_windows.cpp Wed Jun 05 16:53:52 2019 +0200 @@ -1367,12 +1367,18 @@ void * os::dll_load(const char *name, char *ebuf, int ebuflen) { void * result = LoadLibrary(name); if (result != NULL) { + Events::log(NULL, "Loaded shared library %s", name); // Recalculate pdb search path if a DLL was loaded successfully. SymbolEngine::recalc_search_path(); return result; } - DWORD errcode = GetLastError(); + // Read system error message into ebuf + // It may or may not be overwritten below (in the for loop and just above) + lasterror(ebuf, (size_t) ebuflen); + ebuf[ebuflen - 1] = '\0'; + Events::log(NULL, "Loading shared library %s failed, error code %lu", name, errcode); + if (errcode == ERROR_MOD_NOT_FOUND) { strncpy(ebuf, "Can't find dependent libraries", ebuflen - 1); ebuf[ebuflen - 1] = '\0'; @@ -1384,11 +1390,6 @@ // for an architecture other than Hotspot is running in // - then print to buffer "DLL was built for a different architecture" // else call os::lasterror to obtain system error message - - // Read system error message into ebuf - // It may or may not be overwritten below (in the for loop and just above) - lasterror(ebuf, (size_t) ebuflen); - ebuf[ebuflen - 1] = '\0'; int fd = ::open(name, O_RDONLY | O_BINARY, 0); if (fd < 0) { return NULL;