Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(259)

Side by Side Diff: src/frames.h

Issue 188063002: Fix deoptimization for out-of-line constant pool. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Use correct constant pool for stubs. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/deoptimizer.cc ('k') | src/frames.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 NO_ID = 0 218 NO_ID = 0
219 }; 219 };
220 220
221 // Used to mark the outermost JS entry frame. 221 // Used to mark the outermost JS entry frame.
222 enum JsFrameMarker { 222 enum JsFrameMarker {
223 INNER_JSENTRY_FRAME = 0, 223 INNER_JSENTRY_FRAME = 0,
224 OUTERMOST_JSENTRY_FRAME = 1 224 OUTERMOST_JSENTRY_FRAME = 1
225 }; 225 };
226 226
227 struct State { 227 struct State {
228 State() : sp(NULL), fp(NULL), pc_address(NULL) { } 228 State() : sp(NULL), fp(NULL), pc_address(NULL),
229 constant_pool_address(NULL) { }
229 Address sp; 230 Address sp;
230 Address fp; 231 Address fp;
231 Address* pc_address; 232 Address* pc_address;
233 Address* constant_pool_address;
232 }; 234 };
233 235
234 // Copy constructor; it breaks the connection to host iterator 236 // Copy constructor; it breaks the connection to host iterator
235 // (as an iterator usually lives on stack). 237 // (as an iterator usually lives on stack).
236 StackFrame(const StackFrame& original) { 238 StackFrame(const StackFrame& original) {
237 this->state_ = original.state_; 239 this->state_ = original.state_;
238 this->iterator_ = NULL; 240 this->iterator_ = NULL;
239 this->isolate_ = original.isolate_; 241 this->isolate_ = original.isolate_;
240 } 242 }
241 243
(...skipping 21 matching lines...) Expand all
263 Address caller_sp() const { return GetCallerStackPointer(); } 265 Address caller_sp() const { return GetCallerStackPointer(); }
264 266
265 // If this frame is optimized and was dynamically aligned return its old 267 // If this frame is optimized and was dynamically aligned return its old
266 // unaligned frame pointer. When the frame is deoptimized its FP will shift 268 // unaligned frame pointer. When the frame is deoptimized its FP will shift
267 // up one word and become unaligned. 269 // up one word and become unaligned.
268 Address UnpaddedFP() const; 270 Address UnpaddedFP() const;
269 271
270 Address pc() const { return *pc_address(); } 272 Address pc() const { return *pc_address(); }
271 void set_pc(Address pc) { *pc_address() = pc; } 273 void set_pc(Address pc) { *pc_address() = pc; }
272 274
275 Address constant_pool() const { return *constant_pool_address(); }
276 void set_constant_pool(ConstantPoolArray* constant_pool) {
277 *constant_pool_address() = reinterpret_cast<Address>(constant_pool);
278 }
279
273 virtual void SetCallerFp(Address caller_fp) = 0; 280 virtual void SetCallerFp(Address caller_fp) = 0;
274 281
275 // Manually changes value of fp in this object. 282 // Manually changes value of fp in this object.
276 void UpdateFp(Address fp) { state_.fp = fp; } 283 void UpdateFp(Address fp) { state_.fp = fp; }
277 284
278 Address* pc_address() const { return state_.pc_address; } 285 Address* pc_address() const { return state_.pc_address; }
279 286
287 Address* constant_pool_address() const {
288 return state_.constant_pool_address;
289 }
290
280 // Get the id of this stack frame. 291 // Get the id of this stack frame.
281 Id id() const { return static_cast<Id>(OffsetFrom(caller_sp())); } 292 Id id() const { return static_cast<Id>(OffsetFrom(caller_sp())); }
282 293
283 // Checks if this frame includes any stack handlers. 294 // Checks if this frame includes any stack handlers.
284 bool HasHandler() const; 295 bool HasHandler() const;
285 296
286 // Get the type of this frame. 297 // Get the type of this frame.
287 virtual Type type() const = 0; 298 virtual Type type() const = 0;
288 299
289 // Get the code associated with this frame. 300 // Get the code associated with this frame.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 virtual void ComputeCallerState(State* state) const; 500 virtual void ComputeCallerState(State* state) const;
490 501
491 // Accessors. 502 // Accessors.
492 inline Address caller_fp() const; 503 inline Address caller_fp() const;
493 inline Address caller_pc() const; 504 inline Address caller_pc() const;
494 505
495 // Computes the address of the PC field in the standard frame given 506 // Computes the address of the PC field in the standard frame given
496 // by the provided frame pointer. 507 // by the provided frame pointer.
497 static inline Address ComputePCAddress(Address fp); 508 static inline Address ComputePCAddress(Address fp);
498 509
510 // Computes the address of the constant pool field in the standard
511 // frame given by the provided frame pointer.
512 static inline Address ComputeConstantPoolAddress(Address fp);
513
499 // Iterate over expression stack including stack handlers, locals, 514 // Iterate over expression stack including stack handlers, locals,
500 // and parts of the fixed part including context and code fields. 515 // and parts of the fixed part including context and code fields.
501 void IterateExpressions(ObjectVisitor* v) const; 516 void IterateExpressions(ObjectVisitor* v) const;
502 517
503 // Returns the address of the n'th expression stack element. 518 // Returns the address of the n'th expression stack element.
504 Address GetExpressionAddress(int n) const; 519 Address GetExpressionAddress(int n) const;
505 static Address GetExpressionAddress(Address fp, int n); 520 static Address GetExpressionAddress(Address fp, int n);
506 521
507 // Determines if the n'th expression stack element is in a stack 522 // Determines if the n'th expression stack element is in a stack
508 // handler or not. Requires traversing all handlers in this frame. 523 // handler or not. Requires traversing all handlers in this frame.
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 }; 960 };
946 961
947 962
948 // Reads all frames on the current stack and copies them into the current 963 // Reads all frames on the current stack and copies them into the current
949 // zone memory. 964 // zone memory.
950 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); 965 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone);
951 966
952 } } // namespace v8::internal 967 } } // namespace v8::internal
953 968
954 #endif // V8_FRAMES_H_ 969 #endif // V8_FRAMES_H_
OLDNEW
« no previous file with comments | « src/deoptimizer.cc ('k') | src/frames.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698