1 /* 2 * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. 3 * Copyright 2008 Red Hat, Inc. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21 * CA 95054 USA or visit www.sun.com if you need additional information or 22 * have any questions. 23 * 24 */ 25 26 #ifdef CC_INTERP 27 // | ... | 28 // +--------------------+ ------------------ 29 // | stack slot n-1 | low addresses 30 // | ... | 31 // | stack slot 0 | 32 // | monitor 0 (maybe) | 33 // | ... | 34 // | interpreter state | 35 // | ... | 36 // | frame_type | 37 // | next_frame | high addresses 38 // +--------------------+ ------------------ 39 // | ... | 40 41 class InterpreterFrame : public ZeroFrame { 42 friend class AbstractInterpreter; 43 44 private: 45 InterpreterFrame() : ZeroFrame() { 46 ShouldNotCallThis(); 47 } 48 49 protected: 50 enum Layout { 51 istate_off = jf_header_words + 52 (align_size_up_(sizeof(BytecodeInterpreter), 53 wordSize) >> LogBytesPerWord) - 1, 54 header_words 55 }; 56 57 public: 58 static InterpreterFrame *build(ZeroStack* stack, 59 const methodOop method, 60 JavaThread* thread); 61 static InterpreterFrame *build(ZeroStack* stack, int size); 62 63 public: 64 interpreterState interpreter_state() const { 65 return (interpreterState) addr_of_word(istate_off); 66 } 67 68 public: 69 void identify_word(int frame_index, 70 int offset, 71 char* fieldbuf, 72 char* valuebuf, 73 int buflen) const; 74 }; 75 #endif // CC_INTERP