OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 4949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4960 // Convert relocatable targets from address to code object address. This is | 4960 // Convert relocatable targets from address to code object address. This is |
4961 // mainly IC call targets but for debugging straight-line code can be replaced | 4961 // mainly IC call targets but for debugging straight-line code can be replaced |
4962 // with a call instruction which also has to be relocated. | 4962 // with a call instruction which also has to be relocated. |
4963 void Code::ConvertICTargetsFromAddressToObject() { | 4963 void Code::ConvertICTargetsFromAddressToObject() { |
4964 ASSERT(ic_flag() == IC_TARGET_IS_ADDRESS); | 4964 ASSERT(ic_flag() == IC_TARGET_IS_ADDRESS); |
4965 | 4965 |
4966 for (RelocIterator it(this, RelocInfo::kCodeTargetMask); | 4966 for (RelocIterator it(this, RelocInfo::kCodeTargetMask); |
4967 !it.done(); it.next()) { | 4967 !it.done(); it.next()) { |
4968 Address ic_addr = it.rinfo()->target_address(); | 4968 Address ic_addr = it.rinfo()->target_address(); |
4969 ASSERT(ic_addr != NULL); | 4969 ASSERT(ic_addr != NULL); |
4970 HeapObject* code = HeapObject::FromAddress(ic_addr - Code::kHeaderSize); | 4970 HeapObject* code = Code::GetCodeFromTargetAddress(ic_addr); |
4971 ASSERT(code->IsHeapObject()); | 4971 ASSERT(code->IsHeapObject()); |
4972 it.rinfo()->set_target_object(code); | 4972 it.rinfo()->set_target_object(code); |
4973 } | 4973 } |
4974 | 4974 |
4975 #ifdef ENABLE_DEBUGGER_SUPPORT | 4975 #ifdef ENABLE_DEBUGGER_SUPPORT |
4976 if (Debug::has_break_points()) { | 4976 if (Debug::has_break_points()) { |
4977 for (RelocIterator it(this, RelocInfo::ModeMask(RelocInfo::JS_RETURN)); | 4977 for (RelocIterator it(this, RelocInfo::ModeMask(RelocInfo::JS_RETURN)); |
4978 !it.done(); | 4978 !it.done(); |
4979 it.next()) { | 4979 it.next()) { |
4980 if (it.rinfo()->IsCallInstruction()) { | 4980 if (it.rinfo()->IsCallInstruction()) { |
4981 Address addr = it.rinfo()->call_address(); | 4981 Address addr = it.rinfo()->call_address(); |
4982 ASSERT(addr != NULL); | 4982 ASSERT(addr != NULL); |
4983 HeapObject* code = HeapObject::FromAddress(addr - Code::kHeaderSize); | 4983 HeapObject* code = Code::GetCodeFromTargetAddress(addr); |
4984 ASSERT(code->IsHeapObject()); | 4984 ASSERT(code->IsHeapObject()); |
4985 it.rinfo()->set_call_object(code); | 4985 it.rinfo()->set_call_object(code); |
4986 } | 4986 } |
4987 } | 4987 } |
4988 } | 4988 } |
4989 #endif | 4989 #endif |
4990 set_ic_flag(IC_TARGET_IS_OBJECT); | 4990 set_ic_flag(IC_TARGET_IS_OBJECT); |
4991 } | 4991 } |
4992 | 4992 |
4993 | 4993 |
(...skipping 3021 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8015 if (break_point_objects()->IsUndefined()) return 0; | 8015 if (break_point_objects()->IsUndefined()) return 0; |
8016 // Single beak point. | 8016 // Single beak point. |
8017 if (!break_point_objects()->IsFixedArray()) return 1; | 8017 if (!break_point_objects()->IsFixedArray()) return 1; |
8018 // Multiple break points. | 8018 // Multiple break points. |
8019 return FixedArray::cast(break_point_objects())->length(); | 8019 return FixedArray::cast(break_point_objects())->length(); |
8020 } | 8020 } |
8021 #endif | 8021 #endif |
8022 | 8022 |
8023 | 8023 |
8024 } } // namespace v8::internal | 8024 } } // namespace v8::internal |
OLD | NEW |