aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvladidan <none@none>2011-12-22 12:01:46 -0500
committervladidan <none@none>2011-12-22 12:01:46 -0500
commit64aaf8da2ebae3789c3582fb128e98b2078fd181 (patch)
tree69a3518e2ebadd9c9e47b4ca82acfac84903287a
parent4fbde940cdefbacfea68b76628591597d2ed9fd3 (diff)
parentc36c1159a545c71f05d436d67e641ab2720b830b (diff)
Merge
-rw-r--r--src/cpu/x86/vm/assembler_x86.cpp4
-rw-r--r--src/os/bsd/vm/jvm_bsd.h6
-rw-r--r--src/os/bsd/vm/os_bsd.inline.hpp53
-rw-r--r--src/os/linux/vm/jvm_linux.h6
-rw-r--r--src/os/linux/vm/os_linux.inline.hpp56
-rw-r--r--src/os/solaris/vm/jvm_solaris.h3
-rw-r--r--src/os/solaris/vm/os_solaris.cpp78
-rw-r--r--src/os/solaris/vm/os_solaris.inline.hpp13
-rw-r--r--src/os/windows/vm/jvm_windows.h9
-rw-r--r--src/os/windows/vm/os_windows.cpp28
-rw-r--r--src/share/vm/prims/jvm.cpp36
-rw-r--r--src/share/vm/prims/jvmtiClassFileReconstituter.cpp59
-rw-r--r--src/share/vm/prims/jvmtiClassFileReconstituter.hpp1
-rw-r--r--src/share/vm/runtime/globals.cpp9
-rw-r--r--src/share/vm/runtime/globals.hpp2
-rw-r--r--src/share/vm/runtime/globals_ext.hpp8
-rw-r--r--src/share/vm/runtime/os.hpp31
-rw-r--r--src/share/vm/services/management.cpp1
-rw-r--r--src/share/vm/utilities/ostream.cpp2
19 files changed, 234 insertions, 171 deletions
diff --git a/src/cpu/x86/vm/assembler_x86.cpp b/src/cpu/x86/vm/assembler_x86.cpp
index 3c13a4823..a58455cbf 100644
--- a/src/cpu/x86/vm/assembler_x86.cpp
+++ b/src/cpu/x86/vm/assembler_x86.cpp
@@ -5968,7 +5968,9 @@ void MacroAssembler::call_VM_base(Register oop_result,
assert(number_of_arguments >= 0 , "cannot have negative number of arguments");
LP64_ONLY(assert(java_thread == r15_thread, "unexpected register"));
#ifdef ASSERT
- LP64_ONLY(if (UseCompressedOops) verify_heapbase("call_VM_base");)
+ // TraceBytecodes does not use r12 but saves it over the call, so don't verify
+ // r12 is the heapbase.
+ LP64_ONLY(if (UseCompressedOops && !TraceBytecodes) verify_heapbase("call_VM_base");)
#endif // ASSERT
assert(java_thread != oop_result , "cannot use the same register for java_thread & oop_result");
diff --git a/src/os/bsd/vm/jvm_bsd.h b/src/os/bsd/vm/jvm_bsd.h
index 5f964100c..472269dd5 100644
--- a/src/os/bsd/vm/jvm_bsd.h
+++ b/src/os/bsd/vm/jvm_bsd.h
@@ -33,7 +33,6 @@
// All local includes have been commented out.
*/
-
#ifndef JVM_MD_H
#define JVM_MD_H
@@ -59,6 +58,7 @@
#include <dirent.h> /* For DIR */
#include <sys/param.h> /* For MAXPATHLEN */
+#include <sys/socket.h> /* For socklen_t */
#include <unistd.h> /* For F_OK, R_OK, W_OK */
#define JNI_ONLOAD_SYMBOLS {"JNI_OnLoad"}
@@ -128,8 +128,4 @@
#endif
#endif /* JVM_MD_H */
-// Reconciliation History
-// jvm_solaris.h 1.6 99/06/22 16:38:47
-// End
-
#endif // OS_BSD_VM_JVM_BSD_H
diff --git a/src/os/bsd/vm/os_bsd.inline.hpp b/src/os/bsd/vm/os_bsd.inline.hpp
index 731a7e61e..c582a4531 100644
--- a/src/os/bsd/vm/os_bsd.inline.hpp
+++ b/src/os/bsd/vm/os_bsd.inline.hpp
@@ -198,15 +198,15 @@ inline int os::socket(int domain, int type, int protocol) {
return ::socket(domain, type, protocol);
}
-inline int os::recv(int fd, char *buf, int nBytes, int flags) {
- RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, (unsigned int) flags));
+inline int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+ RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
}
-inline int os::send(int fd, char *buf, int nBytes, int flags) {
- RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, (unsigned int) flags));
+inline int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+ RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
}
-inline int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+inline int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
return os::send(fd, buf, nBytes, flags);
}
@@ -246,57 +246,52 @@ inline int os::listen(int fd, int count) {
return ::listen(fd, count);
}
-inline int os::connect(int fd, struct sockaddr *him, int len) {
+inline int os::connect(int fd, struct sockaddr* him, socklen_t len) {
RESTARTABLE_RETURN_INT(::connect(fd, him, len));
}
-inline int os::accept(int fd, struct sockaddr *him, int *len) {
- // This cast is from int to unsigned int on bsd. Since we
- // only pass the parameter "len" around the vm and don't try to
- // fetch it's value, this cast is safe for now. The java.net group
- // may need and want to change this interface someday if socklen_t goes
- // to 64 bits on some platform that we support.
-
+inline int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
// At least OpenBSD and FreeBSD can return EINTR from accept.
- RESTARTABLE_RETURN_INT(::accept(fd, him, (socklen_t *)len));
+ RESTARTABLE_RETURN_INT(::accept(fd, him, len));
}
-inline int os::recvfrom(int fd, char *buf, int nBytes, int flags,
- sockaddr *from, int *fromlen) {
- RESTARTABLE_RETURN_INT(::recvfrom(fd, buf, nBytes, (unsigned int) flags, from, (socklen_t *)fromlen));
+inline int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+ sockaddr* from, socklen_t* fromlen) {
+ RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
}
-inline int os::sendto(int fd, char *buf, int len, int flags,
- struct sockaddr *to, int tolen) {
- RESTARTABLE_RETURN_INT(::sendto(fd, buf, len, (unsigned int) flags, to, tolen));
+inline int os::sendto(int fd, char* buf, size_t len, uint flags,
+ struct sockaddr *to, socklen_t tolen) {
+ RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
}
-inline int os::socket_shutdown(int fd, int howto){
+inline int os::socket_shutdown(int fd, int howto) {
return ::shutdown(fd, howto);
}
-inline int os::bind(int fd, struct sockaddr *him, int len){
+inline int os::bind(int fd, struct sockaddr* him, socklen_t len) {
return ::bind(fd, him, len);
}
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
- return ::getsockname(fd, him, (socklen_t *)len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
+ return ::getsockname(fd, him, len);
}
-inline int os::get_host_name(char* name, int namelen){
+inline int os::get_host_name(char* name, int namelen) {
return ::gethostname(name, namelen);
}
-inline struct hostent* os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
return ::gethostbyname(name);
}
+
inline int os::get_sock_opt(int fd, int level, int optname,
- char *optval, int* optlen){
- return ::getsockopt(fd, level, optname, optval, (socklen_t *)optlen);
+ char *optval, socklen_t* optlen) {
+ return ::getsockopt(fd, level, optname, optval, optlen);
}
inline int os::set_sock_opt(int fd, int level, int optname,
- const char *optval, int optlen){
+ const char* optval, socklen_t optlen) {
return ::setsockopt(fd, level, optname, optval, optlen);
}
#endif // OS_BSD_VM_OS_BSD_INLINE_HPP
diff --git a/src/os/linux/vm/jvm_linux.h b/src/os/linux/vm/jvm_linux.h
index 795fec113..dd5e38941 100644
--- a/src/os/linux/vm/jvm_linux.h
+++ b/src/os/linux/vm/jvm_linux.h
@@ -33,7 +33,6 @@
// All local includes have been commented out.
*/
-
#ifndef JVM_MD_H
#define JVM_MD_H
@@ -44,6 +43,7 @@
#include <dirent.h> /* For DIR */
#include <sys/param.h> /* For MAXPATHLEN */
+#include <sys/socket.h> /* For socklen_t */
#include <unistd.h> /* For F_OK, R_OK, W_OK */
#define JNI_ONLOAD_SYMBOLS {"JNI_OnLoad"}
@@ -95,8 +95,4 @@
#endif /* JVM_MD_H */
-// Reconciliation History
-// jvm_solaris.h 1.6 99/06/22 16:38:47
-// End
-
#endif // OS_LINUX_VM_JVM_LINUX_H
diff --git a/src/os/linux/vm/os_linux.inline.hpp b/src/os/linux/vm/os_linux.inline.hpp
index 0bddce86b..566c0ad31 100644
--- a/src/os/linux/vm/os_linux.inline.hpp
+++ b/src/os/linux/vm/os_linux.inline.hpp
@@ -202,15 +202,15 @@ inline int os::socket(int domain, int type, int protocol) {
return ::socket(domain, type, protocol);
}
-inline int os::recv(int fd, char *buf, int nBytes, int flags) {
- RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, (unsigned int) flags));
+inline int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+ RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
}
-inline int os::send(int fd, char *buf, int nBytes, int flags) {
- RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, (unsigned int) flags));
+inline int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+ RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
}
-inline int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+inline int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
return os::send(fd, buf, nBytes, flags);
}
@@ -250,57 +250,53 @@ inline int os::listen(int fd, int count) {
return ::listen(fd, count);
}
-inline int os::connect(int fd, struct sockaddr *him, int len) {
+inline int os::connect(int fd, struct sockaddr* him, socklen_t len) {
RESTARTABLE_RETURN_INT(::connect(fd, him, len));
}
-inline int os::accept(int fd, struct sockaddr *him, int *len) {
- // This cast is from int to unsigned int on linux. Since we
- // only pass the parameter "len" around the vm and don't try to
- // fetch it's value, this cast is safe for now. The java.net group
- // may need and want to change this interface someday if socklen_t goes
- // to 64 bits on some platform that we support.
- // Linux doc says this can't return EINTR, unlike accept() on Solaris
-
- return ::accept(fd, him, (socklen_t *)len);
+inline int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
+ // Linux doc says this can't return EINTR, unlike accept() on Solaris.
+ // But see attachListener_linux.cpp, LinuxAttachListener::dequeue().
+ return (int)::accept(fd, him, len);
}
-inline int os::recvfrom(int fd, char *buf, int nBytes, int flags,
- sockaddr *from, int *fromlen) {
- RESTARTABLE_RETURN_INT(::recvfrom(fd, buf, nBytes, (unsigned int) flags, from, (socklen_t *)fromlen));
+inline int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+ sockaddr* from, socklen_t* fromlen) {
+ RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
}
-inline int os::sendto(int fd, char *buf, int len, int flags,
- struct sockaddr *to, int tolen) {
- RESTARTABLE_RETURN_INT(::sendto(fd, buf, len, (unsigned int) flags, to, tolen));
+inline int os::sendto(int fd, char* buf, size_t len, uint flags,
+ struct sockaddr* to, socklen_t tolen) {
+ RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
}
-inline int os::socket_shutdown(int fd, int howto){
+inline int os::socket_shutdown(int fd, int howto) {
return ::shutdown(fd, howto);
}
-inline int os::bind(int fd, struct sockaddr *him, int len){
+inline int os::bind(int fd, struct sockaddr* him, socklen_t len) {
return ::bind(fd, him, len);
}
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
- return ::getsockname(fd, him, (socklen_t *)len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
+ return ::getsockname(fd, him, len);
}
-inline int os::get_host_name(char* name, int namelen){
+inline int os::get_host_name(char* name, int namelen) {
return ::gethostname(name, namelen);
}
-inline struct hostent* os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
return ::gethostbyname(name);
}
+
inline int os::get_sock_opt(int fd, int level, int optname,
- char *optval, int* optlen){
- return ::getsockopt(fd, level, optname, optval, (socklen_t *)optlen);
+ char* optval, socklen_t* optlen) {
+ return ::getsockopt(fd, level, optname, optval, optlen);
}
inline int os::set_sock_opt(int fd, int level, int optname,
- const char *optval, int optlen){
+ const char* optval, socklen_t optlen) {
return ::setsockopt(fd, level, optname, optval, optlen);
}
#endif // OS_LINUX_VM_OS_LINUX_INLINE_HPP
diff --git a/src/os/solaris/vm/jvm_solaris.h b/src/os/solaris/vm/jvm_solaris.h
index 1513c16e8..57b32ac16 100644
--- a/src/os/solaris/vm/jvm_solaris.h
+++ b/src/os/solaris/vm/jvm_solaris.h
@@ -33,7 +33,6 @@
// All local includes have been commented out.
*/
-
#ifndef JVM_MD_H
#define JVM_MD_H
@@ -44,6 +43,7 @@
#include <dirent.h> /* For DIR */
#include <sys/param.h> /* For MAXPATHLEN */
+#include <sys/socket.h> /* For socklen_t */
#include <unistd.h> /* For F_OK, R_OK, W_OK */
#include <sys/int_types.h> /* for intptr_t types (64 Bit cleanliness) */
@@ -82,7 +82,6 @@
#define JVM_O_EXCL O_EXCL
#define JVM_O_CREAT O_CREAT
-
/* Signal definitions */
#define BREAK_SIGNAL SIGQUIT /* Thread dumping support. */
diff --git a/src/os/solaris/vm/os_solaris.cpp b/src/os/solaris/vm/os_solaris.cpp
index 2a0f03eda..f4043e195 100644
--- a/src/os/solaris/vm/os_solaris.cpp
+++ b/src/os/solaris/vm/os_solaris.cpp
@@ -6359,17 +6359,16 @@ int os::socket_close(int fd) {
RESTARTABLE_RETURN_INT(::close(fd));
}
-int os::recv(int fd, char *buf, int nBytes, int flags) {
- INTERRUPTIBLE_RETURN_INT(::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
+ INTERRUPTIBLE_RETURN_INT((int)::recv(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
}
-
-int os::send(int fd, char *buf, int nBytes, int flags) {
- INTERRUPTIBLE_RETURN_INT(::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
+int os::send(int fd, char* buf, size_t nBytes, uint flags) {
+ INTERRUPTIBLE_RETURN_INT((int)::send(fd, buf, nBytes, flags), os::Solaris::clear_interrupted);
}
-int os::raw_send(int fd, char *buf, int nBytes, int flags) {
- RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
+int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
+ RESTARTABLE_RETURN_INT((int)::send(fd, buf, nBytes, flags));
}
// As both poll and select can be interrupted by signals, we have to be
@@ -6404,19 +6403,19 @@ int os::timeout(int fd, long timeout) {
}
}
-int os::connect(int fd, struct sockaddr *him, int len) {
+int os::connect(int fd, struct sockaddr *him, socklen_t len) {
int _result;
- INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,
+ INTERRUPTIBLE_NORESTART(::connect(fd, him, len), _result,\
os::Solaris::clear_interrupted);
// Depending on when thread interruption is reset, _result could be
// one of two values when errno == EINTR
if (((_result == OS_INTRPT) || (_result == OS_ERR))
- && (errno == EINTR)) {
+ && (errno == EINTR)) {
/* restarting a connect() changes its errno semantics */
- INTERRUPTIBLE(::connect(fd, him, len), _result,
- os::Solaris::clear_interrupted);
+ INTERRUPTIBLE(::connect(fd, him, len), _result,\
+ os::Solaris::clear_interrupted);
/* undo these changes */
if (_result == OS_ERR) {
if (errno == EALREADY) {
@@ -6430,43 +6429,38 @@ int os::connect(int fd, struct sockaddr *him, int len) {
return _result;
}
-int os::accept(int fd, struct sockaddr *him, int *len) {
- if (fd < 0)
- return OS_ERR;
- INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him,\
- (socklen_t*) len), os::Solaris::clear_interrupted);
- }
+int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
+ if (fd < 0) {
+ return OS_ERR;
+ }
+ INTERRUPTIBLE_RETURN_INT((int)::accept(fd, him, len),\
+ os::Solaris::clear_interrupted);
+}
-int os::recvfrom(int fd, char *buf, int nBytes, int flags,
- sockaddr *from, int *fromlen) {
- //%%note jvm_r11
- INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes,\
- flags, from, fromlen), os::Solaris::clear_interrupted);
+int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
+ sockaddr* from, socklen_t* fromlen) {
+ INTERRUPTIBLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen),\
+ os::Solaris::clear_interrupted);
}
-int os::sendto(int fd, char *buf, int len, int flags,
- struct sockaddr *to, int tolen) {
- //%%note jvm_r11
- INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags,\
- to, tolen), os::Solaris::clear_interrupted);
+int os::sendto(int fd, char* buf, size_t len, uint flags,
+ struct sockaddr* to, socklen_t tolen) {
+ INTERRUPTIBLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen),\
+ os::Solaris::clear_interrupted);
}
int os::socket_available(int fd, jint *pbytes) {
- if (fd < 0)
- return OS_OK;
-
- int ret;
-
- RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret);
-
- //%% note ioctl can return 0 when successful, JVM_SocketAvailable
- // is expected to return 0 on failure and 1 on success to the jdk.
-
- return (ret == OS_ERR) ? 0 : 1;
+ if (fd < 0) {
+ return OS_OK;
+ }
+ int ret;
+ RESTARTABLE(::ioctl(fd, FIONREAD, pbytes), ret);
+ // note: ioctl can return 0 when successful, JVM_SocketAvailable
+ // is expected to return 0 on failure and 1 on success to the jdk.
+ return (ret == OS_ERR) ? 0 : 1;
}
-
-int os::bind(int fd, struct sockaddr *him, int len) {
+int os::bind(int fd, struct sockaddr* him, socklen_t len) {
INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\
- os::Solaris::clear_interrupted);
+ os::Solaris::clear_interrupted);
}
diff --git a/src/os/solaris/vm/os_solaris.inline.hpp b/src/os/solaris/vm/os_solaris.inline.hpp
index b1e42a52d..7b63badc4 100644
--- a/src/os/solaris/vm/os_solaris.inline.hpp
+++ b/src/os/solaris/vm/os_solaris.inline.hpp
@@ -243,24 +243,25 @@ inline int os::socket_shutdown(int fd, int howto){
return ::shutdown(fd, howto);
}
-inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){
- return ::getsockname(fd, him, (socklen_t*) len);
+inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len){
+ return ::getsockname(fd, him, len);
}
inline int os::get_host_name(char* name, int namelen){
return ::gethostname(name, namelen);
}
-inline struct hostent* os::get_host_by_name(char* name) {
+inline struct hostent* os::get_host_by_name(char* name) {
return ::gethostbyname(name);
}
+
inline int os::get_sock_opt(int fd, int level, int optname,
- char *optval, int* optlen){
- return ::getsockopt(fd, level, optname, optval, (socklen_t*) optlen);
+ char* optval, socklen_t* optlen) {
+ return ::getsockopt(fd, level, optname, optval, optlen);
}
inline int os::set_sock_opt(int fd, int level, int optname,
- const char *optval, int optlen){
+ const char *optval, socklen_t optlen) {
return ::setsockopt(fd, level, optname, optval, optlen);
}
#endif // OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
diff --git a/src/os/windows/vm/jvm_windows.h b/src/os/windows/vm/jvm_windows.h
index dda8f8b1a..a45f86c2e 100644
--- a/src/os/windows/vm/jvm_windows.h
+++ b/src/os/windows/vm/jvm_windows.h
@@ -22,6 +22,9 @@
*
*/
+#ifndef OS_WINDOWS_VM_JVM_WINDOWS_H
+#define OS_WINDOWS_VM_JVM_WINDOWS_H
+
#ifndef _JAVASOFT_JVM_MD_H_
#define _JAVASOFT_JVM_MD_H_
@@ -54,10 +57,10 @@ typedef struct _MODULEINFO {
#include <Psapi.h>
#endif
-
-
#include <Tlhelp32.h>
+typedef unsigned int socklen_t;
+
// #include "jni.h"
#define JNI_ONLOAD_SYMBOLS {"_JNI_OnLoad@8", "JNI_OnLoad"}
@@ -129,3 +132,5 @@ JVM_GetThreadInterruptEvent();
#define SHUTDOWN2_SIGNAL SIGTERM
#endif /* !_JAVASOFT_JVM_MD_H_ */
+
+#endif // OS_WINDOWS_VM_JVM_WINDOWS_H
diff --git a/src/os/windows/vm/os_windows.cpp b/src/os/windows/vm/os_windows.cpp
index 9fe70bdb0..01ccc179e 100644
--- a/src/os/windows/vm/os_windows.cpp
+++ b/src/os/windows/vm/os_windows.cpp
@@ -4849,7 +4849,7 @@ static void initSock() {
::mutexUnlock(&sockFnTableMutex);
}
-struct hostent* os::get_host_by_name(char* name) {
+struct hostent* os::get_host_by_name(char* name) {
if (!sock_initialized) {
initSock();
}
@@ -4880,39 +4880,39 @@ int os::listen(int fd, int count) {
return 0;
}
-int os::connect(int fd, struct sockaddr *him, int len) {
+int os::connect(int fd, struct sockaddr* him, socklen_t len) {
ShouldNotReachHere();
return 0;
}
-int os::accept(int fd, struct sockaddr *him, int *len) {
+int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
ShouldNotReachHere();
return 0;
}
-int os::sendto(int fd, char *buf, int len, int flags,
- struct sockaddr *to, int tolen) {
+int os::sendto(int fd, char* buf, size_t len, uint flags,
+ struct sockaddr* to, socklen_t tolen) {
ShouldNotReachHere();
return 0;
}
-int os::recvfrom(int fd, char *buf, int nBytes, int flags,
- sockaddr *from, int *fromlen) {
+int os::recvfrom(int fd, char *buf, size_t nBytes, uint flags,
+ sockaddr* from, socklen_t* fromlen) {
ShouldNotReachHere();
return 0;
}
-int os::recv(int fd, char *buf, int nBytes, int flags) {
+int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
ShouldNotReachHere();
return 0;
}
-int os::send(int fd, char *buf, int nBytes, int flags) {
+int os::send(int fd, char* buf, size_t nBytes, uint flags) {
ShouldNotReachHere();
return 0;
}
-int os::raw_send(int fd, char *buf, int nBytes, int flags) {
+int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
ShouldNotReachHere();
return 0;
}
@@ -4932,24 +4932,24 @@ int os::socket_shutdown(int fd, int howto) {
return 0;
}
-int os::bind(int fd, struct sockaddr *him, int len) {
+int os::bind(int fd, struct sockaddr* him, socklen_t len) {
ShouldNotReachHere();
return 0;
}
-int os::get_sock_name(int fd, struct sockaddr *him, int *len) {
+int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
ShouldNotReachHere();
return 0;
}
int os::get_sock_opt(int fd, int level, int optname,
- char *optval, int* optlen) {
+ char* optval, socklen_t* optlen) {
ShouldNotReachHere();
return 0;
}
int os::set_sock_opt(int fd, int level, int optname,
- const char *optval, int optlen) {
+ const char* optval, socklen_t optlen) {
ShouldNotReachHere();
return 0;
}
diff --git a/src/share/vm/prims/jvm.cpp b/src/share/vm/prims/jvm.cpp
index fedd18feb..fe51d11e6 100644
--- a/src/share/vm/prims/jvm.cpp
+++ b/src/share/vm/prims/jvm.cpp
@@ -3515,14 +3515,14 @@ JVM_END
JVM_LEAF(jint, JVM_Recv(jint fd, char *buf, jint nBytes, jint flags))
JVMWrapper2("JVM_Recv (0x%x)", fd);
//%note jvm_r6
- return os::recv(fd, buf, nBytes, flags);
+ return os::recv(fd, buf, (size_t)nBytes, (uint)flags);
JVM_END
JVM_LEAF(jint, JVM_Send(jint fd, char *buf, jint nBytes, jint flags))
JVMWrapper2("JVM_Send (0x%x)", fd);
//%note jvm_r6
- return os::send(fd, buf, nBytes, flags);
+ return os::send(fd, buf, (size_t)nBytes, (uint)flags);
JVM_END
@@ -3543,42 +3543,51 @@ JVM_END
JVM_LEAF(jint, JVM_Connect(jint fd, struct sockaddr *him, jint len))
JVMWrapper2("JVM_Connect (0x%x)", fd);
//%note jvm_r6
- return os::connect(fd, him, len);
+ return os::connect(fd, him, (socklen_t)len);
JVM_END
JVM_LEAF(jint, JVM_Bind(jint fd, struct sockaddr *him, jint len))
JVMWrapper2("JVM_Bind (0x%x)", fd);
//%note jvm_r6
- return os::bind(fd, him, len);
+ return os::bind(fd, him, (socklen_t)len);
JVM_END
JVM_LEAF(jint, JVM_Accept(jint fd, struct sockaddr *him, jint *len))
JVMWrapper2("JVM_Accept (0x%x)", fd);
//%note jvm_r6
- return os::accept(fd, him, (int *)len);
+ socklen_t socklen = (socklen_t)(*len);
+ jint result = os::accept(fd, him, &socklen);
+ *len = (jint)socklen;
+ return result;
JVM_END
JVM_LEAF(jint, JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen))
JVMWrapper2("JVM_RecvFrom (0x%x)", fd);
//%note jvm_r6
- return os::recvfrom(fd, buf, nBytes, flags, from, fromlen);
+ socklen_t socklen = (socklen_t)(*fromlen);
+ jint result = os::recvfrom(fd, buf, (size_t)nBytes, (uint)flags, from, &socklen);
+ *fromlen = (int)socklen;
+ return result;
JVM_END
JVM_LEAF(jint, JVM_GetSockName(jint fd, struct sockaddr *him, int *len))
JVMWrapper2("JVM_GetSockName (0x%x)", fd);
//%note jvm_r6
- return os::get_sock_name(fd, him, len);
+ socklen_t socklen = (socklen_t)(*len);
+ jint result = os::get_sock_name(fd, him, &socklen);
+ *len = (int)socklen;
+ return result;
JVM_END
JVM_LEAF(jint, JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen))
JVMWrapper2("JVM_SendTo (0x%x)", fd);
//%note jvm_r6
- return os::sendto(fd, buf, len, flags, to, tolen);
+ return os::sendto(fd, buf, (size_t)len, (uint)flags, to, (socklen_t)tolen);
JVM_END
@@ -3592,21 +3601,26 @@ JVM_END
JVM_LEAF(jint, JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen))
JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
//%note jvm_r6
- return os::get_sock_opt(fd, level, optname, optval, optlen);
+ socklen_t socklen = (socklen_t)(*optlen);
+ jint result = os::get_sock_opt(fd, level, optname, optval, &socklen);
+ *optlen = (int)socklen;
+ return result;
JVM_END
JVM_LEAF(jint, JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen))
JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
//%note jvm_r6
- return os::set_sock_opt(fd, level, optname, optval, optlen);
+ return os::set_sock_opt(fd, level, optname, optval, (socklen_t)optlen);
JVM_END
+
JVM_LEAF(int, JVM_GetHostName(char* name, int namelen))
JVMWrapper("JVM_GetHostName");
return os::get_host_name(name, namelen);
JVM_END
+
// Library support ///////////////////////////////////////////////////////////////////////////
JVM_ENTRY_NO_ENV(void*, JVM_LoadLibrary(const char* name))
@@ -3647,6 +3661,7 @@ JVM_LEAF(void*, JVM_FindLibraryEntry(void* handle, const char* name))
return os::dll_lookup(handle, name);
JVM_END
+
// Floating point support ////////////////////////////////////////////////////////////////////
JVM_LEAF(jboolean, JVM_IsNaN(jdouble a))
@@ -3655,7 +3670,6 @@ JVM_LEAF(jboolean, JVM_IsNaN(jdouble a))
JVM_END
-
// JNI version ///////////////////////////////////////////////////////////////////////////////
JVM_LEAF(jboolean, JVM_IsSupportedJNIVersion(jint version))
diff --git a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
index 35ae70720..7e2a327ec 100644
--- a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
+++ b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp
@@ -43,7 +43,7 @@
#ifdef TARGET_ARCH_ppc
# include "bytes_ppc.hpp"
#endif
-// FIXME: add Deprecated, LVT, LVTT attributes
+// FIXME: add Deprecated, LVTT attributes
// FIXME: fix Synthetic attribute
// FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes()
@@ -136,8 +136,9 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) {
constMethodHandle const_method(thread(), method->constMethod());
u2 line_num_cnt = 0;
int stackmap_len = 0;
+ int local_variable_table_length = 0;
- // compute number and length of attributes -- FIXME: for now no LVT
+ // compute number and length of attributes
int attr_count = 0;
int attr_size = 0;
if (const_method->has_linenumber_table()) {
@@ -170,6 +171,25 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) {
attr_size += 2 + 4 + stackmap_len;
}
}
+ if (method->has_localvariable_table()) {
+ local_variable_table_length = method->localvariable_table_length();
+ ++attr_count;
+ if (local_variable_table_length != 0) {
+ // Compute the size of the local variable table attribute (VM stores raw):
+ // LocalVariableTable_attribute {
+ // u2 attribute_name_index;
+ // u4 attribute_length;
+ // u2 local_variable_table_length;
+ // {
+ // u2 start_pc;
+ // u2 length;
+ // u2 name_index;
+ // u2 descriptor_index;
+ // u2 index;
+ // }
+ attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2);
+ }
+ }
typeArrayHandle exception_table(thread(), const_method->exception_table());
int exception_table_length = exception_table->length();
@@ -203,8 +223,9 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) {
if (stackmap_len != 0) {
write_stackmap_table_attribute(method, stackmap_len);
}
-
- // FIXME: write LVT attribute
+ if (local_variable_table_length != 0) {
+ write_local_variable_table_attribute(method, local_variable_table_length);
+ }
}
// Write Exceptions attribute
@@ -371,6 +392,36 @@ void JvmtiClassFileReconstituter::write_line_number_table_attribute(methodHandle
}
}
+// Write LineNumberTable attribute
+// JVMSpec| LocalVariableTable_attribute {
+// JVMSpec| u2 attribute_name_index;
+// JVMSpec| u4 attribute_length;
+// JVMSpec| u2 local_variable_table_length;
+// JVMSpec| { u2 start_pc;
+// JVMSpec| u2 length;
+// JVMSpec| u2 name_index;
+// JVMSpec| u2 descriptor_index;
+// JVMSpec| u2 index;
+// JVMSpec| } local_variable_table[local_variable_table_length];
+// JVMSpec| }
+void JvmtiClassFileReconstituter::write_local_variable_table_attribute(methodHandle method, u2 num_entries) {
+ write_attribute_name_index("LocalVariableTable");
+ write_u4(2 + num_entries * (2 + 2 + 2 + 2 + 2));
+ write_u2(num_entries);
+
+ assert(method->localvariable_table_length() == num_entries, "just checking");
+
+ LocalVariableTableElement *elem = method->localvariable_table_start();
+ for (int j=0; j<method->localvariable_table_length(); j++) {
+ write_u2(elem->start_bci);
+ write_u2(elem->length);
+ write_u2(elem->name_cp_index);
+ write_u2(elem->descriptor_cp_index);
+ write_u2(elem->slot);
+ elem++;
+ }
+}
+
// Write stack map table attribute
// JSR-202| StackMapTable_attribute {
// JSR-202| u2 attribute_name_index;
diff --git a/src/share/vm/prims/jvmtiClassFileReconstituter.hpp b/src/share/vm/prims/jvmtiClassFileReconstituter.hpp
index 60a5ffb09..565c6fe84 100644
--- a/src/share/vm/prims/jvmtiClassFileReconstituter.hpp
+++ b/src/share/vm/prims/jvmtiClassFileReconstituter.hpp
@@ -119,6 +119,7 @@ class JvmtiClassFileReconstituter : public JvmtiConstantPoolReconstituter {
void write_source_debug_extension_attribute();
u2 line_number_table_entries(methodHandle method);
void write_line_number_table_attribute(methodHandle method, u2 num_entries);
+ void write_local_variable_table_attribute(methodHandle method, u2 num_entries);
void write_stackmap_table_attribute(methodHandle method, int stackmap_table_len);
u2 inner_classes_attribute_length();
void write_inner_classes_attribute(int length);
diff --git a/src/share/vm/runtime/globals.cpp b/src/share/vm/runtime/globals.cpp
index 028b0958d..12efebcfc 100644
--- a/src/share/vm/runtime/globals.cpp
+++ b/src/share/vm/runtime/globals.cpp
@@ -82,16 +82,19 @@ bool Flag::is_unlocked() const {
}
bool Flag::is_writeable() const {
- return (strcmp(kind, "{manageable}") == 0 || strcmp(kind, "{product rw}") == 0);
+ return strcmp(kind, "{manageable}") == 0 ||
+ strcmp(kind, "{product rw}") == 0 ||
+ is_writeable_ext();
}
-// All flags except "manageable" are assumed internal flags.
+// All flags except "manageable" are assumed to be internal flags.
// Long term, we need to define a mechanism to specify which flags
// are external/stable and change this function accordingly.
bool Flag::is_external() const {
- return (strcmp(kind, "{manageable}") == 0);
+ return strcmp(kind, "{manageable}") == 0 || is_external_ext();
}
+
// Length of format string (e.g. "%.1234s") for printing ccstr below
#define FORMAT_BUFFER_LEN 16
diff --git a/src/share/vm/runtime/globals.hpp b/src/share/vm/runtime/globals.hpp
index 519152558..e583295ed 100644
--- a/src/share/vm/runtime/globals.hpp
+++ b/src/share/vm/runtime/globals.hpp
@@ -245,6 +245,8 @@ struct Flag {
bool is_unlocker_ext() const;
bool is_unlocked_ext() const;
+ bool is_writeable_ext() const;
+ bool is_external_ext() const;
void print_on(outputStream* st, bool withComments = false );
void print_as_flag(outputStream* st);
diff --git a/src/share/vm/runtime/globals_ext.hpp b/src/share/vm/runtime/globals_ext.hpp
index a0f94bc7d..15191df60 100644
--- a/src/share/vm/runtime/globals_ext.hpp
+++ b/src/share/vm/runtime/globals_ext.hpp
@@ -53,4 +53,12 @@ inline bool Flag::is_unlocked_ext() const {
return true;
}
+inline bool Flag::is_writeable_ext() const {
+ return false;
+}
+
+inline bool Flag::is_external_ext() const {
+ return false;
+}
+
#endif // SHARE_VM_RUNTIME_GLOBALS_EXT_HPP
diff --git a/src/share/vm/runtime/os.hpp b/src/share/vm/runtime/os.hpp
index 80d29f785..0ea0ae93f 100644
--- a/src/share/vm/runtime/os.hpp
+++ b/src/share/vm/runtime/os.hpp
@@ -584,28 +584,28 @@ class os: AllStatic {
static int socket(int domain, int type, int protocol);
static int socket_close(int fd);
static int socket_shutdown(int fd, int howto);
- static int recv(int fd, char *buf, int nBytes, int flags);
- static int send(int fd, char *buf, int nBytes, int flags);
- static int raw_send(int fd, char *buf, int nBytes, int flags);
+ static int recv(int fd, char* buf, size_t nBytes, uint flags);
+ static int send(int fd, char* buf, size_t nBytes, uint flags);
+ static int raw_send(int fd, char* buf, size_t nBytes, uint flags);
static int timeout(int fd, long timeout);
static int listen(int fd, int count);
- static int connect(int fd, struct sockaddr *him, int len);
- static int bind(int fd, struct sockaddr *him, int len);
- static int accept(int fd, struct sockaddr *him, int *len);
- static int recvfrom(int fd, char *buf, int nbytes, int flags,
- struct sockaddr *from, int *fromlen);
- static int get_sock_name(int fd, struct sockaddr *him, int *len);
- static int sendto(int fd, char *buf, int len, int flags,
- struct sockaddr *to, int tolen);
- static int socket_available(int fd, jint *pbytes);
+ static int connect(int fd, struct sockaddr* him, socklen_t len);
+ static int bind(int fd, struct sockaddr* him, socklen_t len);
+ static int accept(int fd, struct sockaddr* him, socklen_t* len);
+ static int recvfrom(int fd, char* buf, size_t nbytes, uint flags,
+ struct sockaddr* from, socklen_t* fromlen);
+ static int get_sock_name(int fd, struct sockaddr* him, socklen_t* len);
+ static int sendto(int fd, char* buf, size_t len, uint flags,
+ struct sockaddr* to, socklen_t tolen);
+ static int socket_available(int fd, jint* pbytes);
static int get_sock_opt(int fd, int level, int optname,
- char *optval, int* optlen);
+ char* optval, socklen_t* optlen);
static int set_sock_opt(int fd, int level, int optname,
- const char *optval, int optlen);
+ const char* optval, socklen_t optlen);
static int get_host_name(char* name, int namelen);
- static struct hostent* get_host_by_name(char* name);
+ static struct hostent* get_host_by_name(char* name);
// Printing 64 bit integers
static const char* jlong_format_specifier();
@@ -715,7 +715,6 @@ class os: AllStatic {
# include "os_bsd_zero.hpp"
#endif
-
// debugging support (mostly used by debug.cpp but also fatal error handler)
static bool find(address pc, outputStream* st = tty); // OS specific function to make sense out of an address
diff --git a/src/share/vm/services/management.cpp b/src/share/vm/services/management.cpp
index 1ef1cf1d0..217836c4f 100644
--- a/src/share/vm/services/management.cpp
+++ b/src/share/vm/services/management.cpp
@@ -33,6 +33,7 @@
#include "oops/objArrayKlass.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/arguments.hpp"
+#include "runtime/globals.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/interfaceSupport.hpp"
#include "runtime/javaCalls.hpp"
diff --git a/src/share/vm/utilities/ostream.cpp b/src/share/vm/utilities/ostream.cpp
index 60660002e..2dc63d044 100644
--- a/src/share/vm/utilities/ostream.cpp
+++ b/src/share/vm/utilities/ostream.cpp
@@ -1021,7 +1021,7 @@ int networkStream::read(char *buf, size_t len) {
void networkStream::flush() {
if (size() != 0) {
- int result = os::raw_send(_socket, (char *)base(), (int)size(), 0);
+ int result = os::raw_send(_socket, (char *)base(), size(), 0);
assert(result != -1, "connection error");
assert(result == (int)size(), "didn't send enough data");
}