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

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

Issue 1238503003: PPC: Debugger: use debug break slots to break at function exit. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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/assembler-ppc-inl.h » ('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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 } 636 }
637 637
638 // Return the code target address at a call site from the return address 638 // Return the code target address at a call site from the return address
639 // of that call in the instruction stream. 639 // of that call in the instruction stream.
640 inline static Address target_address_from_return_address(Address pc); 640 inline static Address target_address_from_return_address(Address pc);
641 641
642 // Given the address of the beginning of a call, return the address 642 // Given the address of the beginning of a call, return the address
643 // in the instruction stream that the call will return to. 643 // in the instruction stream that the call will return to.
644 INLINE(static Address return_address_from_call_start(Address pc)); 644 INLINE(static Address return_address_from_call_start(Address pc));
645 645
646 // Return the code target address of the patch debug break slot
647 INLINE(static Address break_address_from_return_address(Address pc));
648
649 // This sets the branch destination. 646 // This sets the branch destination.
650 // This is for calls and branches within generated code. 647 // This is for calls and branches within generated code.
651 inline static void deserialization_set_special_target_at( 648 inline static void deserialization_set_special_target_at(
652 Address instruction_payload, Code* code, Address target); 649 Address instruction_payload, Code* code, Address target);
653 650
654 // This sets the internal reference at the pc. 651 // This sets the internal reference at the pc.
655 inline static void deserialization_set_target_internal_reference_at( 652 inline static void deserialization_set_target_internal_reference_at(
656 Address pc, Address target, 653 Address pc, Address target,
657 RelocInfo::Mode mode = RelocInfo::INTERNAL_REFERENCE); 654 RelocInfo::Mode mode = RelocInfo::INTERNAL_REFERENCE);
658 655
(...skipping 30 matching lines...) Expand all
689 // target and the return address. 686 // target and the return address.
690 687
691 // Call sequence is a FIXED_SEQUENCE: 688 // Call sequence is a FIXED_SEQUENCE:
692 // mov r8, @ call address 689 // mov r8, @ call address
693 // mtlr r8 690 // mtlr r8
694 // blrl 691 // blrl
695 // @ return address 692 // @ return address
696 static const int kCallTargetAddressOffset = 693 static const int kCallTargetAddressOffset =
697 (kMovInstructions + 2) * kInstrSize; 694 (kMovInstructions + 2) * kInstrSize;
698 695
699 // Distance between start of patched return sequence and the emitted address
700 // to jump to.
701 // Patched return sequence is a FIXED_SEQUENCE:
702 // mov r0, <address>
703 // mtlr r0
704 // blrl
705 static const int kPatchReturnSequenceAddressOffset = 0 * kInstrSize;
706
707 // Distance between start of patched debug break slot and the emitted address 696 // Distance between start of patched debug break slot and the emitted address
708 // to jump to. 697 // to jump to.
709 // Patched debug break slot code is a FIXED_SEQUENCE: 698 // Patched debug break slot code is a FIXED_SEQUENCE:
710 // mov r0, <address> 699 // mov r0, <address>
711 // mtlr r0 700 // mtlr r0
712 // blrl 701 // blrl
713 static const int kPatchDebugBreakSlotAddressOffset = 0 * kInstrSize; 702 static const int kPatchDebugBreakSlotAddressOffset = 0 * kInstrSize;
714 703
715 // This is the length of the BreakLocation::SetDebugBreakAtReturn()
716 // code patch FIXED_SEQUENCE
717 static const int kJSReturnSequenceInstructions =
718 kMovInstructionsNoConstantPool + 3;
719 static const int kJSReturnSequenceLength =
720 kJSReturnSequenceInstructions * kInstrSize;
721
722 // This is the length of the code sequence from SetDebugBreakAtSlot() 704 // This is the length of the code sequence from SetDebugBreakAtSlot()
723 // FIXED_SEQUENCE 705 // FIXED_SEQUENCE
724 static const int kDebugBreakSlotInstructions = 706 static const int kDebugBreakSlotInstructions =
725 kMovInstructionsNoConstantPool + 2; 707 kMovInstructionsNoConstantPool + 2;
726 static const int kDebugBreakSlotLength = 708 static const int kDebugBreakSlotLength =
727 kDebugBreakSlotInstructions * kInstrSize; 709 kDebugBreakSlotInstructions * kInstrSize;
728 710
729 static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) { 711 static inline int encode_crbit(const CRegister& cr, enum CRBit crbit) {
730 return ((cr.code() * CRWIDTH) + crbit); 712 return ((cr.code() * CRWIDTH) + crbit);
731 } 713 }
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 } 1272 }
1291 1273
1292 private: 1274 private:
1293 Assembler* assem_; 1275 Assembler* assem_;
1294 1276
1295 DISALLOW_IMPLICIT_CONSTRUCTORS(BlockConstantPoolEntrySharingScope); 1277 DISALLOW_IMPLICIT_CONSTRUCTORS(BlockConstantPoolEntrySharingScope);
1296 }; 1278 };
1297 1279
1298 // Debugging 1280 // Debugging
1299 1281
1300 // Mark address of the ExitJSFrame code.
1301 void RecordJSReturn();
1302
1303 // Mark generator continuation. 1282 // Mark generator continuation.
1304 void RecordGeneratorContinuation(); 1283 void RecordGeneratorContinuation();
1305 1284
1306 // Mark address of a debug break slot. 1285 // Mark address of a debug break slot.
1307 void RecordDebugBreakSlot(); 1286 void RecordDebugBreakSlot(RelocInfo::Mode mode, int argc = 0);
1308 void RecordDebugBreakSlotForCall(int argc);
1309 void RecordDebugBreakSlotForConstructCall();
1310 1287
1311 // Record the AST id of the CallIC being compiled, so that it can be placed 1288 // Record the AST id of the CallIC being compiled, so that it can be placed
1312 // in the relocation information. 1289 // in the relocation information.
1313 void SetRecordedAstId(TypeFeedbackId ast_id) { 1290 void SetRecordedAstId(TypeFeedbackId ast_id) {
1314 // Causes compiler to fail 1291 // Causes compiler to fail
1315 // DCHECK(recorded_ast_id_.IsNone()); 1292 // DCHECK(recorded_ast_id_.IsNone());
1316 recorded_ast_id_ = ast_id; 1293 recorded_ast_id_ = ast_id;
1317 } 1294 }
1318 1295
1319 TypeFeedbackId RecordedAstId() { 1296 TypeFeedbackId RecordedAstId() {
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 1567
1591 1568
1592 class EnsureSpace BASE_EMBEDDED { 1569 class EnsureSpace BASE_EMBEDDED {
1593 public: 1570 public:
1594 explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); } 1571 explicit EnsureSpace(Assembler* assembler) { assembler->CheckBuffer(); }
1595 }; 1572 };
1596 } 1573 }
1597 } // namespace v8::internal 1574 } // namespace v8::internal
1598 1575
1599 #endif // V8_PPC_ASSEMBLER_PPC_H_ 1576 #endif // V8_PPC_ASSEMBLER_PPC_H_
OLDNEW
« no previous file with comments | « no previous file | src/ppc/assembler-ppc-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698