< prev index next >

src/hotspot/share/prims/privilegedStack.cpp

Print this page




  30 #include "oops/valueKlass.hpp"
  31 #include "prims/privilegedStack.hpp"
  32 #include "runtime/thread.inline.hpp"
  33 #include "runtime/vframe.inline.hpp"
  34 
  35 void PrivilegedElement::initialize(vframeStream* vfst, oop context, PrivilegedElement* next, TRAPS) {
  36   Method* method        = vfst->method();
  37   _klass                = method->method_holder();
  38   _privileged_context   = context;
  39 #ifdef CHECK_UNHANDLED_OOPS
  40   THREAD->allow_unhandled_oop(&_privileged_context);
  41 #endif // CHECK_UNHANDLED_OOPS
  42   _frame_id             = vfst->frame_id();
  43   _next                 = next;
  44   assert(oopDesc::is_oop_or_null(_privileged_context), "must be an oop");
  45   assert(oopDesc::is_oop_or_null(protection_domain()), "must be an oop");
  46 }
  47 
  48 void PrivilegedElement::oops_do(OopClosure* f) {
  49   PrivilegedElement *cur = this;
  50   BufferedValuesDealiaser* dealiaser = NULL;
  51   do {
  52     if (!VTBuffer::is_in_vt_buffer(cur->_privileged_context)) {
  53       f->do_oop((oop*) &cur->_privileged_context);
  54     } else {
  55       if (dealiaser == NULL) {
  56         dealiaser = Thread::current()->buffered_values_dealiaser();
  57       }
  58       oop value = *(oop*) &cur->_privileged_context;
  59       assert(value->is_value(), "Sanity check");
  60       dealiaser->oops_do(f, value);
  61     }
  62     cur = cur->_next;
  63   } while(cur != NULL);
  64 }
  65 
  66 //-------------------------------------------------------------------------------
  67 #ifndef PRODUCT
  68 
  69 void PrivilegedElement::print_on(outputStream* st) const {
  70   st->print("   " PTR_FORMAT " ", p2i(_frame_id));
  71   _klass->print_value_on(st);
  72   if (protection_domain() != NULL) {
  73     st->print("   ");
  74     protection_domain()->print_value_on(st);
  75   }
  76   st->cr();
  77 }
  78 
  79 bool PrivilegedElement::contains(address addr) {
  80   PrivilegedElement *e = (PrivilegedElement *)addr;
  81   if (e >= this && e < this+1) return true;


  30 #include "oops/valueKlass.hpp"
  31 #include "prims/privilegedStack.hpp"
  32 #include "runtime/thread.inline.hpp"
  33 #include "runtime/vframe.inline.hpp"
  34 
  35 void PrivilegedElement::initialize(vframeStream* vfst, oop context, PrivilegedElement* next, TRAPS) {
  36   Method* method        = vfst->method();
  37   _klass                = method->method_holder();
  38   _privileged_context   = context;
  39 #ifdef CHECK_UNHANDLED_OOPS
  40   THREAD->allow_unhandled_oop(&_privileged_context);
  41 #endif // CHECK_UNHANDLED_OOPS
  42   _frame_id             = vfst->frame_id();
  43   _next                 = next;
  44   assert(oopDesc::is_oop_or_null(_privileged_context), "must be an oop");
  45   assert(oopDesc::is_oop_or_null(protection_domain()), "must be an oop");
  46 }
  47 
  48 void PrivilegedElement::oops_do(OopClosure* f) {
  49   PrivilegedElement *cur = this;

  50   do {

  51     f->do_oop((oop*) &cur->_privileged_context);








  52     cur = cur->_next;
  53   } while(cur != NULL);
  54 }
  55 
  56 //-------------------------------------------------------------------------------
  57 #ifndef PRODUCT
  58 
  59 void PrivilegedElement::print_on(outputStream* st) const {
  60   st->print("   " PTR_FORMAT " ", p2i(_frame_id));
  61   _klass->print_value_on(st);
  62   if (protection_domain() != NULL) {
  63     st->print("   ");
  64     protection_domain()->print_value_on(st);
  65   }
  66   st->cr();
  67 }
  68 
  69 bool PrivilegedElement::contains(address addr) {
  70   PrivilegedElement *e = (PrivilegedElement *)addr;
  71   if (e >= this && e < this+1) return true;
< prev index next >