Skip to content

Commit 314bad3

Browse files
committed
8305935: Resolve multiple definition of 'jmm_<interface|version>' when statically linking with JDK native libraries
Reviewed-by: dholmes
1 parent 793da60 commit 314bad3

File tree

7 files changed

+31
-28
lines changed

7 files changed

+31
-28
lines changed

src/jdk.management/share/native/libmanagement_ext/DiagnosticCommandImpl.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@
3030

3131
JNIEXPORT void JNICALL Java_com_sun_management_internal_DiagnosticCommandImpl_setNotificationEnabled
3232
(JNIEnv *env, jobject dummy, jboolean enabled) {
33-
if (jmm_version <= JMM_VERSION_1_2_2) {
33+
if (jmm_version_management_ext <= JMM_VERSION_1_2_2) {
3434
JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
3535
"JMX interface to diagnostic framework notifications is not supported by this VM");
3636
return;
3737
}
38-
jmm_interface->SetDiagnosticFrameworkNotificationEnabled(env, enabled);
38+
jmm_interface_management_ext->SetDiagnosticFrameworkNotificationEnabled(env, enabled);
3939
}
4040

4141
JNIEXPORT jobjectArray JNICALL
4242
Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommands
4343
(JNIEnv *env, jobject dummy)
4444
{
45-
return jmm_interface->GetDiagnosticCommands(env);
45+
return jmm_interface_management_ext->GetDiagnosticCommands(env);
4646
}
4747

4848
//
@@ -78,7 +78,7 @@ jobject getDiagnosticCommandArgumentInfoArray(JNIEnv *env, jstring command,
7878
JNU_ThrowOutOfMemoryError(env, 0);
7979
return NULL;
8080
}
81-
jmm_interface->GetDiagnosticCommandArgumentsInfo(env, command,
81+
jmm_interface_management_ext->GetDiagnosticCommandArgumentsInfo(env, command,
8282
dcmd_arg_info_array, num_arg);
8383
dcmdArgInfoCls = (*env)->FindClass(env,
8484
"com/sun/management/internal/DiagnosticCommandArgumentInfo");
@@ -151,7 +151,7 @@ Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommandInfo
151151
jobjectArray args;
152152
jobject obj;
153153
jmmOptionalSupport mos;
154-
jint ret = jmm_interface->GetOptionalSupport(env, &mos);
154+
jint ret = jmm_interface_management_ext->GetOptionalSupport(env, &mos);
155155
jsize num_commands;
156156
dcmdInfo* dcmd_info_array;
157157
jstring jname, jdesc, jimpact, cmd;
@@ -189,7 +189,7 @@ Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommandInfo
189189
JNU_ThrowOutOfMemoryError(env, NULL);
190190
return NULL;
191191
}
192-
jmm_interface->GetDiagnosticCommandInfo(env, commands, dcmd_info_array);
192+
jmm_interface_management_ext->GetDiagnosticCommandInfo(env, commands, dcmd_info_array);
193193
for (i=0; i<num_commands; i++) {
194194
// Ensure capacity for 6 + 3 local refs:
195195
// 6 => jname, jdesc, jimpact, cmd, args, obj
@@ -247,5 +247,5 @@ Java_com_sun_management_internal_DiagnosticCommandImpl_getDiagnosticCommandInfo
247247
JNIEXPORT jstring JNICALL
248248
Java_com_sun_management_internal_DiagnosticCommandImpl_executeDiagnosticCommand
249249
(JNIEnv *env, jobject dummy, jstring command) {
250-
return jmm_interface->ExecuteDiagnosticCommand(env, command);
250+
return jmm_interface_management_ext->ExecuteDiagnosticCommand(env, command);
251251
}

src/jdk.management/share/native/libmanagement_ext/Flag.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ JNIEXPORT jint JNICALL
4343
Java_com_sun_management_internal_Flag_getInternalFlagCount
4444
(JNIEnv *env, jclass cls)
4545
{
46-
jlong count = jmm_interface->GetLongAttribute(env, NULL,
46+
jlong count = jmm_interface_management_ext->GetLongAttribute(env, NULL,
4747
JMM_VM_GLOBAL_COUNT);
4848
return (jint) count;
4949
}
@@ -52,7 +52,7 @@ JNIEXPORT jobjectArray JNICALL
5252
Java_com_sun_management_internal_Flag_getAllFlagNames
5353
(JNIEnv *env, jclass cls)
5454
{
55-
return jmm_interface->GetVMGlobalNames(env);
55+
return jmm_interface_management_ext->GetVMGlobalNames(env);
5656
}
5757

5858
static jobject find_origin_constant(JNIEnv* env, const char* enum_name) {
@@ -110,7 +110,7 @@ Java_com_sun_management_internal_Flag_getFlags
110110
}
111111

112112
memset(globals, 0, gsize);
113-
num_flags = jmm_interface->GetVMGlobals(env, names, globals, count);
113+
num_flags = jmm_interface_management_ext->GetVMGlobals(env, names, globals, count);
114114
if (num_flags == 0) {
115115
free(globals);
116116
return 0;
@@ -209,7 +209,7 @@ Java_com_sun_management_internal_Flag_setLongValue
209209
jvalue v;
210210
v.j = value;
211211

212-
jmm_interface->SetVMGlobal(env, name, v);
212+
jmm_interface_management_ext->SetVMGlobal(env, name, v);
213213
}
214214

215215
JNIEXPORT void JNICALL
@@ -219,7 +219,7 @@ Java_com_sun_management_internal_Flag_setDoubleValue
219219
jvalue v;
220220
v.d = value;
221221

222-
jmm_interface->SetVMGlobal(env, name, v);
222+
jmm_interface_management_ext->SetVMGlobal(env, name, v);
223223
}
224224

225225
JNIEXPORT void JNICALL
@@ -229,7 +229,7 @@ Java_com_sun_management_internal_Flag_setBooleanValue
229229
jvalue v;
230230
v.z = value;
231231

232-
jmm_interface->SetVMGlobal(env, name, v);
232+
jmm_interface_management_ext->SetVMGlobal(env, name, v);
233233
}
234234

235235
JNIEXPORT void JNICALL
@@ -239,5 +239,5 @@ Java_com_sun_management_internal_Flag_setStringValue
239239
jvalue v;
240240
v.l = value;
241241

242-
jmm_interface->SetVMGlobal(env, name, v);
242+
jmm_interface_management_ext->SetVMGlobal(env, name, v);
243243
}

src/jdk.management/share/native/libmanagement_ext/GarbageCollectorExtImpl.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ JNIEXPORT void JNICALL Java_com_sun_management_internal_GarbageCollectorExtImpl_
3434
JNU_ThrowNullPointerException(env, "Invalid GarbageCollectorMXBean");
3535
return;
3636
}
37-
if((jmm_version > JMM_VERSION_1_2)
38-
|| (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=1))) {
39-
jmm_interface->SetGCNotificationEnabled(env, gc, enabled);
37+
if((jmm_version_management_ext > JMM_VERSION_1_2)
38+
|| (jmm_version_management_ext == JMM_VERSION_1_2 && ((jmm_version_management_ext&0xFF)>=1))) {
39+
jmm_interface_management_ext->SetGCNotificationEnabled(env, gc, enabled);
4040
}
4141
}

src/jdk.management/share/native/libmanagement_ext/GcInfoBuilder.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ JNIEXPORT jint JNICALL Java_com_sun_management_internal_GcInfoBuilder_getNumGcEx
3737
JNU_ThrowNullPointerException(env, "Invalid GarbageCollectorMXBean");
3838
return 0;
3939
}
40-
value = jmm_interface->GetLongAttribute(env, gc,
40+
value = jmm_interface_management_ext->GetLongAttribute(env, gc,
4141
JMM_GC_EXT_ATTRIBUTE_INFO_SIZE);
4242
return (jint) value;
4343
}
@@ -70,7 +70,7 @@ JNIEXPORT void JNICALL Java_com_sun_management_internal_GcInfoBuilder_fillGcAttr
7070
JNU_ThrowOutOfMemoryError(env, 0);
7171
return;
7272
}
73-
ret = jmm_interface->GetGCExtAttributeInfo(env, gc,
73+
ret = jmm_interface_management_ext->GetGCExtAttributeInfo(env, gc,
7474
ext_att_info, num_attributes);
7575
if (ret != num_attributes) {
7676
JNU_ThrowInternalError(env, "Unexpected num_attributes");
@@ -231,7 +231,7 @@ JNIEXPORT jobject JNICALL Java_com_sun_management_internal_GcInfoBuilder_getLast
231231
}
232232

233233

234-
jmm_interface->GetLastGCStat(env, gc, &gc_stat);
234+
jmm_interface_management_ext->GetLastGCStat(env, gc, &gc_stat);
235235
if (gc_stat.gc_index == 0) {
236236
if (gc_stat.gc_ext_attribute_values != NULL) {
237237
free(gc_stat.gc_ext_attribute_values);

src/jdk.management/share/native/libmanagement_ext/HotSpotDiagnostic.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ JNIEXPORT void JNICALL
3232
Java_com_sun_management_internal_HotSpotDiagnostic_dumpHeap0
3333
(JNIEnv *env, jobject dummy, jstring outputfile, jboolean live)
3434
{
35-
jmm_interface->DumpHeap0(env, outputfile, live);
35+
jmm_interface_management_ext->DumpHeap0(env, outputfile, live);
3636
}

src/jdk.management/share/native/libmanagement_ext/management_ext.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131

3232
#define ERR_MSG_SIZE 128
3333

34-
const JmmInterface* jmm_interface = NULL;
34+
const JmmInterface* jmm_interface_management_ext = NULL;
3535
static JavaVM* jvm = NULL;
36-
jint jmm_version = 0;
36+
jint jmm_version_management_ext = 0;
3737

3838
JNIEXPORT jint JNICALL
3939
DEF_JNI_OnLoad(JavaVM *vm, void *reserved) {
@@ -44,13 +44,13 @@ JNIEXPORT jint JNICALL
4444
return JNI_ERR;
4545
}
4646

47-
jmm_interface = (JmmInterface*) JVM_GetManagement(JMM_VERSION);
48-
if (jmm_interface == NULL) {
47+
jmm_interface_management_ext = (JmmInterface*) JVM_GetManagement(JMM_VERSION);
48+
if (jmm_interface_management_ext == NULL) {
4949
JNU_ThrowInternalError(env, "Unsupported Management version");
5050
return JNI_ERR;
5151
}
5252

53-
jmm_version = jmm_interface->GetVersion(env);
53+
jmm_version_management_ext = jmm_interface_management_ext->GetVersion(env);
5454
return (*env)->GetVersion(env);
5555
}
5656

src/jdk.management/share/native/libmanagement_ext/management_ext.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
#ifndef _MANAGEMENT_EXT_H_
3232
#define _MANAGEMENT_EXT_H_
3333

34-
extern const JmmInterface* jmm_interface;
35-
extern jint jmm_version;
34+
// These symbols are global in this library but need to be uniquely named to
35+
// avoid conflicts with same-named symbols in other native libraries, when
36+
// statically linking.
37+
extern const JmmInterface* jmm_interface_management_ext;
38+
extern jint jmm_version_management_ext;
3639
extern void throw_internal_error(JNIEnv* env, const char* msg);
3740

3841
#endif

0 commit comments

Comments
 (0)