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

Side by Side Diff: src/debug.cc

Issue 20176: Moved some IA32 specific code from to the architecture dependent part of the ... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 10 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/debug.h ('k') | src/debug-arm.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 void BreakLocationIterator::SetDebugBreak() { 278 void BreakLocationIterator::SetDebugBreak() {
279 // If there is already a break point here just return. This might happen if 279 // If there is already a break point here just return. This might happen if
280 // the same code is flooded with break points twice. Flooding the same 280 // the same code is flooded with break points twice. Flooding the same
281 // function twice might happen when stepping in a function with an exception 281 // function twice might happen when stepping in a function with an exception
282 // handler as the handler and the function is the same. 282 // handler as the handler and the function is the same.
283 if (IsDebugBreak()) { 283 if (IsDebugBreak()) {
284 return; 284 return;
285 } 285 }
286 286
287 if (RelocInfo::IsJSReturn(rmode())) { 287 if (RelocInfo::IsJSReturn(rmode())) {
288 // This path is currently only used on IA32 as JSExitFrame on ARM uses a 288 // Patch the frame exit code with a break point.
289 // stub. 289 SetDebugBreakAtReturn();
290 // Patch the JS frame exit code with a debug break call. See
291 // VisitReturnStatement and ExitJSFrame in codegen-ia32.cc for the
292 // precise return instructions sequence.
293 ASSERT(Debug::kIa32JSReturnSequenceLength >=
294 Debug::kIa32CallInstructionLength);
295 rinfo()->patch_code_with_call(Debug::debug_break_return_entry()->entry(),
296 Debug::kIa32JSReturnSequenceLength - Debug::kIa32CallInstructionLength);
297 } else { 290 } else {
298 // Patch the original code with the current address as the current address 291 // Patch the original code with the current address as the current address
299 // might have changed by the inline caching since the code was copied. 292 // might have changed by the inline caching since the code was copied.
300 original_rinfo()->set_target_address(rinfo()->target_address()); 293 original_rinfo()->set_target_address(rinfo()->target_address());
301 294
302 // Patch the code to invoke the builtin debug break function matching the 295 // Patch the code to invoke the builtin debug break function matching the
303 // calling convention used by the call site. 296 // calling convention used by the call site.
304 Handle<Code> dbgbrk_code(Debug::FindDebugBreak(rinfo())); 297 Handle<Code> dbgbrk_code(Debug::FindDebugBreak(rinfo()));
305 rinfo()->set_target_address(dbgbrk_code->entry()); 298 rinfo()->set_target_address(dbgbrk_code->entry());
306 } 299 }
307 ASSERT(IsDebugBreak()); 300 ASSERT(IsDebugBreak());
308 } 301 }
309 302
310 303
311 void BreakLocationIterator::ClearDebugBreak() { 304 void BreakLocationIterator::ClearDebugBreak() {
312 if (RelocInfo::IsJSReturn(rmode())) { 305 if (RelocInfo::IsJSReturn(rmode())) {
313 // Restore the JS frame exit code. 306 // Restore the frame exit code.
314 rinfo()->patch_code(original_rinfo()->pc(), 307 ClearDebugBreakAtReturn();
315 Debug::kIa32JSReturnSequenceLength);
316 } else { 308 } else {
317 // Patch the code to the original invoke. 309 // Patch the code to the original invoke.
318 rinfo()->set_target_address(original_rinfo()->target_address()); 310 rinfo()->set_target_address(original_rinfo()->target_address());
319 } 311 }
320 ASSERT(!IsDebugBreak()); 312 ASSERT(!IsDebugBreak());
321 } 313 }
322 314
323 315
324 void BreakLocationIterator::PrepareStepIn() { 316 void BreakLocationIterator::PrepareStepIn() {
325 // Step in can only be prepared if currently positioned on an IC call or 317 // Step in can only be prepared if currently positioned on an IC call or
(...skipping 26 matching lines...) Expand all
352 344
353 345
354 bool BreakLocationIterator::HasBreakPoint() { 346 bool BreakLocationIterator::HasBreakPoint() {
355 return debug_info_->HasBreakPoint(code_position()); 347 return debug_info_->HasBreakPoint(code_position());
356 } 348 }
357 349
358 350
359 // Check whether there is a debug break at the current position. 351 // Check whether there is a debug break at the current position.
360 bool BreakLocationIterator::IsDebugBreak() { 352 bool BreakLocationIterator::IsDebugBreak() {
361 if (RelocInfo::IsJSReturn(rmode())) { 353 if (RelocInfo::IsJSReturn(rmode())) {
362 // This is IA32 specific but works as long as the ARM version 354 return IsDebugBreakAtReturn();
363 // still uses a stub for JSExitFrame.
364 //
365 // TODO(1240753): Make the test architecture independent or split
366 // parts of the debugger into architecture dependent files.
367 return (*(rinfo()->pc()) == 0xE8);
368 } else { 355 } else {
369 return Debug::IsDebugBreak(rinfo()->target_address()); 356 return Debug::IsDebugBreak(rinfo()->target_address());
370 } 357 }
371 } 358 }
372 359
373 360
374 Object* BreakLocationIterator::BreakPointObjects() { 361 Object* BreakLocationIterator::BreakPointObjects() {
375 return debug_info_->GetBreakPointObjects(code_position()); 362 return debug_info_->GetBreakPointObjects(code_position());
376 } 363 }
377 364
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after
2035 } 2022 }
2036 2023
2037 2024
2038 void LockingMessageQueue::Clear() { 2025 void LockingMessageQueue::Clear() {
2039 ScopedLock sl(lock_); 2026 ScopedLock sl(lock_);
2040 queue_.Clear(); 2027 queue_.Clear();
2041 } 2028 }
2042 2029
2043 2030
2044 } } // namespace v8::internal 2031 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/debug.h ('k') | src/debug-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698