Tue, 08 Jan 2013 13:44:10 -0800
Merge
1.1 --- a/make/bsd/makefiles/mapfile-vers-debug Tue Jan 08 13:38:11 2013 -0500 1.2 +++ b/make/bsd/makefiles/mapfile-vers-debug Tue Jan 08 13:44:10 2013 -0800 1.3 @@ -1,5 +1,5 @@ 1.4 # 1.5 -# @(#)mapfile-vers-debug 1.18 07/10/25 16:47:35 1.6 +# @(#)mapfile-vers-debug 1.18 07/10/25 16:47:35 1.7 # 1.8 1.9 # 1.10 @@ -126,7 +126,7 @@ 1.11 JVM_GetClassModifiers; 1.12 JVM_GetClassName; 1.13 JVM_GetClassNameUTF; 1.14 - JVM_GetClassSignature; 1.15 + JVM_GetClassSignature; 1.16 JVM_GetClassSigners; 1.17 JVM_GetClassTypeAnnotations; 1.18 JVM_GetComponentType; 1.19 @@ -155,6 +155,7 @@ 1.20 JVM_GetMethodIxNameUTF; 1.21 JVM_GetMethodIxSignatureUTF; 1.22 JVM_GetMethodParameterAnnotations; 1.23 + JVM_GetMethodParameters; 1.24 JVM_GetPrimitiveArrayElement; 1.25 JVM_GetProtectionDomain; 1.26 JVM_GetSockName; 1.27 @@ -284,7 +285,7 @@ 1.28 # This is for Forte Analyzer profiling support. 1.29 AsyncGetCallTrace; 1.30 1.31 - # INSERT VTABLE SYMBOLS HERE 1.32 + # INSERT VTABLE SYMBOLS HERE 1.33 1.34 local: 1.35 *;
2.1 --- a/make/bsd/makefiles/mapfile-vers-product Tue Jan 08 13:38:11 2013 -0500 2.2 +++ b/make/bsd/makefiles/mapfile-vers-product Tue Jan 08 13:44:10 2013 -0800 2.3 @@ -155,6 +155,7 @@ 2.4 JVM_GetMethodIxNameUTF; 2.5 JVM_GetMethodIxSignatureUTF; 2.6 JVM_GetMethodParameterAnnotations; 2.7 + JVM_GetMethodParameters; 2.8 JVM_GetPrimitiveArrayElement; 2.9 JVM_GetProtectionDomain; 2.10 JVM_GetSockName;
3.1 --- a/make/linux/makefiles/mapfile-vers-debug Tue Jan 08 13:38:11 2013 -0500 3.2 +++ b/make/linux/makefiles/mapfile-vers-debug Tue Jan 08 13:44:10 2013 -0800 3.3 @@ -151,6 +151,7 @@ 3.4 JVM_GetMethodIxNameUTF; 3.5 JVM_GetMethodIxSignatureUTF; 3.6 JVM_GetMethodParameterAnnotations; 3.7 + JVM_GetMethodParameters; 3.8 JVM_GetPrimitiveArrayElement; 3.9 JVM_GetProtectionDomain; 3.10 JVM_GetSockName;
4.1 --- a/make/linux/makefiles/mapfile-vers-product Tue Jan 08 13:38:11 2013 -0500 4.2 +++ b/make/linux/makefiles/mapfile-vers-product Tue Jan 08 13:44:10 2013 -0800 4.3 @@ -151,6 +151,7 @@ 4.4 JVM_GetMethodIxNameUTF; 4.5 JVM_GetMethodIxSignatureUTF; 4.6 JVM_GetMethodParameterAnnotations; 4.7 + JVM_GetMethodParameters; 4.8 JVM_GetPrimitiveArrayElement; 4.9 JVM_GetProtectionDomain; 4.10 JVM_GetSockName;
5.1 --- a/make/solaris/makefiles/mapfile-vers Tue Jan 08 13:38:11 2013 -0500 5.2 +++ b/make/solaris/makefiles/mapfile-vers Tue Jan 08 13:44:10 2013 -0800 5.3 @@ -26,236 +26,237 @@ 5.4 5.5 SUNWprivate_1.1 { 5.6 global: 5.7 - # JNI 5.8 + # JNI 5.9 JNI_CreateJavaVM; 5.10 JNI_GetCreatedJavaVMs; 5.11 JNI_GetDefaultJavaVMInitArgs; 5.12 - 5.13 - # JVM 5.14 - JVM_Accept; 5.15 - JVM_ActiveProcessorCount; 5.16 - JVM_AllocateNewArray; 5.17 - JVM_AllocateNewObject; 5.18 - JVM_ArrayCopy; 5.19 - JVM_AssertionStatusDirectives; 5.20 - JVM_Available; 5.21 - JVM_Bind; 5.22 - JVM_ClassDepth; 5.23 - JVM_ClassLoaderDepth; 5.24 - JVM_Clone; 5.25 - JVM_Close; 5.26 - JVM_CX8Field; 5.27 - JVM_CompileClass; 5.28 - JVM_CompileClasses; 5.29 - JVM_CompilerCommand; 5.30 - JVM_Connect; 5.31 - JVM_ConstantPoolGetClassAt; 5.32 - JVM_ConstantPoolGetClassAtIfLoaded; 5.33 - JVM_ConstantPoolGetDoubleAt; 5.34 - JVM_ConstantPoolGetFieldAt; 5.35 - JVM_ConstantPoolGetFieldAtIfLoaded; 5.36 - JVM_ConstantPoolGetFloatAt; 5.37 - JVM_ConstantPoolGetIntAt; 5.38 - JVM_ConstantPoolGetLongAt; 5.39 - JVM_ConstantPoolGetMethodAt; 5.40 - JVM_ConstantPoolGetMethodAtIfLoaded; 5.41 - JVM_ConstantPoolGetMemberRefInfoAt; 5.42 - JVM_ConstantPoolGetSize; 5.43 - JVM_ConstantPoolGetStringAt; 5.44 - JVM_ConstantPoolGetUTF8At; 5.45 - JVM_CountStackFrames; 5.46 - JVM_CurrentClassLoader; 5.47 - JVM_CurrentLoadedClass; 5.48 - JVM_CurrentThread; 5.49 - JVM_CurrentTimeMillis; 5.50 - JVM_DefineClass; 5.51 - JVM_DefineClassWithSource; 5.52 - JVM_DefineClassWithSourceCond; 5.53 - JVM_DesiredAssertionStatus; 5.54 - JVM_DisableCompiler; 5.55 - JVM_DoPrivileged; 5.56 - JVM_DTraceGetVersion; 5.57 - JVM_DTraceActivate; 5.58 - JVM_DTraceIsProbeEnabled; 5.59 - JVM_DTraceIsSupported; 5.60 - JVM_DTraceDispose; 5.61 - JVM_DumpAllStacks; 5.62 - JVM_DumpThreads; 5.63 - JVM_EnableCompiler; 5.64 - JVM_Exit; 5.65 - JVM_FillInStackTrace; 5.66 - JVM_FindClassFromClass; 5.67 - JVM_FindClassFromClassLoader; 5.68 - JVM_FindClassFromBootLoader; 5.69 - JVM_FindLibraryEntry; 5.70 - JVM_FindLoadedClass; 5.71 - JVM_FindPrimitiveClass; 5.72 - JVM_FindSignal; 5.73 - JVM_FreeMemory; 5.74 - JVM_GC; 5.75 - JVM_GetAllThreads; 5.76 - JVM_GetArrayElement; 5.77 - JVM_GetArrayLength; 5.78 - JVM_GetCPClassNameUTF; 5.79 - JVM_GetCPFieldClassNameUTF; 5.80 - JVM_GetCPFieldModifiers; 5.81 - JVM_GetCPFieldNameUTF; 5.82 - JVM_GetCPFieldSignatureUTF; 5.83 - JVM_GetCPMethodClassNameUTF; 5.84 - JVM_GetCPMethodModifiers; 5.85 - JVM_GetCPMethodNameUTF; 5.86 - JVM_GetCPMethodSignatureUTF; 5.87 - JVM_GetCallerClass; 5.88 - JVM_GetClassAccessFlags; 5.89 - JVM_GetClassAnnotations; 5.90 - JVM_GetClassCPEntriesCount; 5.91 - JVM_GetClassCPTypes; 5.92 - JVM_GetClassConstantPool; 5.93 - JVM_GetClassContext; 5.94 - JVM_GetClassDeclaredConstructors; 5.95 - JVM_GetClassDeclaredFields; 5.96 - JVM_GetClassDeclaredMethods; 5.97 - JVM_GetClassFieldsCount; 5.98 - JVM_GetClassInterfaces; 5.99 - JVM_GetClassLoader; 5.100 - JVM_GetClassMethodsCount; 5.101 - JVM_GetClassModifiers; 5.102 - JVM_GetClassName; 5.103 - JVM_GetClassNameUTF; 5.104 - JVM_GetClassSignature; 5.105 - JVM_GetClassSigners; 5.106 - JVM_GetComponentType; 5.107 - JVM_GetClassTypeAnnotations; 5.108 - JVM_GetDeclaredClasses; 5.109 - JVM_GetDeclaringClass; 5.110 - JVM_GetEnclosingMethodInfo; 5.111 - JVM_GetFieldAnnotations; 5.112 - JVM_GetFieldIxModifiers; 5.113 - JVM_GetHostName; 5.114 - JVM_GetInheritedAccessControlContext; 5.115 - JVM_GetInterfaceVersion; 5.116 - JVM_GetLastErrorString; 5.117 - JVM_GetManagement; 5.118 - JVM_GetMethodAnnotations; 5.119 - JVM_GetMethodDefaultAnnotationValue; 5.120 - JVM_GetMethodIxArgsSize; 5.121 - JVM_GetMethodIxByteCode; 5.122 - JVM_GetMethodIxByteCodeLength; 5.123 - JVM_GetMethodIxExceptionIndexes; 5.124 - JVM_GetMethodIxExceptionTableEntry; 5.125 - JVM_GetMethodIxExceptionTableLength; 5.126 - JVM_GetMethodIxExceptionsCount; 5.127 - JVM_GetMethodIxLocalsCount; 5.128 - JVM_GetMethodIxMaxStack; 5.129 - JVM_GetMethodIxModifiers; 5.130 - JVM_GetMethodIxNameUTF; 5.131 - JVM_GetMethodIxSignatureUTF; 5.132 - JVM_GetMethodParameterAnnotations; 5.133 - JVM_GetPrimitiveArrayElement; 5.134 - JVM_GetProtectionDomain; 5.135 - JVM_GetSockName; 5.136 - JVM_GetSockOpt; 5.137 - JVM_GetStackAccessControlContext; 5.138 - JVM_GetStackTraceDepth; 5.139 - JVM_GetStackTraceElement; 5.140 - JVM_GetSystemPackage; 5.141 - JVM_GetSystemPackages; 5.142 - JVM_GetThreadStateNames; 5.143 - JVM_GetThreadStateValues; 5.144 - JVM_GetVersionInfo; 5.145 - JVM_Halt; 5.146 - JVM_HoldsLock; 5.147 - JVM_IHashCode; 5.148 - JVM_InitAgentProperties; 5.149 - JVM_InitProperties; 5.150 - JVM_InitializeCompiler; 5.151 - JVM_InitializeSocketLibrary; 5.152 - JVM_InternString; 5.153 - JVM_Interrupt; 5.154 - JVM_InvokeMethod; 5.155 - JVM_IsArrayClass; 5.156 - JVM_IsConstructorIx; 5.157 - JVM_IsInterface; 5.158 - JVM_IsInterrupted; 5.159 - JVM_IsNaN; 5.160 - JVM_IsPrimitiveClass; 5.161 - JVM_IsSameClassPackage; 5.162 - JVM_IsSilentCompiler; 5.163 - JVM_IsSupportedJNIVersion; 5.164 - JVM_IsThreadAlive; 5.165 - JVM_LatestUserDefinedLoader; 5.166 - JVM_Listen; 5.167 - JVM_LoadClass0; 5.168 - JVM_LoadLibrary; 5.169 - JVM_Lseek; 5.170 - JVM_MaxObjectInspectionAge; 5.171 - JVM_MaxMemory; 5.172 - JVM_MonitorNotify; 5.173 - JVM_MonitorNotifyAll; 5.174 - JVM_MonitorWait; 5.175 - JVM_NativePath; 5.176 - JVM_NanoTime; 5.177 - JVM_NewArray; 5.178 - JVM_NewInstanceFromConstructor; 5.179 - JVM_NewMultiArray; 5.180 - JVM_OnExit; 5.181 - JVM_Open; 5.182 - JVM_PrintStackTrace; 5.183 - JVM_RaiseSignal; 5.184 - JVM_RawMonitorCreate; 5.185 - JVM_RawMonitorDestroy; 5.186 - JVM_RawMonitorEnter; 5.187 - JVM_RawMonitorExit; 5.188 - JVM_Read; 5.189 - JVM_Recv; 5.190 - JVM_RecvFrom; 5.191 - JVM_RegisterSignal; 5.192 - JVM_ReleaseUTF; 5.193 - JVM_ResolveClass; 5.194 - JVM_ResumeThread; 5.195 - JVM_Send; 5.196 - JVM_SendTo; 5.197 - JVM_SetArrayElement; 5.198 - JVM_SetClassSigners; 5.199 - JVM_SetLength; 5.200 + 5.201 + # JVM 5.202 + JVM_Accept; 5.203 + JVM_ActiveProcessorCount; 5.204 + JVM_AllocateNewArray; 5.205 + JVM_AllocateNewObject; 5.206 + JVM_ArrayCopy; 5.207 + JVM_AssertionStatusDirectives; 5.208 + JVM_Available; 5.209 + JVM_Bind; 5.210 + JVM_ClassDepth; 5.211 + JVM_ClassLoaderDepth; 5.212 + JVM_Clone; 5.213 + JVM_Close; 5.214 + JVM_CX8Field; 5.215 + JVM_CompileClass; 5.216 + JVM_CompileClasses; 5.217 + JVM_CompilerCommand; 5.218 + JVM_Connect; 5.219 + JVM_ConstantPoolGetClassAt; 5.220 + JVM_ConstantPoolGetClassAtIfLoaded; 5.221 + JVM_ConstantPoolGetDoubleAt; 5.222 + JVM_ConstantPoolGetFieldAt; 5.223 + JVM_ConstantPoolGetFieldAtIfLoaded; 5.224 + JVM_ConstantPoolGetFloatAt; 5.225 + JVM_ConstantPoolGetIntAt; 5.226 + JVM_ConstantPoolGetLongAt; 5.227 + JVM_ConstantPoolGetMethodAt; 5.228 + JVM_ConstantPoolGetMethodAtIfLoaded; 5.229 + JVM_ConstantPoolGetMemberRefInfoAt; 5.230 + JVM_ConstantPoolGetSize; 5.231 + JVM_ConstantPoolGetStringAt; 5.232 + JVM_ConstantPoolGetUTF8At; 5.233 + JVM_CountStackFrames; 5.234 + JVM_CurrentClassLoader; 5.235 + JVM_CurrentLoadedClass; 5.236 + JVM_CurrentThread; 5.237 + JVM_CurrentTimeMillis; 5.238 + JVM_DefineClass; 5.239 + JVM_DefineClassWithSource; 5.240 + JVM_DefineClassWithSourceCond; 5.241 + JVM_DesiredAssertionStatus; 5.242 + JVM_DisableCompiler; 5.243 + JVM_DoPrivileged; 5.244 + JVM_DTraceGetVersion; 5.245 + JVM_DTraceActivate; 5.246 + JVM_DTraceIsProbeEnabled; 5.247 + JVM_DTraceIsSupported; 5.248 + JVM_DTraceDispose; 5.249 + JVM_DumpAllStacks; 5.250 + JVM_DumpThreads; 5.251 + JVM_EnableCompiler; 5.252 + JVM_Exit; 5.253 + JVM_FillInStackTrace; 5.254 + JVM_FindClassFromClass; 5.255 + JVM_FindClassFromClassLoader; 5.256 + JVM_FindClassFromBootLoader; 5.257 + JVM_FindLibraryEntry; 5.258 + JVM_FindLoadedClass; 5.259 + JVM_FindPrimitiveClass; 5.260 + JVM_FindSignal; 5.261 + JVM_FreeMemory; 5.262 + JVM_GC; 5.263 + JVM_GetAllThreads; 5.264 + JVM_GetArrayElement; 5.265 + JVM_GetArrayLength; 5.266 + JVM_GetCPClassNameUTF; 5.267 + JVM_GetCPFieldClassNameUTF; 5.268 + JVM_GetCPFieldModifiers; 5.269 + JVM_GetCPFieldNameUTF; 5.270 + JVM_GetCPFieldSignatureUTF; 5.271 + JVM_GetCPMethodClassNameUTF; 5.272 + JVM_GetCPMethodModifiers; 5.273 + JVM_GetCPMethodNameUTF; 5.274 + JVM_GetCPMethodSignatureUTF; 5.275 + JVM_GetCallerClass; 5.276 + JVM_GetClassAccessFlags; 5.277 + JVM_GetClassAnnotations; 5.278 + JVM_GetClassCPEntriesCount; 5.279 + JVM_GetClassCPTypes; 5.280 + JVM_GetClassConstantPool; 5.281 + JVM_GetClassContext; 5.282 + JVM_GetClassDeclaredConstructors; 5.283 + JVM_GetClassDeclaredFields; 5.284 + JVM_GetClassDeclaredMethods; 5.285 + JVM_GetClassFieldsCount; 5.286 + JVM_GetClassInterfaces; 5.287 + JVM_GetClassLoader; 5.288 + JVM_GetClassMethodsCount; 5.289 + JVM_GetClassModifiers; 5.290 + JVM_GetClassName; 5.291 + JVM_GetClassNameUTF; 5.292 + JVM_GetClassSignature; 5.293 + JVM_GetClassSigners; 5.294 + JVM_GetComponentType; 5.295 + JVM_GetClassTypeAnnotations; 5.296 + JVM_GetDeclaredClasses; 5.297 + JVM_GetDeclaringClass; 5.298 + JVM_GetEnclosingMethodInfo; 5.299 + JVM_GetFieldAnnotations; 5.300 + JVM_GetFieldIxModifiers; 5.301 + JVM_GetHostName; 5.302 + JVM_GetInheritedAccessControlContext; 5.303 + JVM_GetInterfaceVersion; 5.304 + JVM_GetLastErrorString; 5.305 + JVM_GetManagement; 5.306 + JVM_GetMethodAnnotations; 5.307 + JVM_GetMethodDefaultAnnotationValue; 5.308 + JVM_GetMethodIxArgsSize; 5.309 + JVM_GetMethodIxByteCode; 5.310 + JVM_GetMethodIxByteCodeLength; 5.311 + JVM_GetMethodIxExceptionIndexes; 5.312 + JVM_GetMethodIxExceptionTableEntry; 5.313 + JVM_GetMethodIxExceptionTableLength; 5.314 + JVM_GetMethodIxExceptionsCount; 5.315 + JVM_GetMethodIxLocalsCount; 5.316 + JVM_GetMethodIxMaxStack; 5.317 + JVM_GetMethodIxModifiers; 5.318 + JVM_GetMethodIxNameUTF; 5.319 + JVM_GetMethodIxSignatureUTF; 5.320 + JVM_GetMethodParameterAnnotations; 5.321 + JVM_GetMethodParameters; 5.322 + JVM_GetPrimitiveArrayElement; 5.323 + JVM_GetProtectionDomain; 5.324 + JVM_GetSockName; 5.325 + JVM_GetSockOpt; 5.326 + JVM_GetStackAccessControlContext; 5.327 + JVM_GetStackTraceDepth; 5.328 + JVM_GetStackTraceElement; 5.329 + JVM_GetSystemPackage; 5.330 + JVM_GetSystemPackages; 5.331 + JVM_GetThreadStateNames; 5.332 + JVM_GetThreadStateValues; 5.333 + JVM_GetVersionInfo; 5.334 + JVM_Halt; 5.335 + JVM_HoldsLock; 5.336 + JVM_IHashCode; 5.337 + JVM_InitAgentProperties; 5.338 + JVM_InitProperties; 5.339 + JVM_InitializeCompiler; 5.340 + JVM_InitializeSocketLibrary; 5.341 + JVM_InternString; 5.342 + JVM_Interrupt; 5.343 + JVM_InvokeMethod; 5.344 + JVM_IsArrayClass; 5.345 + JVM_IsConstructorIx; 5.346 + JVM_IsInterface; 5.347 + JVM_IsInterrupted; 5.348 + JVM_IsNaN; 5.349 + JVM_IsPrimitiveClass; 5.350 + JVM_IsSameClassPackage; 5.351 + JVM_IsSilentCompiler; 5.352 + JVM_IsSupportedJNIVersion; 5.353 + JVM_IsThreadAlive; 5.354 + JVM_LatestUserDefinedLoader; 5.355 + JVM_Listen; 5.356 + JVM_LoadClass0; 5.357 + JVM_LoadLibrary; 5.358 + JVM_Lseek; 5.359 + JVM_MaxObjectInspectionAge; 5.360 + JVM_MaxMemory; 5.361 + JVM_MonitorNotify; 5.362 + JVM_MonitorNotifyAll; 5.363 + JVM_MonitorWait; 5.364 + JVM_NativePath; 5.365 + JVM_NanoTime; 5.366 + JVM_NewArray; 5.367 + JVM_NewInstanceFromConstructor; 5.368 + JVM_NewMultiArray; 5.369 + JVM_OnExit; 5.370 + JVM_Open; 5.371 + JVM_PrintStackTrace; 5.372 + JVM_RaiseSignal; 5.373 + JVM_RawMonitorCreate; 5.374 + JVM_RawMonitorDestroy; 5.375 + JVM_RawMonitorEnter; 5.376 + JVM_RawMonitorExit; 5.377 + JVM_Read; 5.378 + JVM_Recv; 5.379 + JVM_RecvFrom; 5.380 + JVM_RegisterSignal; 5.381 + JVM_ReleaseUTF; 5.382 + JVM_ResolveClass; 5.383 + JVM_ResumeThread; 5.384 + JVM_Send; 5.385 + JVM_SendTo; 5.386 + JVM_SetArrayElement; 5.387 + JVM_SetClassSigners; 5.388 + JVM_SetLength; 5.389 JVM_SetNativeThreadName; 5.390 - JVM_SetPrimitiveArrayElement; 5.391 - JVM_SetProtectionDomain; 5.392 - JVM_SetSockOpt; 5.393 - JVM_SetThreadPriority; 5.394 - JVM_Sleep; 5.395 - JVM_Socket; 5.396 - JVM_SocketAvailable; 5.397 - JVM_SocketClose; 5.398 - JVM_SocketShutdown; 5.399 - JVM_StartThread; 5.400 - JVM_StopThread; 5.401 - JVM_SuspendThread; 5.402 - JVM_SupportsCX8; 5.403 - JVM_Sync; 5.404 - JVM_Timeout; 5.405 - JVM_TotalMemory; 5.406 - JVM_TraceInstructions; 5.407 - JVM_TraceMethodCalls; 5.408 - JVM_UnloadLibrary; 5.409 - JVM_Write; 5.410 - JVM_Yield; 5.411 - JVM_handle_solaris_signal; 5.412 + JVM_SetPrimitiveArrayElement; 5.413 + JVM_SetProtectionDomain; 5.414 + JVM_SetSockOpt; 5.415 + JVM_SetThreadPriority; 5.416 + JVM_Sleep; 5.417 + JVM_Socket; 5.418 + JVM_SocketAvailable; 5.419 + JVM_SocketClose; 5.420 + JVM_SocketShutdown; 5.421 + JVM_StartThread; 5.422 + JVM_StopThread; 5.423 + JVM_SuspendThread; 5.424 + JVM_SupportsCX8; 5.425 + JVM_Sync; 5.426 + JVM_Timeout; 5.427 + JVM_TotalMemory; 5.428 + JVM_TraceInstructions; 5.429 + JVM_TraceMethodCalls; 5.430 + JVM_UnloadLibrary; 5.431 + JVM_Write; 5.432 + JVM_Yield; 5.433 + JVM_handle_solaris_signal; 5.434 5.435 - # miscellaneous functions 5.436 - jio_fprintf; 5.437 - jio_printf; 5.438 - jio_snprintf; 5.439 - jio_vfprintf; 5.440 - jio_vsnprintf; 5.441 + # miscellaneous functions 5.442 + jio_fprintf; 5.443 + jio_printf; 5.444 + jio_snprintf; 5.445 + jio_vfprintf; 5.446 + jio_vsnprintf; 5.447 5.448 - # Needed because there is no JVM interface for this. 5.449 - sysThreadAvailableStackWithSlack; 5.450 + # Needed because there is no JVM interface for this. 5.451 + sysThreadAvailableStackWithSlack; 5.452 5.453 - # This is for Forte Analyzer profiling support. 5.454 - AsyncGetCallTrace; 5.455 + # This is for Forte Analyzer profiling support. 5.456 + AsyncGetCallTrace; 5.457 5.458 - # INSERT VTABLE SYMBOLS HERE 5.459 + # INSERT VTABLE SYMBOLS HERE 5.460 5.461 local: 5.462 *;
6.1 --- a/src/share/vm/classfile/classFileParser.cpp Tue Jan 08 13:38:11 2013 -0500 6.2 +++ b/src/share/vm/classfile/classFileParser.cpp Tue Jan 08 13:44:10 2013 -0800 6.3 @@ -1935,6 +1935,8 @@ 6.4 u2** localvariable_table_start; 6.5 u2* localvariable_type_table_length; 6.6 u2** localvariable_type_table_start; 6.7 + u2 method_parameters_length = 0; 6.8 + u1* method_parameters_data = NULL; 6.9 bool parsed_code_attribute = false; 6.10 bool parsed_checked_exceptions_attribute = false; 6.11 bool parsed_stackmap_attribute = false; 6.12 @@ -2144,6 +2146,14 @@ 6.13 parse_checked_exceptions(&checked_exceptions_length, 6.14 method_attribute_length, 6.15 cp, CHECK_(nullHandle)); 6.16 + } else if (method_attribute_name == vmSymbols::tag_method_parameters()) { 6.17 + method_parameters_length = cfs->get_u1_fast(); 6.18 + method_parameters_data = cfs->get_u1_buffer(); 6.19 + cfs->skip_u2_fast(method_parameters_length); 6.20 + cfs->skip_u4_fast(method_parameters_length); 6.21 + // ignore this attribute if it cannot be reflected 6.22 + if (!SystemDictionary::Parameter_klass_loaded()) 6.23 + method_parameters_length = 0; 6.24 } else if (method_attribute_name == vmSymbols::tag_synthetic()) { 6.25 if (method_attribute_length != 0) { 6.26 classfile_parse_error( 6.27 @@ -2231,7 +2241,8 @@ 6.28 Method* m = Method::allocate( 6.29 loader_data, code_length, access_flags, linenumber_table_length, 6.30 total_lvt_length, exception_table_length, checked_exceptions_length, 6.31 - generic_signature_index, ConstMethod::NORMAL, CHECK_(nullHandle)); 6.32 + method_parameters_length, generic_signature_index, 6.33 + ConstMethod::NORMAL, CHECK_(nullHandle)); 6.34 6.35 ClassLoadingService::add_class_method_size(m->size()*HeapWordSize); 6.36 6.37 @@ -2279,6 +2290,18 @@ 6.38 exception_table_start, size); 6.39 } 6.40 6.41 + // Copy method parameters 6.42 + if (method_parameters_length > 0) { 6.43 + MethodParametersElement* elem = m->constMethod()->method_parameters_start(); 6.44 + for(int i = 0; i < method_parameters_length; i++) { 6.45 + elem[i].name_cp_index = 6.46 + Bytes::get_Java_u2(method_parameters_data); 6.47 + method_parameters_data += 2; 6.48 + elem[i].flags = Bytes::get_Java_u4(method_parameters_data); 6.49 + method_parameters_data += 4; 6.50 + } 6.51 + } 6.52 + 6.53 // Copy checked exceptions 6.54 if (checked_exceptions_length > 0) { 6.55 int size = checked_exceptions_length * sizeof(CheckedExceptionElement) / sizeof(u2); 6.56 @@ -3042,6 +3065,7 @@ 6.57 TempNewSymbol& parsed_name, 6.58 bool verify, 6.59 TRAPS) { 6.60 + 6.61 // When a retransformable agent is attached, JVMTI caches the 6.62 // class bytes that existed before the first retransformation. 6.63 // If RedefineClasses() was used before the retransformable
7.1 --- a/src/share/vm/classfile/classFileStream.cpp Tue Jan 08 13:38:11 2013 -0500 7.2 +++ b/src/share/vm/classfile/classFileStream.cpp Tue Jan 08 13:44:10 2013 -0800 7.3 @@ -93,3 +93,10 @@ 7.4 } 7.5 _current += length * 2; 7.6 } 7.7 + 7.8 +void ClassFileStream::skip_u4(int length, TRAPS) { 7.9 + if (_need_verify) { 7.10 + guarantee_more(length * 4, CHECK); 7.11 + } 7.12 + _current += length * 4; 7.13 +}
8.1 --- a/src/share/vm/classfile/classFileStream.hpp Tue Jan 08 13:38:11 2013 -0500 8.2 +++ b/src/share/vm/classfile/classFileStream.hpp Tue Jan 08 13:44:10 2013 -0800 8.3 @@ -133,6 +133,11 @@ 8.4 _current += 2 * length; 8.5 } 8.6 8.7 + void skip_u4(int length, TRAPS); 8.8 + void skip_u4_fast(int length) { 8.9 + _current += 4 * length; 8.10 + } 8.11 + 8.12 // Tells whether eos is reached 8.13 bool at_eos() const { return _current == _buffer_end; } 8.14 };
9.1 --- a/src/share/vm/classfile/defaultMethods.cpp Tue Jan 08 13:38:11 2013 -0500 9.2 +++ b/src/share/vm/classfile/defaultMethods.cpp Tue Jan 08 13:44:10 2013 -0800 9.3 @@ -1148,7 +1148,8 @@ 9.4 int code_length = bytecodes->length(); 9.5 9.6 Method* m = Method::allocate(cp->pool_holder()->class_loader_data(), 9.7 - code_length, flags, 0, 0, 0, 0, 0, mt, CHECK_NULL); 9.8 + code_length, flags, 0, 0, 0, 0, 0, 0, 9.9 + mt, CHECK_NULL); 9.10 9.11 m->set_constants(NULL); // This will get filled in later 9.12 m->set_name_index(cp->utf8(name));
10.1 --- a/src/share/vm/classfile/javaClasses.cpp Tue Jan 08 13:38:11 2013 -0500 10.2 +++ b/src/share/vm/classfile/javaClasses.cpp Tue Jan 08 13:44:10 2013 -0800 10.3 @@ -2255,6 +2255,66 @@ 10.4 } 10.5 } 10.6 10.7 +void java_lang_reflect_Parameter::compute_offsets() { 10.8 + Klass* k = SystemDictionary::reflect_Parameter_klass(); 10.9 + if(NULL != k) { 10.10 + compute_offset(name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); 10.11 + compute_offset(modifiers_offset, k, vmSymbols::modifiers_name(), vmSymbols::int_signature()); 10.12 + compute_offset(index_offset, k, vmSymbols::index_name(), vmSymbols::int_signature()); 10.13 + compute_offset(executable_offset, k, vmSymbols::executable_name(), vmSymbols::executable_signature()); 10.14 + } 10.15 +} 10.16 + 10.17 +Handle java_lang_reflect_Parameter::create(TRAPS) { 10.18 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.19 + Symbol* name = vmSymbols::java_lang_reflect_Parameter(); 10.20 + Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); 10.21 + instanceKlassHandle klass (THREAD, k); 10.22 + // Ensure it is initialized 10.23 + klass->initialize(CHECK_NH); 10.24 + return klass->allocate_instance_handle(CHECK_NH); 10.25 +} 10.26 + 10.27 +oop java_lang_reflect_Parameter::name(oop param) { 10.28 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.29 + return param->obj_field(name_offset); 10.30 +} 10.31 + 10.32 +void java_lang_reflect_Parameter::set_name(oop param, oop value) { 10.33 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.34 + param->obj_field_put(name_offset, value); 10.35 +} 10.36 + 10.37 +int java_lang_reflect_Parameter::modifiers(oop param) { 10.38 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.39 + return param->int_field(modifiers_offset); 10.40 +} 10.41 + 10.42 +void java_lang_reflect_Parameter::set_modifiers(oop param, int value) { 10.43 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.44 + param->int_field_put(modifiers_offset, value); 10.45 +} 10.46 + 10.47 +int java_lang_reflect_Parameter::index(oop param) { 10.48 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.49 + return param->int_field(index_offset); 10.50 +} 10.51 + 10.52 +void java_lang_reflect_Parameter::set_index(oop param, int value) { 10.53 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.54 + param->int_field_put(index_offset, value); 10.55 +} 10.56 + 10.57 +oop java_lang_reflect_Parameter::executable(oop param) { 10.58 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.59 + return param->obj_field(executable_offset); 10.60 +} 10.61 + 10.62 +void java_lang_reflect_Parameter::set_executable(oop param, oop value) { 10.63 + assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.64 + param->obj_field_put(executable_offset, value); 10.65 +} 10.66 + 10.67 10.68 Handle sun_reflect_ConstantPool::create(TRAPS) { 10.69 assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); 10.70 @@ -2928,6 +2988,10 @@ 10.71 int java_lang_reflect_Field::signature_offset; 10.72 int java_lang_reflect_Field::annotations_offset; 10.73 int java_lang_reflect_Field::type_annotations_offset; 10.74 +int java_lang_reflect_Parameter::name_offset; 10.75 +int java_lang_reflect_Parameter::modifiers_offset; 10.76 +int java_lang_reflect_Parameter::index_offset; 10.77 +int java_lang_reflect_Parameter::executable_offset; 10.78 int java_lang_boxing_object::value_offset; 10.79 int java_lang_boxing_object::long_value_offset; 10.80 int java_lang_ref_Reference::referent_offset; 10.81 @@ -3112,6 +3176,8 @@ 10.82 sun_reflect_ConstantPool::compute_offsets(); 10.83 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets(); 10.84 } 10.85 + if (JDK_Version::is_jdk18x_version()) 10.86 + java_lang_reflect_Parameter::compute_offsets(); 10.87 10.88 // generated interpreter code wants to know about the offsets we just computed: 10.89 AbstractAssembler::update_delayed_values();
11.1 --- a/src/share/vm/classfile/javaClasses.hpp Tue Jan 08 13:38:11 2013 -0500 11.2 +++ b/src/share/vm/classfile/javaClasses.hpp Tue Jan 08 13:44:10 2013 -0800 11.3 @@ -729,6 +729,37 @@ 11.4 friend class JavaClasses; 11.5 }; 11.6 11.7 +class java_lang_reflect_Parameter { 11.8 + private: 11.9 + // Note that to reduce dependencies on the JDK we compute these 11.10 + // offsets at run-time. 11.11 + static int name_offset; 11.12 + static int modifiers_offset; 11.13 + static int index_offset; 11.14 + static int executable_offset; 11.15 + 11.16 + static void compute_offsets(); 11.17 + 11.18 + public: 11.19 + // Allocation 11.20 + static Handle create(TRAPS); 11.21 + 11.22 + // Accessors 11.23 + static oop name(oop field); 11.24 + static void set_name(oop field, oop value); 11.25 + 11.26 + static int index(oop reflect); 11.27 + static void set_index(oop reflect, int value); 11.28 + 11.29 + static int modifiers(oop reflect); 11.30 + static void set_modifiers(oop reflect, int value); 11.31 + 11.32 + static oop executable(oop constructor); 11.33 + static void set_executable(oop constructor, oop value); 11.34 + 11.35 + friend class JavaClasses; 11.36 +}; 11.37 + 11.38 // Interface to sun.reflect.ConstantPool objects 11.39 class sun_reflect_ConstantPool { 11.40 private:
12.1 --- a/src/share/vm/classfile/systemDictionary.hpp Tue Jan 08 13:38:11 2013 -0500 12.2 +++ b/src/share/vm/classfile/systemDictionary.hpp Tue Jan 08 13:44:10 2013 -0800 12.3 @@ -131,6 +131,7 @@ 12.4 do_klass(Properties_klass, java_util_Properties, Pre ) \ 12.5 do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \ 12.6 do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \ 12.7 + do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter, Opt ) \ 12.8 do_klass(reflect_Method_klass, java_lang_reflect_Method, Pre ) \ 12.9 do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre ) \ 12.10 \ 12.11 @@ -459,6 +460,7 @@ 12.12 // Tells whether ClassLoader.checkPackageAccess is present 12.13 static bool has_checkPackageAccess() { return _has_checkPackageAccess; } 12.14 12.15 + static bool Parameter_klass_loaded() { return WK_KLASS(reflect_Parameter_klass) != NULL; } 12.16 static bool Class_klass_loaded() { return WK_KLASS(Class_klass) != NULL; } 12.17 static bool Cloneable_klass_loaded() { return WK_KLASS(Cloneable_klass) != NULL; } 12.18 static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; }
13.1 --- a/src/share/vm/classfile/vmSymbols.hpp Tue Jan 08 13:38:11 2013 -0500 13.2 +++ b/src/share/vm/classfile/vmSymbols.hpp Tue Jan 08 13:44:10 2013 -0800 13.3 @@ -86,6 +86,7 @@ 13.4 template(java_lang_reflect_Method, "java/lang/reflect/Method") \ 13.5 template(java_lang_reflect_Constructor, "java/lang/reflect/Constructor") \ 13.6 template(java_lang_reflect_Field, "java/lang/reflect/Field") \ 13.7 + template(java_lang_reflect_Parameter, "java/lang/reflect/Parameter") \ 13.8 template(java_lang_reflect_Array, "java/lang/reflect/Array") \ 13.9 template(java_lang_StringBuffer, "java/lang/StringBuffer") \ 13.10 template(java_lang_StringBuilder, "java/lang/StringBuilder") \ 13.11 @@ -126,6 +127,7 @@ 13.12 template(tag_line_number_table, "LineNumberTable") \ 13.13 template(tag_local_variable_table, "LocalVariableTable") \ 13.14 template(tag_local_variable_type_table, "LocalVariableTypeTable") \ 13.15 + template(tag_method_parameters, "MethodParameters") \ 13.16 template(tag_stack_map_table, "StackMapTable") \ 13.17 template(tag_synthetic, "Synthetic") \ 13.18 template(tag_deprecated, "Deprecated") \ 13.19 @@ -235,6 +237,8 @@ 13.20 /* Support for annotations (JDK 1.5 and above) */ \ 13.21 \ 13.22 template(annotations_name, "annotations") \ 13.23 + template(index_name, "index") \ 13.24 + template(executable_name, "executable") \ 13.25 template(parameter_annotations_name, "parameterAnnotations") \ 13.26 template(annotation_default_name, "annotationDefault") \ 13.27 template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \ 13.28 @@ -475,6 +479,7 @@ 13.29 template(class_signature, "Ljava/lang/Class;") \ 13.30 template(string_signature, "Ljava/lang/String;") \ 13.31 template(reference_signature, "Ljava/lang/ref/Reference;") \ 13.32 + template(executable_signature, "Ljava/lang/reflect/Executable;") \ 13.33 template(concurrenthashmap_signature, "Ljava/util/concurrent/ConcurrentHashMap;") \ 13.34 template(String_StringBuilder_signature, "(Ljava/lang/String;)Ljava/lang/StringBuilder;") \ 13.35 template(int_StringBuilder_signature, "(I)Ljava/lang/StringBuilder;") \
14.1 --- a/src/share/vm/oops/constMethod.cpp Tue Jan 08 13:38:11 2013 -0500 14.2 +++ b/src/share/vm/oops/constMethod.cpp Tue Jan 08 13:44:10 2013 -0800 14.3 @@ -39,18 +39,21 @@ 14.4 int localvariable_table_length, 14.5 int exception_table_length, 14.6 int checked_exceptions_length, 14.7 + int method_parameters_length, 14.8 u2 generic_signature_index, 14.9 MethodType method_type, 14.10 TRAPS) { 14.11 int size = ConstMethod::size(byte_code_size, 14.12 - compressed_line_number_size, 14.13 - localvariable_table_length, 14.14 - exception_table_length, 14.15 - checked_exceptions_length, 14.16 - generic_signature_index); 14.17 + compressed_line_number_size, 14.18 + localvariable_table_length, 14.19 + exception_table_length, 14.20 + checked_exceptions_length, 14.21 + method_parameters_length, 14.22 + generic_signature_index); 14.23 return new (loader_data, size, true, THREAD) ConstMethod( 14.24 byte_code_size, compressed_line_number_size, localvariable_table_length, 14.25 - exception_table_length, checked_exceptions_length, generic_signature_index, 14.26 + exception_table_length, checked_exceptions_length, 14.27 + method_parameters_length, generic_signature_index, 14.28 method_type, size); 14.29 } 14.30 14.31 @@ -59,6 +62,7 @@ 14.32 int localvariable_table_length, 14.33 int exception_table_length, 14.34 int checked_exceptions_length, 14.35 + int method_parameters_length, 14.36 u2 generic_signature_index, 14.37 MethodType method_type, 14.38 int size) { 14.39 @@ -74,7 +78,8 @@ 14.40 checked_exceptions_length, 14.41 compressed_line_number_size, 14.42 localvariable_table_length, 14.43 - exception_table_length); 14.44 + exception_table_length, 14.45 + method_parameters_length); 14.46 set_method_type(method_type); 14.47 assert(this->size() == size, "wrong size for object"); 14.48 } 14.49 @@ -92,11 +97,12 @@ 14.50 // How big must this constMethodObject be? 14.51 14.52 int ConstMethod::size(int code_size, 14.53 - int compressed_line_number_size, 14.54 - int local_variable_table_length, 14.55 - int exception_table_length, 14.56 - int checked_exceptions_length, 14.57 - u2 generic_signature_index) { 14.58 + int compressed_line_number_size, 14.59 + int local_variable_table_length, 14.60 + int exception_table_length, 14.61 + int checked_exceptions_length, 14.62 + int method_parameters_length, 14.63 + u2 generic_signature_index) { 14.64 int extra_bytes = code_size; 14.65 if (compressed_line_number_size > 0) { 14.66 extra_bytes += compressed_line_number_size; 14.67 @@ -117,6 +123,10 @@ 14.68 if (generic_signature_index != 0) { 14.69 extra_bytes += sizeof(u2); 14.70 } 14.71 + if (method_parameters_length > 0) { 14.72 + extra_bytes += sizeof(u2); 14.73 + extra_bytes += method_parameters_length * sizeof(MethodParametersElement); 14.74 + } 14.75 int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; 14.76 return align_object_size(header_size() + extra_words); 14.77 } 14.78 @@ -143,6 +153,18 @@ 14.79 u2* ConstMethod::checked_exceptions_length_addr() const { 14.80 // Located immediately before the generic signature index. 14.81 assert(has_checked_exceptions(), "called only if table is present"); 14.82 + if(has_method_parameters()) { 14.83 + // If method parameters present, locate immediately before them. 14.84 + return (u2*)method_parameters_start() - 1; 14.85 + } else { 14.86 + // Else, the exception table is at the end of the constMethod. 14.87 + return has_generic_signature() ? (last_u2_element() - 1) : 14.88 + last_u2_element(); 14.89 + } 14.90 +} 14.91 + 14.92 +u2* ConstMethod::method_parameters_length_addr() const { 14.93 + assert(has_method_parameters(), "called only if table is present"); 14.94 return has_generic_signature() ? (last_u2_element() - 1) : 14.95 last_u2_element(); 14.96 } 14.97 @@ -153,11 +175,15 @@ 14.98 // If checked_exception present, locate immediately before them. 14.99 return (u2*) checked_exceptions_start() - 1; 14.100 } else { 14.101 - // Else, the exception table is at the end of the constMethod or 14.102 - // immediately before the generic signature index. 14.103 + if(has_method_parameters()) { 14.104 + // If method parameters present, locate immediately before them. 14.105 + return (u2*)method_parameters_start() - 1; 14.106 + } else { 14.107 + // Else, the exception table is at the end of the constMethod. 14.108 return has_generic_signature() ? (last_u2_element() - 1) : 14.109 last_u2_element(); 14.110 } 14.111 + } 14.112 } 14.113 14.114 u2* ConstMethod::localvariable_table_length_addr() const { 14.115 @@ -170,12 +196,16 @@ 14.116 // If checked_exception present, locate immediately before them. 14.117 return (u2*) checked_exceptions_start() - 1; 14.118 } else { 14.119 - // Else, the linenumber table is at the end of the constMethod or 14.120 - // immediately before the generic signature index. 14.121 + if(has_method_parameters()) { 14.122 + // If method parameters present, locate immediately before them. 14.123 + return (u2*)method_parameters_start() - 1; 14.124 + } else { 14.125 + // Else, the exception table is at the end of the constMethod. 14.126 return has_generic_signature() ? (last_u2_element() - 1) : 14.127 last_u2_element(); 14.128 } 14.129 } 14.130 + } 14.131 } 14.132 14.133 // Update the flags to indicate the presence of these optional fields. 14.134 @@ -183,29 +213,57 @@ 14.135 int checked_exceptions_len, 14.136 int compressed_line_number_size, 14.137 int localvariable_table_len, 14.138 - int exception_table_len) { 14.139 - // Must be done in the order below, otherwise length_addr accessors 14.140 - // will not work. Only set bit in header if length is positive. 14.141 + int exception_table_len, 14.142 + int method_parameters_len) { 14.143 assert(_flags == 0, "Error"); 14.144 - if (compressed_line_number_size > 0) { 14.145 + if (compressed_line_number_size > 0) 14.146 _flags |= _has_linenumber_table; 14.147 - } 14.148 - if (generic_signature_index != 0) { 14.149 + if (generic_signature_index != 0) 14.150 _flags |= _has_generic_signature; 14.151 + if (method_parameters_len > 0) 14.152 + _flags |= _has_method_parameters; 14.153 + if (checked_exceptions_len > 0) 14.154 + _flags |= _has_checked_exceptions; 14.155 + if (exception_table_len > 0) 14.156 + _flags |= _has_exception_table; 14.157 + if (localvariable_table_len > 0) 14.158 + _flags |= _has_localvariable_table; 14.159 + 14.160 + // This code is extremely brittle and should possibly be revised. 14.161 + // The *_length_addr functions walk backwards through the 14.162 + // constMethod data, using each of the length indexes ahead of them, 14.163 + // as well as the flags variable. Therefore, the indexes must be 14.164 + // initialized in reverse order, or else they will compute the wrong 14.165 + // offsets. Moving the initialization of _flags into a separate 14.166 + // block solves *half* of the problem, but the following part will 14.167 + // still break if the order is not exactly right. 14.168 + // 14.169 + // Also, the servicability agent needs to be informed anytime 14.170 + // anything is added here. It might be advisable to have some sort 14.171 + // of indication of this inline. 14.172 + if (generic_signature_index != 0) 14.173 *(generic_signature_index_addr()) = generic_signature_index; 14.174 - } 14.175 - if (checked_exceptions_len > 0) { 14.176 - _flags |= _has_checked_exceptions; 14.177 + // New data should probably go here. 14.178 + if (method_parameters_len > 0) 14.179 + *(method_parameters_length_addr()) = method_parameters_len; 14.180 + if (checked_exceptions_len > 0) 14.181 *(checked_exceptions_length_addr()) = checked_exceptions_len; 14.182 - } 14.183 - if (exception_table_len > 0) { 14.184 - _flags |= _has_exception_table; 14.185 + if (exception_table_len > 0) 14.186 *(exception_table_length_addr()) = exception_table_len; 14.187 - } 14.188 - if (localvariable_table_len > 0) { 14.189 - _flags |= _has_localvariable_table; 14.190 + if (localvariable_table_len > 0) 14.191 *(localvariable_table_length_addr()) = localvariable_table_len; 14.192 - } 14.193 +} 14.194 + 14.195 +int ConstMethod::method_parameters_length() const { 14.196 + return has_method_parameters() ? *(method_parameters_length_addr()) : 0; 14.197 +} 14.198 + 14.199 +MethodParametersElement* ConstMethod::method_parameters_start() const { 14.200 + u2* addr = method_parameters_length_addr(); 14.201 + u2 length = *addr; 14.202 + assert(length > 0, "should only be called if table is present"); 14.203 + addr -= length * sizeof(MethodParametersElement) / sizeof(u2); 14.204 + return (MethodParametersElement*) addr; 14.205 } 14.206 14.207 14.208 @@ -298,6 +356,10 @@ 14.209 } 14.210 guarantee(compressed_table_end <= m_end, "invalid method layout"); 14.211 // Verify checked exceptions, exception table and local variable tables 14.212 + if (has_method_parameters()) { 14.213 + u2* addr = method_parameters_length_addr(); 14.214 + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); 14.215 + } 14.216 if (has_checked_exceptions()) { 14.217 u2* addr = checked_exceptions_length_addr(); 14.218 guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); 14.219 @@ -318,6 +380,8 @@ 14.220 uncompressed_table_start = (u2*) exception_table_start(); 14.221 } else if (has_checked_exceptions()) { 14.222 uncompressed_table_start = (u2*) checked_exceptions_start(); 14.223 + } else if (has_method_parameters()) { 14.224 + uncompressed_table_start = (u2*) method_parameters_start(); 14.225 } else { 14.226 uncompressed_table_start = (u2*) m_end; 14.227 }
15.1 --- a/src/share/vm/oops/constMethod.hpp Tue Jan 08 13:38:11 2013 -0500 15.2 +++ b/src/share/vm/oops/constMethod.hpp Tue Jan 08 13:44:10 2013 -0800 15.3 @@ -77,9 +77,18 @@ 15.4 // | (access flags bit tells whether table is present) | 15.5 // | (indexed from end of ConstMethod*) | 15.6 // |------------------------------------------------------| 15.7 +// | method parameters elements + length (length last) | 15.8 +// | (length is u2, elements are u2, u4 structures) | 15.9 +// | (see class MethodParametersElement) | 15.10 +// | (access flags bit tells whether table is present) | 15.11 +// | (indexed from end of ConstMethod*) | 15.12 +// |------------------------------------------------------| 15.13 // | generic signature index (u2) | 15.14 // | (indexed from start of constMethodOop) | 15.15 // |------------------------------------------------------| 15.16 +// 15.17 +// IMPORTANT: If anything gets added here, there need to be changes to 15.18 +// ensure that ServicabilityAgent doesn't get broken as a result! 15.19 15.20 15.21 // Utitily class decribing elements in checked exceptions table inlined in Method*. 15.22 @@ -109,6 +118,13 @@ 15.23 u2 catch_type_index; 15.24 }; 15.25 15.26 +// Utility class describing elements in method parameters 15.27 +class MethodParametersElement VALUE_OBJ_CLASS_SPEC { 15.28 + public: 15.29 + u2 name_cp_index; 15.30 + u4 flags; 15.31 +}; 15.32 + 15.33 15.34 class ConstMethod : public MetaspaceObj { 15.35 friend class VMStructs; 15.36 @@ -123,7 +139,8 @@ 15.37 _has_localvariable_table = 4, 15.38 _has_exception_table = 8, 15.39 _has_generic_signature = 16, 15.40 - _is_overpass = 32 15.41 + _has_method_parameters = 32, 15.42 + _is_overpass = 64 15.43 }; 15.44 15.45 // Bit vector of signature 15.46 @@ -160,6 +177,7 @@ 15.47 int localvariable_table_length, 15.48 int exception_table_length, 15.49 int checked_exceptions_length, 15.50 + int method_parameters_length, 15.51 u2 generic_signature_index, 15.52 MethodType is_overpass, 15.53 int size); 15.54 @@ -171,6 +189,7 @@ 15.55 int localvariable_table_length, 15.56 int exception_table_length, 15.57 int checked_exceptions_length, 15.58 + int method_parameters_length, 15.59 u2 generic_signature_index, 15.60 MethodType mt, 15.61 TRAPS); 15.62 @@ -182,7 +201,8 @@ 15.63 int checked_exceptions_len, 15.64 int compressed_line_number_size, 15.65 int localvariable_table_len, 15.66 - int exception_table_len); 15.67 + int exception_table_len, 15.68 + int method_parameters_length); 15.69 15.70 bool has_generic_signature() const 15.71 { return (_flags & _has_generic_signature) != 0; } 15.72 @@ -199,6 +219,9 @@ 15.73 bool has_exception_handler() const 15.74 { return (_flags & _has_exception_table) != 0; } 15.75 15.76 + bool has_method_parameters() const 15.77 + { return (_flags & _has_method_parameters) != 0; } 15.78 + 15.79 MethodType method_type() const { 15.80 return ((_flags & _is_overpass) == 0) ? NORMAL : OVERPASS; 15.81 } 15.82 @@ -284,10 +307,11 @@ 15.83 15.84 // Size needed 15.85 static int size(int code_size, int compressed_line_number_size, 15.86 - int local_variable_table_length, 15.87 - int exception_table_length, 15.88 - int checked_exceptions_length, 15.89 - u2 generic_signature_index); 15.90 + int local_variable_table_length, 15.91 + int exception_table_length, 15.92 + int checked_exceptions_length, 15.93 + int method_parameters_length, 15.94 + u2 generic_signature_index); 15.95 15.96 int size() const { return _constMethod_size;} 15.97 void set_constMethod_size(int size) { _constMethod_size = size; } 15.98 @@ -308,6 +332,7 @@ 15.99 u2* checked_exceptions_length_addr() const; 15.100 u2* localvariable_table_length_addr() const; 15.101 u2* exception_table_length_addr() const; 15.102 + u2* method_parameters_length_addr() const; 15.103 15.104 // checked exceptions 15.105 int checked_exceptions_length() const; 15.106 @@ -321,6 +346,10 @@ 15.107 int exception_table_length() const; 15.108 ExceptionTableElement* exception_table_start() const; 15.109 15.110 + // method parameters table 15.111 + int method_parameters_length() const; 15.112 + MethodParametersElement* method_parameters_start() const; 15.113 + 15.114 // byte codes 15.115 void set_code(address code) { 15.116 if (code_size() > 0) {
16.1 --- a/src/share/vm/oops/method.cpp Tue Jan 08 13:38:11 2013 -0500 16.2 +++ b/src/share/vm/oops/method.cpp Tue Jan 08 13:44:10 2013 -0800 16.3 @@ -64,6 +64,7 @@ 16.4 int localvariable_table_length, 16.5 int exception_table_length, 16.6 int checked_exceptions_length, 16.7 + int method_parameters_length, 16.8 u2 generic_signature_index, 16.9 ConstMethod::MethodType method_type, 16.10 TRAPS) { 16.11 @@ -75,6 +76,7 @@ 16.12 localvariable_table_length, 16.13 exception_table_length, 16.14 checked_exceptions_length, 16.15 + method_parameters_length, 16.16 generic_signature_index, 16.17 method_type, 16.18 CHECK_NULL); 16.19 @@ -1035,8 +1037,10 @@ 16.20 16.21 methodHandle m; 16.22 { 16.23 - Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits), 16.24 - 0, 0, 0, 0, 0, ConstMethod::NORMAL, CHECK_(empty)); 16.25 + Method* m_oop = Method::allocate(loader_data, 0, 16.26 + accessFlags_from(flags_bits), 16.27 + 0, 0, 0, 0, 0, 0, 16.28 + ConstMethod::NORMAL, CHECK_(empty)); 16.29 m = methodHandle(THREAD, m_oop); 16.30 } 16.31 m->set_constants(cp()); 16.32 @@ -1088,6 +1092,7 @@ 16.33 int checked_exceptions_len = m->checked_exceptions_length(); 16.34 int localvariable_len = m->localvariable_table_length(); 16.35 int exception_table_len = m->exception_table_length(); 16.36 + int method_parameters_len = m->method_parameters_length(); 16.37 16.38 ClassLoaderData* loader_data = m->method_holder()->class_loader_data(); 16.39 Method* newm_oop = Method::allocate(loader_data, 16.40 @@ -1097,6 +1102,7 @@ 16.41 localvariable_len, 16.42 exception_table_len, 16.43 checked_exceptions_len, 16.44 + method_parameters_len, 16.45 generic_signature_index, 16.46 m->method_type(), 16.47 CHECK_(methodHandle()));
17.1 --- a/src/share/vm/oops/method.hpp Tue Jan 08 13:38:11 2013 -0500 17.2 +++ b/src/share/vm/oops/method.hpp Tue Jan 08 13:44:10 2013 -0800 17.3 @@ -160,6 +160,7 @@ 17.4 int localvariable_table_length, 17.5 int exception_table_length, 17.6 int checked_exceptions_length, 17.7 + int method_parameters_length, 17.8 u2 generic_signature_index, 17.9 ConstMethod::MethodType method_type, 17.10 TRAPS); 17.11 @@ -480,6 +481,12 @@ 17.12 void print_codes_on(outputStream* st) const PRODUCT_RETURN; 17.13 void print_codes_on(int from, int to, outputStream* st) const PRODUCT_RETURN; 17.14 17.15 + // method parameters 17.16 + int method_parameters_length() const 17.17 + { return constMethod()->method_parameters_length(); } 17.18 + MethodParametersElement* method_parameters_start() const 17.19 + { return constMethod()->method_parameters_start(); } 17.20 + 17.21 // checked exceptions 17.22 int checked_exceptions_length() const 17.23 { return constMethod()->checked_exceptions_length(); }
18.1 --- a/src/share/vm/prims/jvm.cpp Tue Jan 08 13:38:11 2013 -0500 18.2 +++ b/src/share/vm/prims/jvm.cpp Tue Jan 08 13:44:10 2013 -0800 18.3 @@ -1515,7 +1515,7 @@ 18.4 JVM_END 18.5 18.6 18.7 -static Method* jvm_get_method_common(jobject method, TRAPS) { 18.8 +static Method* jvm_get_method_common(jobject method) { 18.9 // some of this code was adapted from from jni_FromReflectedMethod 18.10 18.11 oop reflected = JNIHandles::resolve_non_null(method); 18.12 @@ -1533,8 +1533,7 @@ 18.13 } 18.14 Klass* k = java_lang_Class::as_Klass(mirror); 18.15 18.16 - KlassHandle kh(THREAD, k); 18.17 - Method* m = InstanceKlass::cast(kh())->method_with_idnum(slot); 18.18 + Method* m = InstanceKlass::cast(k)->method_with_idnum(slot); 18.19 if (m == NULL) { 18.20 assert(false, "cannot find method"); 18.21 return NULL; // robustness 18.22 @@ -1548,7 +1547,7 @@ 18.23 JVMWrapper("JVM_GetMethodAnnotations"); 18.24 18.25 // method is a handle to a java.lang.reflect.Method object 18.26 - Method* m = jvm_get_method_common(method, CHECK_NULL); 18.27 + Method* m = jvm_get_method_common(method); 18.28 return (jbyteArray) JNIHandles::make_local(env, 18.29 Annotations::make_java_array(m->annotations(), THREAD)); 18.30 JVM_END 18.31 @@ -1558,7 +1557,7 @@ 18.32 JVMWrapper("JVM_GetMethodDefaultAnnotationValue"); 18.33 18.34 // method is a handle to a java.lang.reflect.Method object 18.35 - Method* m = jvm_get_method_common(method, CHECK_NULL); 18.36 + Method* m = jvm_get_method_common(method); 18.37 return (jbyteArray) JNIHandles::make_local(env, 18.38 Annotations::make_java_array(m->annotation_default(), THREAD)); 18.39 JVM_END 18.40 @@ -1568,7 +1567,7 @@ 18.41 JVMWrapper("JVM_GetMethodParameterAnnotations"); 18.42 18.43 // method is a handle to a java.lang.reflect.Method object 18.44 - Method* m = jvm_get_method_common(method, CHECK_NULL); 18.45 + Method* m = jvm_get_method_common(method); 18.46 return (jbyteArray) JNIHandles::make_local(env, 18.47 Annotations::make_java_array(m->parameter_annotations(), THREAD)); 18.48 JVM_END 18.49 @@ -1590,6 +1589,32 @@ 18.50 return NULL; 18.51 JVM_END 18.52 18.53 +JVM_ENTRY(jobjectArray, JVM_GetMethodParameters(JNIEnv *env, jobject method)) 18.54 +{ 18.55 + JVMWrapper("JVM_GetMethodParameters"); 18.56 + // method is a handle to a java.lang.reflect.Method object 18.57 + Method* method_ptr = jvm_get_method_common(method); 18.58 + methodHandle mh (THREAD, method_ptr); 18.59 + Handle reflected_method (THREAD, JNIHandles::resolve_non_null(method)); 18.60 + const int num_params = mh->method_parameters_length(); 18.61 + 18.62 + if(0 != num_params) { 18.63 + objArrayOop result_oop = oopFactory::new_objArray(SystemDictionary::reflect_Parameter_klass(), num_params, CHECK_NULL); 18.64 + objArrayHandle result (THREAD, result_oop); 18.65 + 18.66 + for(int i = 0; i < num_params; i++) { 18.67 + MethodParametersElement* params = mh->method_parameters_start(); 18.68 + Symbol* const sym = mh->constants()->symbol_at(params[i].name_cp_index); 18.69 + oop param = Reflection::new_parameter(reflected_method, i, sym, 18.70 + params[i].flags, CHECK_NULL); 18.71 + result->obj_at_put(i, param); 18.72 + } 18.73 + return (jobjectArray)JNIHandles::make_local(env, result()); 18.74 + } else { 18.75 + return (jobjectArray)NULL; 18.76 + } 18.77 +} 18.78 +JVM_END 18.79 18.80 // New (JDK 1.4) reflection implementation ///////////////////////////////////// 18.81
19.1 --- a/src/share/vm/prims/jvm.h Tue Jan 08 13:38:11 2013 -0500 19.2 +++ b/src/share/vm/prims/jvm.h Tue Jan 08 13:44:10 2013 -0800 19.3 @@ -86,6 +86,8 @@ 19.4 19.5 #define JVM_INTERFACE_VERSION 4 19.6 19.7 +JNIEXPORT jobjectArray JNICALL 19.8 +JVM_GetMethodParameters(JNIEnv *env, jobject method); 19.9 19.10 JNIEXPORT jint JNICALL 19.11 JVM_GetInterfaceVersion(void);
20.1 --- a/src/share/vm/runtime/reflection.cpp Tue Jan 08 13:38:11 2013 -0500 20.2 +++ b/src/share/vm/runtime/reflection.cpp Tue Jan 08 13:44:10 2013 -0800 20.3 @@ -860,6 +860,17 @@ 20.4 return rh(); 20.5 } 20.6 20.7 +oop Reflection::new_parameter(Handle method, int index, Symbol* sym, 20.8 + int flags, TRAPS) { 20.9 + Handle name = java_lang_String::create_from_symbol(sym, CHECK_NULL); 20.10 + Handle rh = java_lang_reflect_Parameter::create(CHECK_NULL); 20.11 + java_lang_reflect_Parameter::set_name(rh(), name()); 20.12 + java_lang_reflect_Parameter::set_modifiers(rh(), flags); 20.13 + java_lang_reflect_Parameter::set_executable(rh(), method()); 20.14 + java_lang_reflect_Parameter::set_index(rh(), index); 20.15 + return rh(); 20.16 +} 20.17 + 20.18 20.19 methodHandle Reflection::resolve_interface_call(instanceKlassHandle klass, methodHandle method, 20.20 KlassHandle recv_klass, Handle receiver, TRAPS) {
21.1 --- a/src/share/vm/runtime/reflection.hpp Tue Jan 08 13:38:11 2013 -0500 21.2 +++ b/src/share/vm/runtime/reflection.hpp Tue Jan 08 13:44:10 2013 -0800 21.3 @@ -118,6 +118,10 @@ 21.4 static oop new_constructor(methodHandle method, TRAPS); 21.5 // Create a java.lang.reflect.Field object based on a field descriptor 21.6 static oop new_field(fieldDescriptor* fd, bool intern_name, TRAPS); 21.7 + // Create a java.lang.reflect.Parameter object based on a 21.8 + // MethodParameterElement 21.9 + static oop new_parameter(Handle method, int index, Symbol* sym, 21.10 + int flags, TRAPS); 21.11 21.12 private: 21.13 // method resolution for invoke