src/share/vm/runtime/javaFrameAnchor.hpp

Thu, 10 Apr 2008 15:49:16 -0400

author
sbohne
date
Thu, 10 Apr 2008 15:49:16 -0400
changeset 528
c6ff24ceec1c
parent 435
a61af66fc99e
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6686407: Fix for 6666698 broke -XX:BiasedLockingStartupDelay=0
Summary: Stack allocated VM_EnableBiasedLocking op must be marked as such
Reviewed-by: xlu, acorn, never, dholmes

     1 /*
     2  * Copyright 2002-2005 Sun Microsystems, Inc.  All Rights Reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    20  * CA 95054 USA or visit www.sun.com if you need additional information or
    21  * have any questions.
    22  *
    23  */
    24 //
    25 // An object for encapsulating the machine/os dependent part of a JavaThread frame state
    26 //
    27 class JavaThread;
    29 class JavaFrameAnchor VALUE_OBJ_CLASS_SPEC {
    30 // Too many friends...
    31 friend class CallNativeDirectNode;
    32 friend class OptoRuntime;
    33 friend class Runtime1;
    34 friend class StubAssembler;
    35 friend class CallRuntimeDirectNode;
    36 friend class MacroAssembler;
    37 friend class InterpreterGenerator;
    38 friend class LIR_Assembler;
    39 friend class GraphKit;
    40 friend class StubGenerator;
    41 friend class JavaThread;
    42 friend class frame;
    43 friend class VMStructs;
    44 friend class BytecodeInterpreter;
    45 friend class JavaCallWrapper;
    47  private:
    48   //
    49   // Whenever _last_Java_sp != NULL other anchor fields MUST be valid!
    50   // The stack may not be walkable [check with walkable() ] but the values must be valid.
    51   // The profiler apparently depends on this.
    52   //
    53   intptr_t* volatile _last_Java_sp;
    55   // Whenever we call from Java to native we can not be assured that the return
    56   // address that composes the last_Java_frame will be in an accessible location
    57   // so calls from Java to native store that pc (or one good enough to locate
    58   // the oopmap) in the frame anchor. Since the frames that call from Java to
    59   // native are never deoptimized we never need to patch the pc and so this
    60   // is acceptable.
    61   volatile  address _last_Java_pc;
    63   // tells whether the last Java frame is set
    64   // It is important that when last_Java_sp != NULL that the rest of the frame
    65   // anchor (including platform specific) all be valid.
    67   bool has_last_Java_frame() const                   { return _last_Java_sp != NULL; }
    68   // This is very dangerous unless sp == NULL
    69   // Invalidate the anchor so that has_last_frame is false
    70   // and no one should look at the other fields.
    71   void zap(void)                                     { _last_Java_sp = NULL; }
    73 #include "incls/_javaFrameAnchor_pd.hpp.incl"
    75 public:
    76   JavaFrameAnchor()                              { clear(); }
    77   JavaFrameAnchor(JavaFrameAnchor *src)          { copy(src); }
    79   address last_Java_pc(void)                     { return _last_Java_pc; }
    80   void set_last_Java_pc(address pc)              { _last_Java_pc = pc; }
    82   // Assembly stub generation helpers
    84   static ByteSize last_Java_sp_offset()          { return byte_offset_of(JavaFrameAnchor, _last_Java_sp); }
    85   static ByteSize last_Java_pc_offset()          { return byte_offset_of(JavaFrameAnchor, _last_Java_pc); }
    87 };

mercurial