Chromium Code Reviews| Index: src/ic.cc |
| diff --git a/src/ic.cc b/src/ic.cc |
| index ea0c1fbbe1d70438ee2983ee0d682ef5d3700f24..b928aa85025b694ffd1880026ec9471e323978f4 100644 |
| --- a/src/ic.cc |
| +++ b/src/ic.cc |
| @@ -39,6 +39,21 @@ |
| namespace v8 { |
| namespace internal { |
| + |
| +// Resolves pc_address through the resolution address function if one is set. |
| +static inline Address* ResolveReturnAddressLocation(Address* pc_address) { |
| + extern ReturnAddressLocationResolver return_address_location_resolver; |
| + |
| + if (return_address_location_resolver == NULL) { |
| + return pc_address; |
| + } else { |
| + return reinterpret_cast<Address*>( |
| + return_address_location_resolver( |
| + reinterpret_cast<uintptr_t>(pc_address))); |
| + } |
| +} |
| + |
| + |
| #ifdef DEBUG |
| char IC::TransitionMarkFromState(IC::State state) { |
| switch (state) { |
| @@ -144,7 +159,7 @@ IC::IC(FrameDepth depth, Isolate* isolate) : isolate_(isolate) { |
| ASSERT(fp == frame->fp() && pc_address == frame->pc_address()); |
| #endif |
| fp_ = fp; |
| - pc_address_ = pc_address; |
| + pc_address_ = ResolveReturnAddressLocation(pc_address); |
|
danno
2013/06/11 11:33:14
The comment above about the performance sensitivit
|
| } |