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

Side by Side Diff: src/liveedit.cc

Issue 3226014: Add functionality for finding code objects from a pc that points into... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 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 | Annotate | Revision Log
« no previous file with comments | « src/ia32/frames-ia32.cc ('k') | src/mark-compact.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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 } 795 }
796 796
797 private: 797 private:
798 Code* original_; 798 Code* original_;
799 ZoneList<Object**> rvalues_; 799 ZoneList<Object**> rvalues_;
800 ZoneList<RelocInfo> reloc_infos_; 800 ZoneList<RelocInfo> reloc_infos_;
801 ZoneList<Address> code_entries_; 801 ZoneList<Address> code_entries_;
802 }; 802 };
803 803
804 804
805 class FrameCookingThreadVisitor : public ThreadVisitor {
806 public:
807 void VisitThread(ThreadLocalTop* top) {
808 StackFrame::CookFramesForThread(top);
809 }
810 };
811
812 class FrameUncookingThreadVisitor : public ThreadVisitor {
813 public:
814 void VisitThread(ThreadLocalTop* top) {
815 StackFrame::UncookFramesForThread(top);
816 }
817 };
818
819 static void IterateAllThreads(ThreadVisitor* visitor) {
820 Top::IterateThread(visitor);
821 ThreadManager::IterateArchivedThreads(visitor);
822 }
823
824 // Finds all references to original and replaces them with substitution. 805 // Finds all references to original and replaces them with substitution.
825 static void ReplaceCodeObject(Code* original, Code* substitution) { 806 static void ReplaceCodeObject(Code* original, Code* substitution) {
826 ASSERT(!Heap::InNewSpace(substitution)); 807 ASSERT(!Heap::InNewSpace(substitution));
827 808
828 AssertNoAllocation no_allocations_please; 809 AssertNoAllocation no_allocations_please;
829 810
830 // A zone scope for ReferenceCollectorVisitor. 811 // A zone scope for ReferenceCollectorVisitor.
831 ZoneScope scope(DELETE_ON_EXIT); 812 ZoneScope scope(DELETE_ON_EXIT);
832 813
833 ReferenceCollectorVisitor visitor(original); 814 ReferenceCollectorVisitor visitor(original);
834 815
835 // Iterate over all roots. Stack frames may have pointer into original code, 816 // Iterate over all roots. Stack frames may have pointer into original code,
836 // so temporary replace the pointers with offset numbers 817 // so temporary replace the pointers with offset numbers
837 // in prologue/epilogue. 818 // in prologue/epilogue.
838 { 819 {
839 FrameCookingThreadVisitor cooking_visitor;
840 IterateAllThreads(&cooking_visitor);
841
842 Heap::IterateStrongRoots(&visitor, VISIT_ALL); 820 Heap::IterateStrongRoots(&visitor, VISIT_ALL);
843
844 FrameUncookingThreadVisitor uncooking_visitor;
845 IterateAllThreads(&uncooking_visitor);
846 } 821 }
847 822
848 // Now iterate over all pointers of all objects, including code_target 823 // Now iterate over all pointers of all objects, including code_target
849 // implicit pointers. 824 // implicit pointers.
850 HeapIterator iterator; 825 HeapIterator iterator;
851 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { 826 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
852 obj->Iterate(&visitor); 827 obj->Iterate(&visitor);
853 } 828 }
854 829
855 visitor.Replace(substitution); 830 visitor.Replace(substitution);
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1506 1481
1507 bool LiveEditFunctionTracker::IsActive() { 1482 bool LiveEditFunctionTracker::IsActive() {
1508 return false; 1483 return false;
1509 } 1484 }
1510 1485
1511 #endif // ENABLE_DEBUGGER_SUPPORT 1486 #endif // ENABLE_DEBUGGER_SUPPORT
1512 1487
1513 1488
1514 1489
1515 } } // namespace v8::internal 1490 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ia32/frames-ia32.cc ('k') | src/mark-compact.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698