| Index: src/disasm-ia32.cc
|
| ===================================================================
|
| --- src/disasm-ia32.cc (revision 280)
|
| +++ src/disasm-ia32.cc (working copy)
|
| @@ -233,11 +233,11 @@
|
|
|
| // Writes one disassembled instruction into 'buffer' (0-terminated).
|
| // Returns the length of the disassembled machine instruction in bytes.
|
| - int InstructionDecode(char* buffer, const int buffer_size, byte* instruction);
|
| + int InstructionDecode(v8::internal::Vector<char> buffer, byte* instruction);
|
|
|
| private:
|
| const NameConverter& converter_;
|
| - char tmp_buffer_[128];
|
| + v8::internal::EmbeddedVector<char, 128> tmp_buffer_;
|
| unsigned int tmp_buffer_pos_;
|
| bool abort_on_unimplemented_;
|
|
|
| @@ -307,15 +307,10 @@
|
|
|
|
|
| void DisassemblerIA32::AppendToBuffer(const char* format, ...) {
|
| - char* str = tmp_buffer_ + tmp_buffer_pos_;
|
| - int size = (sizeof tmp_buffer_) - tmp_buffer_pos_;
|
| + v8::internal::Vector<char> buf = tmp_buffer_ + tmp_buffer_pos_;
|
| va_list args;
|
| va_start(args, format);
|
| -#ifdef WIN32
|
| - int result = _vsnprintf(str, size, format, args);
|
| -#else
|
| - int result = vsnprintf(str, size, format, args);
|
| -#endif
|
| + int result = v8::internal::OS::VSNPrintF(buf, format, args);
|
| va_end(args);
|
| tmp_buffer_pos_ += result;
|
| }
|
| @@ -706,8 +701,7 @@
|
|
|
|
|
| // Disassembled instruction '*instr' and writes it intro 'out_buffer'.
|
| -int DisassemblerIA32::InstructionDecode(char* out_buffer,
|
| - const int out_buffer_size,
|
| +int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer,
|
| byte* instr) {
|
| tmp_buffer_pos_ = 0; // starting to write as position 0
|
| byte* data = instr;
|
| @@ -1040,20 +1034,17 @@
|
| // Instruction bytes.
|
| for (byte* bp = instr; bp < data; bp++) {
|
| outp += v8::internal::OS::SNPrintF(out_buffer + outp,
|
| - out_buffer_size - outp,
|
| "%02x",
|
| *bp);
|
| }
|
| for (int i = 6 - instr_len; i >= 0; i--) {
|
| outp += v8::internal::OS::SNPrintF(out_buffer + outp,
|
| - out_buffer_size - outp,
|
| " ");
|
| }
|
|
|
| outp += v8::internal::OS::SNPrintF(out_buffer + outp,
|
| - out_buffer_size - outp,
|
| " %s",
|
| - tmp_buffer_);
|
| + tmp_buffer_.start());
|
| return instr_len;
|
| }
|
|
|
| @@ -1072,13 +1063,9 @@
|
|
|
|
|
| const char* NameConverter::NameOfAddress(byte* addr) const {
|
| - static char tmp_buffer[32];
|
| -#ifdef WIN32
|
| - _snprintf(tmp_buffer, sizeof tmp_buffer, "%p", addr);
|
| -#else
|
| - snprintf(tmp_buffer, sizeof tmp_buffer, "%p", addr);
|
| -#endif
|
| - return tmp_buffer;
|
| + v8::internal::EmbeddedVector<char, 32> tmp_buffer;
|
| + v8::internal::OS::SNPrintF(tmp_buffer, "%p", addr);
|
| + return tmp_buffer.start();
|
| }
|
|
|
|
|
| @@ -1120,11 +1107,10 @@
|
| Disassembler::~Disassembler() {}
|
|
|
|
|
| -int Disassembler::InstructionDecode(char* buffer,
|
| - const int buffer_size,
|
| +int Disassembler::InstructionDecode(v8::internal::Vector<char> buffer,
|
| byte* instruction) {
|
| DisassemblerIA32 d(converter_, false /*do not crash if unimplemented*/);
|
| - return d.InstructionDecode(buffer, buffer_size, instruction);
|
| + return d.InstructionDecode(buffer, instruction);
|
| }
|
|
|
|
|
| @@ -1135,10 +1121,10 @@
|
| /*static*/ void Disassembler::Disassemble(FILE* f, byte* begin, byte* end) {
|
| Disassembler d;
|
| for (byte* pc = begin; pc < end;) {
|
| - char buffer[128];
|
| + v8::internal::EmbeddedVector<char, 128> buffer;
|
| buffer[0] = '\0';
|
| byte* prev_pc = pc;
|
| - pc += d.InstructionDecode(buffer, sizeof buffer, pc);
|
| + pc += d.InstructionDecode(buffer, pc);
|
| fprintf(f, "%p", prev_pc);
|
| fprintf(f, " ");
|
|
|
| @@ -1148,7 +1134,7 @@
|
| for (int i = 6 - (pc - prev_pc); i >= 0; i--) {
|
| fprintf(f, " ");
|
| }
|
| - fprintf(f, " %s\n", buffer);
|
| + fprintf(f, " %s\n", buffer.start());
|
| }
|
| }
|
|
|
|
|