diff options
author | 2018-02-16 10:22:33 -0800 | |
---|---|---|
committer | 2018-02-16 14:45:23 -0800 | |
commit | 999646d7f3b2ced25a995c020d19a55caf3c18d5 (patch) | |
tree | 870d9d5d33bca66f4891f66a0b53505508ebe009 | |
parent | 0694a5527862fc76056458622759976fa41d4da6 (diff) |
Dex header cleanup and windows simplification
Remove a few unnecessary inclusions, move one missed header to
libdexfile. Also use android-base utilities for file loading in
dexdump2 and dexlist. (The utilities seem to work on Windows, where
mmap did not.)
Bug: 22322814
Test: make -j 50 test-art-host-gtest
Change-Id: I6e6de1895921f664a2280451b01e367649436200
-rw-r--r-- | dexdump/dexdump.cc | 54 | ||||
-rw-r--r-- | dexlist/dexlist.cc | 53 | ||||
-rw-r--r-- | libdexfile/dex/base64_test_util.h | 3 | ||||
-rw-r--r-- | libdexfile/dex/compact_dex_debug_info_test.cc | 4 | ||||
-rw-r--r-- | libdexfile/dex/compact_dex_level.h | 1 | ||||
-rw-r--r-- | libdexfile/dex/dex_cache_resolved_classes.h (renamed from runtime/dex_cache_resolved_classes.h) | 6 | ||||
-rw-r--r-- | libdexfile/dex/dex_file-inl.h | 1 | ||||
-rw-r--r-- | runtime/class_linker.h | 2 | ||||
-rw-r--r-- | runtime/jit/profile_compilation_info.h | 2 |
9 files changed, 35 insertions, 91 deletions
diff --git a/dexdump/dexdump.cc b/dexdump/dexdump.cc index 8778b129c5..61a1209ed1 100644 --- a/dexdump/dexdump.cc +++ b/dexdump/dexdump.cc @@ -34,19 +34,14 @@ #include "dexdump.h" -#include <fcntl.h> #include <inttypes.h> #include <stdio.h> -#include <sys/mman.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <iostream> #include <memory> #include <sstream> #include <vector> +#include "android-base/file.h" #include "android-base/logging.h" #include "android-base/stringprintf.h" @@ -1879,34 +1874,6 @@ static void processDexFile(const char* fileName, } } -static bool openAndMapFile(const char* fileName, - const uint8_t** base, - size_t* size, - std::string* error_msg) { - int fd = open(fileName, O_RDONLY); - if (fd < 0) { - *error_msg = "open failed"; - return false; - } - struct stat st; - if (fstat(fd, &st) < 0) { - *error_msg = "stat failed"; - return false; - } - *size = st.st_size; - if (*size == 0) { - *error_msg = "size == 0"; - return false; - } - void* addr = mmap(nullptr /*addr*/, *size, PROT_READ, MAP_PRIVATE, fd, 0 /*offset*/); - if (addr == MAP_FAILED) { - *error_msg = "mmap failed"; - return false; - } - *base = reinterpret_cast<const uint8_t*>(addr); - return true; -} - /* * Processes a single file (either direct .dex or indirect .zip/.jar/.apk). */ @@ -1918,17 +1885,22 @@ int processFile(const char* fileName) { // If the file is not a .dex file, the function tries .zip/.jar/.apk files, // all of which are Zip archives with "classes.dex" inside. const bool kVerifyChecksum = !gOptions.ignoreBadChecksum; - const uint8_t* base = nullptr; - size_t size = 0; - std::string error_msg; - if (!openAndMapFile(fileName, &base, &size, &error_msg)) { - LOG(ERROR) << error_msg; + std::string content; + // TODO: add an api to android::base to read a std::vector<uint8_t>. + if (!android::base::ReadFileToString(fileName, &content)) { + LOG(ERROR) << "ReadFileToString failed"; return -1; } const DexFileLoader dex_file_loader; + std::string error_msg; std::vector<std::unique_ptr<const DexFile>> dex_files; - if (!dex_file_loader.OpenAll( - base, size, fileName, /*verify*/ true, kVerifyChecksum, &error_msg, &dex_files)) { + if (!dex_file_loader.OpenAll(reinterpret_cast<const uint8_t*>(content.data()), + content.size(), + fileName, + /*verify*/ true, + kVerifyChecksum, + &error_msg, + &dex_files)) { // Display returned error message to user. Note that this error behavior // differs from the error messages shown by the original Dalvik dexdump. LOG(ERROR) << error_msg; diff --git a/dexlist/dexlist.cc b/dexlist/dexlist.cc index 31a146d90e..6a50258570 100644 --- a/dexlist/dexlist.cc +++ b/dexlist/dexlist.cc @@ -23,15 +23,11 @@ * List all methods in all concrete classes in one or more DEX files. */ -#include <fcntl.h> #include <inttypes.h> #include <stdio.h> #include <stdlib.h> -#include <sys/mman.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> +#include <android-base/file.h> #include <android-base/logging.h> #include "dex/code_item_accessors-inl.h" @@ -170,34 +166,6 @@ void dumpClass(const DexFile* pDexFile, u4 idx) { } } -static bool openAndMapFile(const char* fileName, - const uint8_t** base, - size_t* size, - std::string* error_msg) { - int fd = open(fileName, O_RDONLY); - if (fd < 0) { - *error_msg = "open failed"; - return false; - } - struct stat st; - if (fstat(fd, &st) < 0) { - *error_msg = "stat failed"; - return false; - } - *size = st.st_size; - if (*size == 0) { - *error_msg = "size == 0"; - return false; - } - void* addr = mmap(nullptr /*addr*/, *size, PROT_READ, MAP_PRIVATE, fd, 0 /*offset*/); - if (addr == MAP_FAILED) { - *error_msg = "mmap failed"; - return false; - } - *base = reinterpret_cast<const uint8_t*>(addr); - return true; -} - /* * Processes a single file (either direct .dex or indirect .zip/.jar/.apk). */ @@ -205,17 +173,22 @@ static int processFile(const char* fileName) { // If the file is not a .dex file, the function tries .zip/.jar/.apk files, // all of which are Zip archives with "classes.dex" inside. static constexpr bool kVerifyChecksum = true; - const uint8_t* base = nullptr; - size_t size = 0; - std::string error_msg; - if (!openAndMapFile(fileName, &base, &size, &error_msg)) { - LOG(ERROR) << error_msg; + std::string content; + // TODO: add an api to android::base to read a std::vector<uint8_t>. + if (!android::base::ReadFileToString(fileName, &content)) { + LOG(ERROR) << "ReadFileToString failed"; return -1; } std::vector<std::unique_ptr<const DexFile>> dex_files; + std::string error_msg; const DexFileLoader dex_file_loader; - if (!dex_file_loader.OpenAll( - base, size, fileName, /*verify*/ true, kVerifyChecksum, &error_msg, &dex_files)) { + if (!dex_file_loader.OpenAll(reinterpret_cast<const uint8_t*>(content.data()), + content.size(), + fileName, + /*verify*/ true, + kVerifyChecksum, + &error_msg, + &dex_files)) { LOG(ERROR) << error_msg; return -1; } diff --git a/libdexfile/dex/base64_test_util.h b/libdexfile/dex/base64_test_util.h index 683e429e11..5d73759af3 100644 --- a/libdexfile/dex/base64_test_util.h +++ b/libdexfile/dex/base64_test_util.h @@ -17,13 +17,14 @@ #ifndef ART_LIBDEXFILE_DEX_BASE64_TEST_UTIL_H_ #define ART_LIBDEXFILE_DEX_BASE64_TEST_UTIL_H_ -#include <base/logging.h> #include <stdint.h> #include <stdlib.h> #include <memory> #include <vector> +#include <android-base/logging.h> + namespace art { static inline uint8_t* DecodeBase64(const char* src, size_t* dst_size) { diff --git a/libdexfile/dex/compact_dex_debug_info_test.cc b/libdexfile/dex/compact_dex_debug_info_test.cc index 3267612443..7911a86539 100644 --- a/libdexfile/dex/compact_dex_debug_info_test.cc +++ b/libdexfile/dex/compact_dex_debug_info_test.cc @@ -16,7 +16,7 @@ #include <vector> -#include "base/logging.h" +#include <android-base/logging.h> #include "dex/compact_dex_debug_info.h" #include "gtest/gtest.h" @@ -74,7 +74,7 @@ TEST(CompactDexDebugInfoTest, TestBuildAndAccess) { /*out*/ &table_offset); EXPECT_LT(sorted_data.size(), data.size()); { - ScopedLogSeverity sls(LogSeverity::INFO); + android::base::ScopedLogSeverity sls(android::base::LogSeverity::INFO); LOG(INFO) << "raw size " << before_size << " table size " << data.size() << " sorted table size " << sorted_data.size(); diff --git a/libdexfile/dex/compact_dex_level.h b/libdexfile/dex/compact_dex_level.h index 2325ac2cae..599ec4db19 100644 --- a/libdexfile/dex/compact_dex_level.h +++ b/libdexfile/dex/compact_dex_level.h @@ -19,7 +19,6 @@ #include <string> -#include "base/macros.h" #include "dex_file.h" namespace art { diff --git a/runtime/dex_cache_resolved_classes.h b/libdexfile/dex/dex_cache_resolved_classes.h index ca6afc5b92..4c9acbf118 100644 --- a/runtime/dex_cache_resolved_classes.h +++ b/libdexfile/dex/dex_cache_resolved_classes.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ART_RUNTIME_DEX_CACHE_RESOLVED_CLASSES_H_ -#define ART_RUNTIME_DEX_CACHE_RESOLVED_CLASSES_H_ +#ifndef ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_ +#define ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_ #include <string> #include <unordered_set> @@ -90,4 +90,4 @@ inline bool operator<(const DexCacheResolvedClasses& a, const DexCacheResolvedCl } // namespace art -#endif // ART_RUNTIME_DEX_CACHE_RESOLVED_CLASSES_H_ +#endif // ART_LIBDEXFILE_DEX_DEX_CACHE_RESOLVED_CLASSES_H_ diff --git a/libdexfile/dex/dex_file-inl.h b/libdexfile/dex/dex_file-inl.h index b424b50f21..c86e879a76 100644 --- a/libdexfile/dex/dex_file-inl.h +++ b/libdexfile/dex/dex_file-inl.h @@ -17,7 +17,6 @@ #ifndef ART_LIBDEXFILE_DEX_DEX_FILE_INL_H_ #define ART_LIBDEXFILE_DEX_DEX_FILE_INL_H_ -#include "base/bit_utils.h" #include "base/casts.h" #include "base/stringpiece.h" #include "compact_dex_file.h" diff --git a/runtime/class_linker.h b/runtime/class_linker.h index 6bb924fc7d..712e3aeffa 100644 --- a/runtime/class_linker.h +++ b/runtime/class_linker.h @@ -27,9 +27,9 @@ #include "base/enums.h" #include "base/macros.h" #include "base/mutex.h" +#include "dex/dex_cache_resolved_classes.h" #include "dex/dex_file.h" #include "dex/dex_file_types.h" -#include "dex_cache_resolved_classes.h" #include "gc_root.h" #include "handle.h" #include "jni.h" diff --git a/runtime/jit/profile_compilation_info.h b/runtime/jit/profile_compilation_info.h index 5488a9e81e..3213c85156 100644 --- a/runtime/jit/profile_compilation_info.h +++ b/runtime/jit/profile_compilation_info.h @@ -24,7 +24,7 @@ #include "base/arena_containers.h" #include "base/arena_object.h" #include "bit_memory_region.h" -#include "dex_cache_resolved_classes.h" +#include "dex/dex_cache_resolved_classes.h" #include "dex/dex_file.h" #include "dex/dex_file_types.h" #include "method_reference.h" |