OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/objects.h" | 5 #include "src/objects.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <iomanip> | 8 #include <iomanip> |
9 #include <memory> | 9 #include <memory> |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 13852 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13863 int entry = SearchOptimizedCodeMapEntry(native_context); | 13863 int entry = SearchOptimizedCodeMapEntry(native_context); |
13864 if (entry != kNotFound) { | 13864 if (entry != kNotFound) { |
13865 FixedArray* code_map = optimized_code_map(); | 13865 FixedArray* code_map = optimized_code_map(); |
13866 DCHECK_LE(entry + kEntryLength, code_map->length()); | 13866 DCHECK_LE(entry + kEntryLength, code_map->length()); |
13867 WeakCell* cell = WeakCell::cast(code_map->get(entry + kCachedCodeOffset)); | 13867 WeakCell* cell = WeakCell::cast(code_map->get(entry + kCachedCodeOffset)); |
13868 result = cell->cleared() ? nullptr : Code::cast(cell->value()); | 13868 result = cell->cleared() ? nullptr : Code::cast(cell->value()); |
13869 } | 13869 } |
13870 return result; | 13870 return result; |
13871 } | 13871 } |
13872 | 13872 |
13873 | 13873 void ObjectVisitor::VisitCodeTarget(Code* host, RelocInfo* rinfo) { |
13874 void ObjectVisitor::VisitCodeTarget(RelocInfo* rinfo) { | |
13875 DCHECK(RelocInfo::IsCodeTarget(rinfo->rmode())); | 13874 DCHECK(RelocInfo::IsCodeTarget(rinfo->rmode())); |
13876 Object* old_pointer = Code::GetCodeFromTargetAddress(rinfo->target_address()); | 13875 Object* old_pointer = Code::GetCodeFromTargetAddress(rinfo->target_address()); |
13877 Object* new_pointer = old_pointer; | 13876 Object* new_pointer = old_pointer; |
13878 VisitPointer(&new_pointer); | 13877 VisitPointer(host, &new_pointer); |
13879 DCHECK_EQ(old_pointer, new_pointer); | 13878 DCHECK_EQ(old_pointer, new_pointer); |
13880 } | 13879 } |
13881 | 13880 |
13882 | 13881 void ObjectVisitor::VisitCodeAgeSequence(Code* host, RelocInfo* rinfo) { |
13883 void ObjectVisitor::VisitCodeAgeSequence(RelocInfo* rinfo) { | |
13884 DCHECK(RelocInfo::IsCodeAgeSequence(rinfo->rmode())); | 13882 DCHECK(RelocInfo::IsCodeAgeSequence(rinfo->rmode())); |
13885 Object* old_pointer = rinfo->code_age_stub(); | 13883 Object* old_pointer = rinfo->code_age_stub(); |
13886 Object* new_pointer = old_pointer; | 13884 Object* new_pointer = old_pointer; |
13887 if (old_pointer != nullptr) { | 13885 if (old_pointer != nullptr) { |
13888 VisitPointer(&new_pointer); | 13886 VisitPointer(host, &new_pointer); |
13889 DCHECK_EQ(old_pointer, new_pointer); | 13887 DCHECK_EQ(old_pointer, new_pointer); |
13890 } | 13888 } |
13891 } | 13889 } |
13892 | 13890 |
13893 | 13891 void ObjectVisitor::VisitCodeEntry(JSFunction* host, Address entry_address) { |
13894 void ObjectVisitor::VisitCodeEntry(Address entry_address) { | |
13895 Object* old_pointer = Code::GetObjectFromEntryAddress(entry_address); | 13892 Object* old_pointer = Code::GetObjectFromEntryAddress(entry_address); |
13896 Object* new_pointer = old_pointer; | 13893 Object* new_pointer = old_pointer; |
13897 VisitPointer(&new_pointer); | 13894 VisitPointer(host, &new_pointer); |
13898 DCHECK_EQ(old_pointer, new_pointer); | 13895 DCHECK_EQ(old_pointer, new_pointer); |
13899 } | 13896 } |
13900 | 13897 |
13901 | 13898 void ObjectVisitor::VisitCell(Code* host, RelocInfo* rinfo) { |
13902 void ObjectVisitor::VisitCell(RelocInfo* rinfo) { | |
13903 DCHECK(rinfo->rmode() == RelocInfo::CELL); | 13899 DCHECK(rinfo->rmode() == RelocInfo::CELL); |
13904 Object* old_pointer = rinfo->target_cell(); | 13900 Object* old_pointer = rinfo->target_cell(); |
13905 Object* new_pointer = old_pointer; | 13901 Object* new_pointer = old_pointer; |
13906 VisitPointer(&new_pointer); | 13902 VisitPointer(host, &new_pointer); |
13907 DCHECK_EQ(old_pointer, new_pointer); | 13903 DCHECK_EQ(old_pointer, new_pointer); |
13908 } | 13904 } |
13909 | 13905 |
13910 | 13906 void ObjectVisitor::VisitDebugTarget(Code* host, RelocInfo* rinfo) { |
13911 void ObjectVisitor::VisitDebugTarget(RelocInfo* rinfo) { | |
13912 DCHECK(RelocInfo::IsDebugBreakSlot(rinfo->rmode()) && | 13907 DCHECK(RelocInfo::IsDebugBreakSlot(rinfo->rmode()) && |
13913 rinfo->IsPatchedDebugBreakSlotSequence()); | 13908 rinfo->IsPatchedDebugBreakSlotSequence()); |
13914 Object* old_pointer = | 13909 Object* old_pointer = |
13915 Code::GetCodeFromTargetAddress(rinfo->debug_call_address()); | 13910 Code::GetCodeFromTargetAddress(rinfo->debug_call_address()); |
13916 Object* new_pointer = old_pointer; | 13911 Object* new_pointer = old_pointer; |
13917 VisitPointer(&new_pointer); | 13912 VisitPointer(host, &new_pointer); |
13918 DCHECK_EQ(old_pointer, new_pointer); | 13913 DCHECK_EQ(old_pointer, new_pointer); |
13919 } | 13914 } |
13920 | 13915 |
13921 | 13916 void ObjectVisitor::VisitEmbeddedPointer(Code* host, RelocInfo* rinfo) { |
13922 void ObjectVisitor::VisitEmbeddedPointer(RelocInfo* rinfo) { | |
13923 DCHECK(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); | 13917 DCHECK(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); |
13924 Object* old_pointer = rinfo->target_object(); | 13918 Object* old_pointer = rinfo->target_object(); |
13925 Object* new_pointer = old_pointer; | 13919 Object* new_pointer = old_pointer; |
13926 VisitPointer(&new_pointer); | 13920 VisitPointer(host, &new_pointer); |
13927 DCHECK_EQ(old_pointer, new_pointer); | 13921 DCHECK_EQ(old_pointer, new_pointer); |
13928 } | 13922 } |
13929 | 13923 |
13930 | 13924 |
13931 void ObjectVisitor::VisitExternalReference(RelocInfo* rinfo) { | |
13932 Address old_reference = rinfo->target_external_reference(); | |
13933 Address new_reference = old_reference; | |
13934 VisitExternalReference(&new_reference); | |
13935 DCHECK_EQ(old_reference, new_reference); | |
13936 } | |
13937 | |
13938 | |
13939 void Code::InvalidateRelocation() { | 13925 void Code::InvalidateRelocation() { |
13940 InvalidateEmbeddedObjects(); | 13926 InvalidateEmbeddedObjects(); |
13941 set_relocation_info(GetHeap()->empty_byte_array()); | 13927 set_relocation_info(GetHeap()->empty_byte_array()); |
13942 } | 13928 } |
13943 | 13929 |
13944 | 13930 |
13945 void Code::InvalidateEmbeddedObjects() { | 13931 void Code::InvalidateEmbeddedObjects() { |
13946 HeapObject* undefined = GetHeap()->undefined_value(); | 13932 HeapObject* undefined = GetHeap()->undefined_value(); |
13947 Cell* undefined_cell = GetHeap()->undefined_cell(); | 13933 Cell* undefined_cell = GetHeap()->undefined_cell(); |
13948 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) | | 13934 int mode_mask = RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT) | |
(...skipping 6486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20435 // depend on this. | 20421 // depend on this. |
20436 return DICTIONARY_ELEMENTS; | 20422 return DICTIONARY_ELEMENTS; |
20437 } | 20423 } |
20438 DCHECK_LE(kind, LAST_ELEMENTS_KIND); | 20424 DCHECK_LE(kind, LAST_ELEMENTS_KIND); |
20439 return kind; | 20425 return kind; |
20440 } | 20426 } |
20441 } | 20427 } |
20442 | 20428 |
20443 } // namespace internal | 20429 } // namespace internal |
20444 } // namespace v8 | 20430 } // namespace v8 |
OLD | NEW |