changeset 3549:25765a764212

Add support for polling mark in code installer
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Fri, 19 Aug 2011 17:28:37 +0200
parents a218993d2087
children aee1479c0a4b 7d9e3ee49ac9
files src/share/vm/graal/graalCodeInstaller.cpp src/share/vm/graal/graalCodeInstaller.hpp src/share/vm/graal/graalVMEntries.cpp
diffstat 3 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/graal/graalCodeInstaller.cpp	Wed Aug 17 13:40:36 2011 +0200
+++ b/src/share/vm/graal/graalCodeInstaller.cpp	Fri Aug 19 17:28:37 2011 +0200
@@ -804,6 +804,12 @@
       case MARK_IMPLICIT_NULL:
         _implicit_exception_table.append(pc_offset, pc_offset);
         break;
+      case MARK_POLL:
+        _instructions->relocate(instruction, relocInfo::poll_type);
+        break;
+      case MARK_POLL_RETURN:
+        _instructions->relocate(instruction, relocInfo::poll_return_type);
+        break;
       case MARK_KLASS_PATCHING:
       case MARK_ACCESS_FIELD_PATCHING: {
         unsigned char* byte_count = (unsigned char*) (instruction - 1);
--- a/src/share/vm/graal/graalCodeInstaller.hpp	Wed Aug 17 13:40:36 2011 +0200
+++ b/src/share/vm/graal/graalCodeInstaller.hpp	Fri Aug 19 17:28:37 2011 +0200
@@ -41,6 +41,8 @@
     MARK_INVOKESPECIAL              = 0x2003,
     MARK_INVOKEVIRTUAL              = 0x2004,
     MARK_IMPLICIT_NULL              = 0x3000,
+    MARK_POLL                       = 0x3001,
+    MARK_POLL_RETURN                = 0x3002,
     MARK_KLASS_PATCHING             = 0x4000,
     MARK_DUMMY_OOP_RELOCATION       = 0x4001,
     MARK_ACCESS_FIELD_PATCHING      = 0x4002
--- a/src/share/vm/graal/graalVMEntries.cpp	Wed Aug 17 13:40:36 2011 +0200
+++ b/src/share/vm/graal/graalVMEntries.cpp	Fri Aug 19 17:28:37 2011 +0200
@@ -819,6 +819,7 @@
   set_long(env, config, "fastMonitorEnterStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_monitorenter_id)));
   set_long(env, config, "fastMonitorExitStub", VmIds::addStub(Runtime1::entry_for(Runtime1::graal_monitorexit_id)));
   set_long(env, config, "safepointPollingAddress", (jlong)(os::get_polling_page() + (SafepointPollOffset % os::vm_page_size())));
+  set_boolean(env, config, "isPollingPageFar", Assembler::is_polling_page_far());
 
   BarrierSet* bs = Universe::heap()->barrier_set();
   switch (bs->kind()) {