How to dump jit code and its corresponding bytecode.

62 views
Skip to first unread message

Yuan Pinghai

unread,
Jun 2, 2017, 2:07:50 AM6/2/17
to v8-users
I want to dump each piece of dynamically generated code. Meanwhile, if its corresponding bytecode is available, I also dump the bytecode and record the starting line number of the script code (i.e. recording the script name and the line number). For this purpose, i inserted code snippets in functions which would invoke "factory->NewCode". The following code is what i inserted into "CodeGenerator::GenerateCode()". However, my code can only successfully dump jit'ed code, but cannot dump bytecodes and record the script information. How can I solve this problem? Thanks!

Bye the way, i am working on Version 6.0.99, the latest commit is 71c1795aea7573672dd264568357c0f49afc7321.

--- a/src/compiler/code-generator.cc
+++ b/src/compiler/code-generator.cc
@@ -256,7 +256,34 @@ Handle<Code> CodeGenerator::GenerateCode() {
   if (info->ShouldEnsureSpaceForLazyDeopt()) {
     Deoptimizer::EnsureRelocSpaceForLazyDeoptimization(result);
   }
-
+       //dump_jit_code(code, info);
+
+       byte* nvstart = code->instruction_start();
+       //code->instruction_size();
+       int nvlen = code->body_size();
+
+       int type = 0;
+       if (code->is_crankshafted())
+               type += (1 << 0);
+       if (code->is_turbofanned())
+               type += (1 << 1);
+
+       printf("%p, %i, %i \n", nvstart, nvlen, type);
+
+       std::unique_ptr<char[]> debug_name = info->GetDebugName();
+       OFStream os(stdout);
+       os << debug_name.get()<< std::endl;
+
+       if (info->has_bytecode_array()){
+           Handle<BytecodeArray>  bytecodes = info->bytecode_array();
+           bytecodes->Print(os);
+       }
+      
+       Handle<Script> jsscript = info->GetScript();
+       std::unique_ptr<char[]> jsscript_name jsscript->name();
+       ByteArray ba = code->source_position_table();
+       script->GetLineNumber(ba[0]);
+   
+   
   return result;
 }

Jakob Kummerow

unread,
Jun 2, 2017, 6:46:18 AM6/2/17
to v8-users
Look at the existing flags FLAG_print_opt_code and FLAG_print_bytecode, their implementations should help you figure out how to do this.

--
--
v8-users mailing list
v8-u...@googlegroups.com
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups "v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages