Files
sdk/runtime/vm/debugger_mips.cc
T
Florian Schneider e0621416f8 Remove unused pc descriptor types.
kClosureCall and kOptStaticCall are not needed anymore.
Closure calls are implemented as instance calls - the ClosureCall instruction
 only occurs in the synthetic FunctionImpl.call dispatcher - and does not correspond
to a source location where breakpoints can be set.

kOptStaticCall is not needed because breakpoints can only be set in unoptimized
code. kOther is used instead.

This also removes an unused PC descriptor at closure calls from unoptimized
code.

BUG=
R=vegorov@google.com

Review URL: https://codereview.chromium.org//1160063002
2015-05-28 14:27:37 +02:00

62 lines
1.6 KiB
C++

// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "vm/globals.h"
#if defined(TARGET_ARCH_MIPS)
#include "vm/code_patcher.h"
#include "vm/cpu.h"
#include "vm/debugger.h"
#include "vm/instructions.h"
#include "vm/stub_code.h"
namespace dart {
uword CodeBreakpoint::OrigStubAddress() const {
return saved_value_;
}
void CodeBreakpoint::PatchCode() {
ASSERT(!is_enabled_);
StubCode* stub_code = Isolate::Current()->stub_code();
uword stub_target = 0;
switch (breakpoint_kind_) {
case RawPcDescriptors::kIcCall:
case RawPcDescriptors::kUnoptStaticCall:
stub_target = stub_code->ICCallBreakpointEntryPoint();
break;
case RawPcDescriptors::kRuntimeCall:
stub_target = stub_code->RuntimeCallBreakpointEntryPoint();
break;
default:
UNREACHABLE();
}
const Code& code = Code::Handle(code_);
saved_value_ = CodePatcher::GetStaticCallTargetAt(pc_, code);
CodePatcher::PatchStaticCallAt(pc_, code, stub_target);
is_enabled_ = true;
}
void CodeBreakpoint::RestoreCode() {
ASSERT(is_enabled_);
const Code& code = Code::Handle(code_);
switch (breakpoint_kind_) {
case RawPcDescriptors::kIcCall:
case RawPcDescriptors::kUnoptStaticCall:
case RawPcDescriptors::kRuntimeCall: {
CodePatcher::PatchStaticCallAt(pc_, code, saved_value_);
break;
}
default:
UNREACHABLE();
}
is_enabled_ = false;
}
} // namespace dart
#endif // defined TARGET_ARCH_MIPS