| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 94e8773a165fbc6ae9d9a967ac0b93cb785dbf3d..4d994964d3e378b03d1a50988c4c2764f7a96d2e 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);
|
| }
|
|
|
|
|
|
|