OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef V8_ARM64_ASSEMBLER_ARM64_INL_H_ | 5 #ifndef V8_ARM64_ASSEMBLER_ARM64_INL_H_ |
6 #define V8_ARM64_ASSEMBLER_ARM64_INL_H_ | 6 #define V8_ARM64_ASSEMBLER_ARM64_INL_H_ |
7 | 7 |
8 #include "src/arm64/assembler-arm64.h" | 8 #include "src/arm64/assembler-arm64.h" |
9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
10 #include "src/debug/debug.h" | 10 #include "src/debug/debug.h" |
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 IsRuntimeEntry(rmode_) || IsExternalReference(rmode_) || | 846 IsRuntimeEntry(rmode_) || IsExternalReference(rmode_) || |
847 IsInternalReference(rmode_)); | 847 IsInternalReference(rmode_)); |
848 if (IsInternalReference(rmode_)) { | 848 if (IsInternalReference(rmode_)) { |
849 Memory::Address_at(pc_) = NULL; | 849 Memory::Address_at(pc_) = NULL; |
850 } else { | 850 } else { |
851 Assembler::set_target_address_at(isolate_, pc_, host_, NULL); | 851 Assembler::set_target_address_at(isolate_, pc_, host_, NULL); |
852 } | 852 } |
853 } | 853 } |
854 | 854 |
855 | 855 |
856 bool RelocInfo::IsPatchedReturnSequence() { | |
857 // The sequence must be: | |
858 // ldr ip0, [pc, #offset] | |
859 // blr ip0 | |
860 // See arm64/debug-arm64.cc DebugCodegen::PatchDebugBreakSlot | |
861 Instruction* i1 = reinterpret_cast<Instruction*>(pc_); | |
862 Instruction* i2 = i1->following(); | |
863 return i1->IsLdrLiteralX() && (i1->Rt() == kIp0Code) && | |
864 i2->IsBranchAndLinkToRegister() && (i2->Rn() == kIp0Code); | |
865 } | |
866 | |
867 | |
868 bool RelocInfo::IsPatchedDebugBreakSlotSequence() { | |
869 Instruction* current_instr = reinterpret_cast<Instruction*>(pc_); | |
870 return !current_instr->IsNop(Assembler::DEBUG_BREAK_NOP); | |
871 } | |
872 | |
873 | |
874 void RelocInfo::Visit(Isolate* isolate, ObjectVisitor* visitor) { | 856 void RelocInfo::Visit(Isolate* isolate, ObjectVisitor* visitor) { |
875 RelocInfo::Mode mode = rmode(); | 857 RelocInfo::Mode mode = rmode(); |
876 if (mode == RelocInfo::EMBEDDED_OBJECT) { | 858 if (mode == RelocInfo::EMBEDDED_OBJECT) { |
877 visitor->VisitEmbeddedPointer(this); | 859 visitor->VisitEmbeddedPointer(this); |
878 } else if (RelocInfo::IsCodeTarget(mode)) { | 860 } else if (RelocInfo::IsCodeTarget(mode)) { |
879 visitor->VisitCodeTarget(this); | 861 visitor->VisitCodeTarget(this); |
880 } else if (mode == RelocInfo::CELL) { | 862 } else if (mode == RelocInfo::CELL) { |
881 visitor->VisitCell(this); | 863 visitor->VisitCell(this); |
882 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { | 864 } else if (mode == RelocInfo::EXTERNAL_REFERENCE) { |
883 visitor->VisitExternalReference(this); | 865 visitor->VisitExternalReference(this); |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1256 | 1238 |
1257 void Assembler::ClearRecordedAstId() { | 1239 void Assembler::ClearRecordedAstId() { |
1258 recorded_ast_id_ = TypeFeedbackId::None(); | 1240 recorded_ast_id_ = TypeFeedbackId::None(); |
1259 } | 1241 } |
1260 | 1242 |
1261 | 1243 |
1262 } // namespace internal | 1244 } // namespace internal |
1263 } // namespace v8 | 1245 } // namespace v8 |
1264 | 1246 |
1265 #endif // V8_ARM64_ASSEMBLER_ARM64_INL_H_ | 1247 #endif // V8_ARM64_ASSEMBLER_ARM64_INL_H_ |
OLD | NEW |