diff options
author | Dave Allison <dallison@google.com> | 2014-02-24 11:10:01 -0800 |
---|---|---|
committer | Dave Allison <dallison@google.com> | 2014-02-24 11:23:46 -0800 |
commit | 404f59f4125ec9935ad8cffac56ab99d6320b17b (patch) | |
tree | 8a6bd62cb07ace7ff3a9d3e84aa6b1ebb4a91034 /oatdump | |
parent | 553e30c53423459bef6840a3e358199b1ae2db58 (diff) | |
download | art-404f59f4125ec9935ad8cffac56ab99d6320b17b.zip art-404f59f4125ec9935ad8cffac56ab99d6320b17b.tar.gz art-404f59f4125ec9935ad8cffac56ab99d6320b17b.tar.bz2 |
Adds 2 new option args to oatdump:
--dump:raw_mapping_table
--dump:raw_gc_map
Change-Id: Ic4af5ae5714329da616240abbe64b137ed67d221
Diffstat (limited to 'oatdump')
-rw-r--r-- | oatdump/oatdump.cc | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/oatdump/oatdump.cc b/oatdump/oatdump.cc index 2a0d826..0d9b991 100644 --- a/oatdump/oatdump.cc +++ b/oatdump/oatdump.cc @@ -83,6 +83,11 @@ static void usage() { " --output=<file> may be used to send the output to a file.\n" " Example: --output=/tmp/oatdump.txt\n" "\n"); + fprintf(stderr, + " --dump:[raw_mapping_table|raw_gc_map]\n" + " Example: --dump:raw_gc_map\n" + " Default: neither\n" + "\n"); exit(EXIT_FAILURE); } @@ -100,10 +105,12 @@ const char* image_roots_descriptions_[] = { class OatDumper { public: - explicit OatDumper(const std::string& host_prefix, const OatFile& oat_file) + explicit OatDumper(const std::string& host_prefix, const OatFile& oat_file, bool dump_raw_mapping_table, bool dump_raw_gc_map) : host_prefix_(host_prefix), oat_file_(oat_file), oat_dex_files_(oat_file.GetOatDexFiles()), + dump_raw_mapping_table_(dump_raw_mapping_table), + dump_raw_gc_map_(dump_raw_gc_map), disassembler_(Disassembler::Create(oat_file_.GetOatHeader().GetInstructionSet())) { AddAllOffsets(); } @@ -358,16 +365,14 @@ class OatDumper { DumpVmap(indent2_os, oat_method); indent2_os << StringPrintf("mapping_table: %p (offset=0x%08x)\n", oat_method.GetMappingTable(), oat_method.GetMappingTableOffset()); - const bool kDumpRawMappingTable = false; - if (kDumpRawMappingTable) { + if (dump_raw_mapping_table_) { Indenter indent3_filter(indent2_os.rdbuf(), kIndentChar, kIndentBy1Count); std::ostream indent3_os(&indent3_filter); DumpMappingTable(indent3_os, oat_method); } indent2_os << StringPrintf("gc_map: %p (offset=0x%08x)\n", oat_method.GetNativeGcMap(), oat_method.GetNativeGcMapOffset()); - const bool kDumpRawGcMap = false; - if (kDumpRawGcMap) { + if (dump_raw_gc_map_) { Indenter indent3_filter(indent2_os.rdbuf(), kIndentChar, kIndentBy1Count); std::ostream indent3_os(&indent3_filter); DumpGcMap(indent3_os, oat_method, code_item); @@ -699,6 +704,8 @@ class OatDumper { const std::string host_prefix_; const OatFile& oat_file_; std::vector<const OatFile::OatDexFile*> oat_dex_files_; + bool dump_raw_mapping_table_; + bool dump_raw_gc_map_; std::set<uintptr_t> offsets_; UniquePtr<Disassembler> disassembler_; }; @@ -707,9 +714,12 @@ class ImageDumper { public: explicit ImageDumper(std::ostream* os, const std::string& image_filename, const std::string& host_prefix, gc::space::ImageSpace& image_space, - const ImageHeader& image_header) + const ImageHeader& image_header, bool dump_raw_mapping_table, + bool dump_raw_gc_map) : os_(os), image_filename_(image_filename), host_prefix_(host_prefix), - image_space_(image_space), image_header_(image_header) {} + image_space_(image_space), image_header_(image_header), + dump_raw_mapping_table_(dump_raw_mapping_table), + dump_raw_gc_map_(dump_raw_gc_map) {} void Dump() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { std::ostream& os = *os_; @@ -791,7 +801,8 @@ class ImageDumper { stats_.oat_file_bytes = oat_file->Size(); - oat_dumper_.reset(new OatDumper(host_prefix_, *oat_file)); + oat_dumper_.reset(new OatDumper(host_prefix_, *oat_file, dump_raw_mapping_table_, + dump_raw_gc_map_)); for (const OatFile::OatDexFile* oat_dex_file : oat_file->GetOatDexFiles()) { CHECK(oat_dex_file != NULL); @@ -1406,6 +1417,8 @@ class ImageDumper { const std::string host_prefix_; gc::space::ImageSpace& image_space_; const ImageHeader& image_header_; + bool dump_raw_mapping_table_; + bool dump_raw_gc_map_; DISALLOW_COPY_AND_ASSIGN(ImageDumper); }; @@ -1429,6 +1442,8 @@ static int oatdump(int argc, char** argv) { UniquePtr<std::string> host_prefix; std::ostream* os = &std::cout; UniquePtr<std::ofstream> out; + bool dump_raw_mapping_table = false; + bool dump_raw_gc_map = false; for (int i = 0; i < argc; i++) { const StringPiece option(argv[i]); @@ -1440,6 +1455,15 @@ static int oatdump(int argc, char** argv) { boot_image_filename = option.substr(strlen("--boot-image=")).data(); } else if (option.starts_with("--host-prefix=")) { host_prefix.reset(new std::string(option.substr(strlen("--host-prefix=")).data())); + } else if (option.starts_with("--dump:")) { + if (option == "--dump:raw_mapping_table") { + dump_raw_mapping_table = true; + } else if (option == "--dump:raw_gc_map") { + dump_raw_gc_map = true; + } else { + fprintf(stderr, "Unknown argument %s\n", option.data()); + usage(); + } } else if (option.starts_with("--output=")) { const char* filename = option.substr(strlen("--output=")).data(); out.reset(new std::ofstream(filename)); @@ -1481,7 +1505,7 @@ static int oatdump(int argc, char** argv) { fprintf(stderr, "Failed to open oat file from '%s': %s\n", oat_filename, error_msg.c_str()); return EXIT_FAILURE; } - OatDumper oat_dumper(*host_prefix.get(), *oat_file); + OatDumper oat_dumper(*host_prefix.get(), *oat_file, dump_raw_mapping_table, dump_raw_gc_map); oat_dumper.Dump(*os); return EXIT_SUCCESS; } @@ -1533,7 +1557,8 @@ static int oatdump(int argc, char** argv) { fprintf(stderr, "Invalid image header %s\n", image_filename); return EXIT_FAILURE; } - ImageDumper image_dumper(os, image_filename, *host_prefix.get(), *image_space, image_header); + ImageDumper image_dumper(os, image_filename, *host_prefix.get(), *image_space, image_header, + dump_raw_mapping_table, dump_raw_gc_map); image_dumper.Dump(); return EXIT_SUCCESS; } |