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

Side by Side Diff: src/ppc/simulator-ppc.h

Issue 1309303005: PPC: Make Simulator respect C stack limits as well. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « no previous file | src/ppc/simulator-ppc.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 // Declares a Simulator for PPC instructions if we are not generating a native 6 // Declares a Simulator for PPC instructions if we are not generating a native
7 // PPC binary. This Simulator allows us to run and debug PPC code generation on 7 // PPC binary. This Simulator allows us to run and debug PPC code generation on
8 // regular desktop machines. 8 // regular desktop machines.
9 // V8 calls into generated code by "calling" the CALL_GENERATED_CODE macro, 9 // V8 calls into generated code by "calling" the CALL_GENERATED_CODE macro,
10 // which will start execution in the Simulator or forwards to the real entry 10 // which will start execution in the Simulator or forwards to the real entry
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 192 }
193 int64_t get_d_register(int dreg) { 193 int64_t get_d_register(int dreg) {
194 DCHECK(dreg >= 0 && dreg < kNumFPRs); 194 DCHECK(dreg >= 0 && dreg < kNumFPRs);
195 return fp_registers_[dreg]; 195 return fp_registers_[dreg];
196 } 196 }
197 197
198 // Special case of set_register and get_register to access the raw PC value. 198 // Special case of set_register and get_register to access the raw PC value.
199 void set_pc(intptr_t value); 199 void set_pc(intptr_t value);
200 intptr_t get_pc() const; 200 intptr_t get_pc() const;
201 201
202 Address get_sp() { 202 Address get_sp() const {
203 return reinterpret_cast<Address>(static_cast<intptr_t>(get_register(sp))); 203 return reinterpret_cast<Address>(static_cast<intptr_t>(get_register(sp)));
204 } 204 }
205 205
206 // Accessor to the internal simulator stack area. 206 // Accessor to the internal simulator stack area.
207 uintptr_t StackLimit() const; 207 uintptr_t StackLimit(uintptr_t c_limit) const;
208 208
209 // Executes PPC instructions until the PC reaches end_sim_pc. 209 // Executes PPC instructions until the PC reaches end_sim_pc.
210 void Execute(); 210 void Execute();
211 211
212 // Call on program start. 212 // Call on program start.
213 static void Initialize(Isolate* isolate); 213 static void Initialize(Isolate* isolate);
214 214
215 static void TearDown(HashMap* i_cache, Redirection* first); 215 static void TearDown(HashMap* i_cache, Redirection* first);
216 216
217 // V8 generally calls into generated JS code with 5 parameters and into 217 // V8 generally calls into generated JS code with 5 parameters and into
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 (intptr_t)p3, (intptr_t)p4)) 396 (intptr_t)p3, (intptr_t)p4))
397 397
398 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \ 398 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
399 Simulator::current(Isolate::Current()) \ 399 Simulator::current(Isolate::Current()) \
400 ->Call(entry, 10, (intptr_t)p0, (intptr_t)p1, (intptr_t)p2, \ 400 ->Call(entry, 10, (intptr_t)p0, (intptr_t)p1, (intptr_t)p2, \
401 (intptr_t)p3, (intptr_t)p4, (intptr_t)p5, (intptr_t)p6, \ 401 (intptr_t)p3, (intptr_t)p4, (intptr_t)p5, (intptr_t)p6, \
402 (intptr_t)p7, (intptr_t)NULL, (intptr_t)p8) 402 (intptr_t)p7, (intptr_t)NULL, (intptr_t)p8)
403 403
404 404
405 // The simulator has its own stack. Thus it has a different stack limit from 405 // The simulator has its own stack. Thus it has a different stack limit from
406 // the C-based native code. Setting the c_limit to indicate a very small 406 // the C-based native code. The JS-based limit normally points near the end of
407 // stack cause stack overflow errors, since the simulator ignores the input. 407 // the simulator stack. When the C-based limit is exhausted we reflect that by
408 // This is unlikely to be an issue in practice, though it might cause testing 408 // lowering the JS-based limit as well, to make stack checks trigger.
409 // trouble down the line.
410 class SimulatorStack : public v8::internal::AllStatic { 409 class SimulatorStack : public v8::internal::AllStatic {
411 public: 410 public:
412 static inline uintptr_t JsLimitFromCLimit(v8::internal::Isolate* isolate, 411 static inline uintptr_t JsLimitFromCLimit(v8::internal::Isolate* isolate,
413 uintptr_t c_limit) { 412 uintptr_t c_limit) {
414 return Simulator::current(isolate)->StackLimit(); 413 return Simulator::current(isolate)->StackLimit(c_limit);
415 } 414 }
416 415
417 static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) { 416 static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) {
418 Simulator* sim = Simulator::current(Isolate::Current()); 417 Simulator* sim = Simulator::current(Isolate::Current());
419 return sim->PushAddress(try_catch_address); 418 return sim->PushAddress(try_catch_address);
420 } 419 }
421 420
422 static inline void UnregisterCTryCatch() { 421 static inline void UnregisterCTryCatch() {
423 Simulator::current(Isolate::Current())->PopAddress(); 422 Simulator::current(Isolate::Current())->PopAddress();
424 } 423 }
425 }; 424 };
426 } 425 }
427 } // namespace v8::internal 426 } // namespace v8::internal
428 427
429 #endif // !defined(USE_SIMULATOR) 428 #endif // !defined(USE_SIMULATOR)
430 #endif // V8_PPC_SIMULATOR_PPC_H_ 429 #endif // V8_PPC_SIMULATOR_PPC_H_
OLDNEW
« no previous file with comments | « no previous file | src/ppc/simulator-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698