< prev index next >
src/jdk.jdwp.agent/unix/native/libjdwp/linker_md.c
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 22,54 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
- * Adapted from JDK 1.2 linker_md.c v1.37. Note that we #define
- * NATIVE here, whether or not we're running solaris native threads.
- * Outside the VM, it's unclear how we can do the locking that is
- * done in the green threads version of the code below.
- */
- #define NATIVE
-
- /*
* Machine Dependent implementation of the dynamic linking support
! * for java. This routine is Solaris specific.
*/
#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "path_md.h"
- #ifndef NATIVE
- #include "iomgr.h"
- #include "threads_md.h"
- #endif
#ifdef __APPLE__
#define LIB_SUFFIX "dylib"
#else
#define LIB_SUFFIX "so"
--- 22,42 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* Machine Dependent implementation of the dynamic linking support
! * for java. This routine is Unix specific.
*/
#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "path_md.h"
#ifdef __APPLE__
#define LIB_SUFFIX "dylib"
#else
#define LIB_SUFFIX "so"
*** 83,93 ****
* appropriate decorations.
*/
int
dbgsysBuildFunName(char *name, int nameLen, int args_size, int encodingIndex)
{
! /* On Solaris, there is only one encoding method. */
if (encodingIndex == 0)
return 1;
return 0;
}
--- 71,81 ----
* appropriate decorations.
*/
int
dbgsysBuildFunName(char *name, int nameLen, int args_size, int encodingIndex)
{
! // On Solaris, there is only one encoding method.
if (encodingIndex == 0)
return 1;
return 0;
}
*** 99,109 ****
dbgsysBuildLibName(char *holder, int holderlen, const char *pname, const char *fname)
{
const int pnamelen = pname ? strlen(pname) : 0;
*holder = '\0';
! /* Quietly truncate on buffer overflow. Should be an error. */
if (pnamelen + (int)strlen(fname) + 10 > holderlen) {
return;
}
if (pnamelen == 0) {
--- 87,97 ----
dbgsysBuildLibName(char *holder, int holderlen, const char *pname, const char *fname)
{
const int pnamelen = pname ? strlen(pname) : 0;
*holder = '\0';
! // Quietly truncate on buffer overflow. Should be an error.
if (pnamelen + (int)strlen(fname) + 10 > holderlen) {
return;
}
if (pnamelen == 0) {
*** 111,169 ****
} else {
dll_build_name(holder, holderlen, pname, fname);
}
}
- #ifndef NATIVE
- extern int thr_main(void);
- #endif
-
void *
dbgsysLoadLibrary(const char *name, char *err_buf, int err_buflen)
{
void * result;
- #ifdef NATIVE
result = dlopen(name, RTLD_LAZY);
- #else
- sysMonitorEnter(greenThreadSelf(), &_dl_lock);
- result = dlopen(name, RTLD_NOW);
- sysMonitorExit(greenThreadSelf(), &_dl_lock);
- /*
- * This is a bit of bulletproofing to catch the commonly occurring
- * problem of people loading a library which depends on libthread into
- * the VM. thr_main() should always return -1 which means that libthread
- * isn't loaded.
- */
- if (thr_main() != -1) {
- VM_CALL(panic)("libthread loaded into green threads");
- }
- #endif
if (result == NULL) {
(void)strncpy(err_buf, dlerror(), err_buflen-2);
err_buf[err_buflen-1] = '\0';
}
return result;
}
void dbgsysUnloadLibrary(void *handle)
{
- #ifndef NATIVE
- sysMonitorEnter(greenThreadSelf(), &_dl_lock);
- #endif
(void)dlclose(handle);
- #ifndef NATIVE
- sysMonitorExit(greenThreadSelf(), &_dl_lock);
- #endif
}
void * dbgsysFindLibraryEntry(void *handle, const char *name)
{
! void * sym;
! #ifndef NATIVE
! sysMonitorEnter(greenThreadSelf(), &_dl_lock);
! #endif
! sym = dlsym(handle, name);
! #ifndef NATIVE
! sysMonitorExit(greenThreadSelf(), &_dl_lock);
! #endif
! return sym;
}
--- 99,124 ----
} else {
dll_build_name(holder, holderlen, pname, fname);
}
}
void *
dbgsysLoadLibrary(const char *name, char *err_buf, int err_buflen)
{
void * result;
result = dlopen(name, RTLD_LAZY);
if (result == NULL) {
(void)strncpy(err_buf, dlerror(), err_buflen-2);
err_buf[err_buflen-1] = '\0';
}
return result;
}
void dbgsysUnloadLibrary(void *handle)
{
(void)dlclose(handle);
}
void * dbgsysFindLibraryEntry(void *handle, const char *name)
{
! return dlsym(handle, name);
}
< prev index next >