comparison src/share/vm/runtime/deoptimization.hpp @ 3369:3d2ab563047a

7043461: VM crashes in void LinkResolver::runtime_resolve_virtual_method Reviewed-by: kvn, coleenp
author never
date Thu, 12 May 2011 10:29:02 -0700
parents bad7ecd0b6ed
children be4ca325525a 5432047c7db7
comparison
equal deleted inserted replaced
3365:3cfb240033d1 3369:3d2ab563047a
136 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack 136 intptr_t* _frame_sizes; // Array of frame sizes, in bytes, for unrolling the stack
137 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack 137 address* _frame_pcs; // Array of frame pc's, in bytes, for unrolling the stack
138 intptr_t* _register_block; // Block for storing callee-saved registers. 138 intptr_t* _register_block; // Block for storing callee-saved registers.
139 BasicType _return_type; // Tells if we have to restore double or long return value 139 BasicType _return_type; // Tells if we have to restore double or long return value
140 intptr_t _initial_fp; // FP of the sender frame 140 intptr_t _initial_fp; // FP of the sender frame
141 int _caller_actual_parameters; // The number of actual arguments at the
142 // interpreted caller of the deoptimized frame
143
141 // The following fields are used as temps during the unpacking phase 144 // The following fields are used as temps during the unpacking phase
142 // (which is tight on registers, especially on x86). They really ought 145 // (which is tight on registers, especially on x86). They really ought
143 // to be PD variables but that involves moving this class into its own 146 // to be PD variables but that involves moving this class into its own
144 // file to use the pd include mechanism. Maybe in a later cleanup ... 147 // file to use the pd include mechanism. Maybe in a later cleanup ...
145 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp) 148 intptr_t _counter_temp; // SHOULD BE PD VARIABLE (x86 frame count temp)
147 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp) 150 intptr_t _sender_sp_temp; // SHOULD BE PD VARIABLE (x86 sender_sp)
148 public: 151 public:
149 // Constructor 152 // Constructor
150 UnrollBlock(int size_of_deoptimized_frame, 153 UnrollBlock(int size_of_deoptimized_frame,
151 int caller_adjustment, 154 int caller_adjustment,
155 int caller_actual_parameters,
152 int number_of_frames, 156 int number_of_frames,
153 intptr_t* frame_sizes, 157 intptr_t* frame_sizes,
154 address* frames_pcs, 158 address* frames_pcs,
155 BasicType return_type); 159 BasicType return_type);
156 ~UnrollBlock(); 160 ~UnrollBlock();
165 169
166 // Returns the total size of frames 170 // Returns the total size of frames
167 int size_of_frames() const; 171 int size_of_frames() const;
168 172
169 void set_initial_fp(intptr_t fp) { _initial_fp = fp; } 173 void set_initial_fp(intptr_t fp) { _initial_fp = fp; }
174
175 int caller_actual_parameters() const { return _caller_actual_parameters; }
170 176
171 // Accessors used by the code generator for the unpack stub. 177 // Accessors used by the code generator for the unpack stub.
172 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); } 178 static int size_of_deoptimized_frame_offset_in_bytes() { return offset_of(UnrollBlock, _size_of_deoptimized_frame); }
173 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); } 179 static int caller_adjustment_offset_in_bytes() { return offset_of(UnrollBlock, _caller_adjustment); }
174 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); } 180 static int number_of_frames_offset_in_bytes() { return offset_of(UnrollBlock, _number_of_frames); }