diff options
Diffstat (limited to 'chromium/v8/src/disassembler.cc')
-rw-r--r-- | chromium/v8/src/disassembler.cc | 85 |
1 files changed, 30 insertions, 55 deletions
diff --git a/chromium/v8/src/disassembler.cc b/chromium/v8/src/disassembler.cc index 69737ed89f8..f1c28e8199f 100644 --- a/chromium/v8/src/disassembler.cc +++ b/chromium/v8/src/disassembler.cc @@ -1,41 +1,18 @@ // Copyright 2011 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "v8.h" - -#include "code-stubs.h" -#include "codegen.h" -#include "debug.h" -#include "deoptimizer.h" -#include "disasm.h" -#include "disassembler.h" -#include "macro-assembler.h" -#include "serialize.h" -#include "string-stream.h" +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/v8.h" + +#include "src/code-stubs.h" +#include "src/codegen.h" +#include "src/debug.h" +#include "src/deoptimizer.h" +#include "src/disasm.h" +#include "src/disassembler.h" +#include "src/macro-assembler.h" +#include "src/serialize.h" +#include "src/string-stream.h" namespace v8 { namespace internal { @@ -73,7 +50,7 @@ class V8NameConverter: public disasm::NameConverter { const char* V8NameConverter::NameOfAddress(byte* pc) const { const char* name = code_->GetIsolate()->builtins()->Lookup(pc); if (name != NULL) { - OS::SNPrintF(v8_buffer_, "%s (%p)", name, pc); + SNPrintF(v8_buffer_, "%s (%p)", name, pc); return v8_buffer_.start(); } @@ -81,7 +58,7 @@ const char* V8NameConverter::NameOfAddress(byte* pc) const { int offs = static_cast<int>(pc - code_->instruction_start()); // print as code offset, if it seems reasonable if (0 <= offs && offs < code_->instruction_size()) { - OS::SNPrintF(v8_buffer_, "%d (%p)", offs, pc); + SNPrintF(v8_buffer_, "%d (%p)", offs, pc); return v8_buffer_.start(); } } @@ -137,27 +114,27 @@ static int DecodeIt(Isolate* isolate, // First decode instruction so that we know its length. byte* prev_pc = pc; if (constants > 0) { - OS::SNPrintF(decode_buffer, - "%08x constant", - *reinterpret_cast<int32_t*>(pc)); + SNPrintF(decode_buffer, + "%08x constant", + *reinterpret_cast<int32_t*>(pc)); constants--; pc += 4; } else { int num_const = d.ConstantPoolSizeAt(pc); if (num_const >= 0) { - OS::SNPrintF(decode_buffer, - "%08x constant pool begin", - *reinterpret_cast<int32_t*>(pc)); + SNPrintF(decode_buffer, + "%08x constant pool begin", + *reinterpret_cast<int32_t*>(pc)); constants = num_const; pc += 4; } else if (it != NULL && !it->done() && it->rinfo()->pc() == pc && it->rinfo()->rmode() == RelocInfo::INTERNAL_REFERENCE) { // raw pointer embedded in code stream, e.g., jump table byte* ptr = *reinterpret_cast<byte**>(pc); - OS::SNPrintF(decode_buffer, - "%08" V8PRIxPTR " jump table entry %4" V8PRIdPTR, - ptr, - ptr - begin); + SNPrintF(decode_buffer, + "%08" V8PRIxPTR " jump table entry %4" V8PRIdPTR, + reinterpret_cast<intptr_t>(ptr), + ptr - begin); pc += 4; } else { decode_buffer[0] = '\0'; @@ -200,7 +177,7 @@ static int DecodeIt(Isolate* isolate, // Print all the reloc info for this instruction which are not comments. for (int i = 0; i < pcs.length(); i++) { // Put together the reloc info - RelocInfo relocinfo(pcs[i], rmodes[i], datas[i], NULL); + RelocInfo relocinfo(pcs[i], rmodes[i], datas[i], converter.code()); // Indent the printing of the reloc info. if (i == 0) { @@ -224,7 +201,7 @@ static int DecodeIt(Isolate* isolate, StringStream accumulator(&allocator); relocinfo.target_object()->ShortPrint(&accumulator); SmartArrayPointer<const char> obj_name = accumulator.ToCString(); - out.AddFormatted(" ;; object: %s", *obj_name); + out.AddFormatted(" ;; object: %s", obj_name.get()); } else if (rmode == RelocInfo::EXTERNAL_REFERENCE) { const char* reference_name = ref_encoder.NameOfAddress(relocinfo.target_reference()); @@ -237,7 +214,8 @@ static int DecodeIt(Isolate* isolate, Code* code = Code::GetCodeFromTargetAddress(relocinfo.target_address()); Code::Kind kind = code->kind(); if (code->is_inline_cache_stub()) { - if (rmode == RelocInfo::CODE_TARGET_CONTEXT) { + if (kind == Code::LOAD_IC && + LoadIC::GetContextualMode(code->extra_ic_state()) == CONTEXTUAL) { out.AddFormatted(" contextual,"); } InlineCacheState ic_state = code->ic_state(); @@ -247,9 +225,6 @@ static int DecodeIt(Isolate* isolate, Code::StubType type = code->type(); out.AddFormatted(", %s", Code::StubType2String(type)); } - if (kind == Code::CALL_IC || kind == Code::KEYED_CALL_IC) { - out.AddFormatted(", argc = %d", code->arguments_count()); - } } else if (kind == Code::STUB || kind == Code::HANDLER) { // Reverse lookup required as the minor key cannot be retrieved // from the code object. |