# HG changeset patch # User cjplummer # Date 1433536809 25200 # Node ID dc17890f352dd635a06dee7b2d67daac5128f6df # Parent a7c714b6cfb3db4fc54631ea1c63abf55faa5a16 8054386: Allow Java debugging when CDS is enabled Summary: Map archive RW when debugging is enabled Reviewed-by: sspitsyn, iklam, mseledtsov, dholmes diff -r a7c714b6cfb3 -r dc17890f352d hotspot/src/share/vm/memory/filemap.cpp --- a/hotspot/src/share/vm/memory/filemap.cpp Fri Jun 05 10:27:41 2015 +0200 +++ b/hotspot/src/share/vm/memory/filemap.cpp Fri Jun 05 13:40:09 2015 -0700 @@ -32,6 +32,7 @@ #include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "oops/objArrayOop.hpp" +#include "prims/jvmtiExport.hpp" #include "runtime/arguments.hpp" #include "runtime/java.hpp" #include "runtime/os.hpp" @@ -568,10 +569,19 @@ size_t alignment = os::vm_allocation_granularity(); size_t size = align_size_up(used, alignment); char *requested_addr = si->_base; + bool read_only; + + // If a tool agent is in use (debugging enabled), we must map the address space RW + if (JvmtiExport::can_modify_any_class() || JvmtiExport::can_walk_any_space()) { + read_only = false; + } else { + read_only = si->_read_only; + } + // map the contents of the CDS archive in this memory char *base = os::map_memory(_fd, _full_path, si->_file_offset, - requested_addr, size, si->_read_only, + requested_addr, size, read_only, si->_allow_exec); if (base == NULL || base != si->_base) { fail_continue("Unable to map %s shared space at required address.", shared_region_name[i]); @@ -637,11 +647,6 @@ bool FileMapInfo::initialize() { assert(UseSharedSpaces, "UseSharedSpaces expected."); - if (JvmtiExport::can_modify_any_class() || JvmtiExport::can_walk_any_space()) { - fail_continue("Tool agent requires sharing to be disabled."); - return false; - } - if (!open_for_read()) { return false; }