summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-03-04 21:12:27 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-04 21:12:27 +0000
commitc670efd6ba9dbd1166bfd8c805bb6b2df7d4313a (patch)
treed112f34d4926e9b6fc3adf9504303fdddb22b7d3
parent029113f1013e2ce9027ea241a68f93072ce1bfe9 (diff)
parent7b2f09eb6b5c74ffc38bd70f0aa74b8f8112e394 (diff)
downloadandroid_art-c670efd6ba9dbd1166bfd8c805bb6b2df7d4313a.tar.gz
android_art-c670efd6ba9dbd1166bfd8c805bb6b2df7d4313a.tar.bz2
android_art-c670efd6ba9dbd1166bfd8c805bb6b2df7d4313a.zip
Merge "ART: Add debuggable compiler flag"
-rw-r--r--compiler/driver/compiler_options.cc3
-rw-r--r--compiler/driver/compiler_options.h6
-rw-r--r--compiler/jit/jit_compiler.cc1
-rw-r--r--dex2oat/dex2oat.cc8
-rw-r--r--runtime/runtime.cc4
5 files changed, 22 insertions, 0 deletions
diff --git a/compiler/driver/compiler_options.cc b/compiler/driver/compiler_options.cc
index 09ec9a2973..067e1bd7d6 100644
--- a/compiler/driver/compiler_options.cc
+++ b/compiler/driver/compiler_options.cc
@@ -30,6 +30,7 @@ CompilerOptions::CompilerOptions()
generate_gdb_information_(false),
include_patch_information_(kDefaultIncludePatchInformation),
top_k_profile_threshold_(kDefaultTopKProfileThreshold),
+ debuggable_(false),
include_debug_symbols_(kDefaultIncludeDebugSymbols),
implicit_null_checks_(true),
implicit_so_checks_(true),
@@ -49,6 +50,7 @@ CompilerOptions::CompilerOptions(CompilerFilter compiler_filter,
bool generate_gdb_information,
bool include_patch_information,
double top_k_profile_threshold,
+ bool debuggable,
bool include_debug_symbols,
bool implicit_null_checks,
bool implicit_so_checks,
@@ -67,6 +69,7 @@ CompilerOptions::CompilerOptions(CompilerFilter compiler_filter,
generate_gdb_information_(generate_gdb_information),
include_patch_information_(include_patch_information),
top_k_profile_threshold_(top_k_profile_threshold),
+ debuggable_(debuggable),
include_debug_symbols_(include_debug_symbols),
implicit_null_checks_(implicit_null_checks),
implicit_so_checks_(implicit_so_checks),
diff --git a/compiler/driver/compiler_options.h b/compiler/driver/compiler_options.h
index 0683d185e6..fecc600d64 100644
--- a/compiler/driver/compiler_options.h
+++ b/compiler/driver/compiler_options.h
@@ -62,6 +62,7 @@ class CompilerOptions FINAL {
bool generate_gdb_information,
bool include_patch_information,
double top_k_profile_threshold,
+ bool debuggable,
bool include_debug_symbols,
bool implicit_null_checks,
bool implicit_so_checks,
@@ -128,6 +129,10 @@ class CompilerOptions FINAL {
return top_k_profile_threshold_;
}
+ bool GetDebuggable() const {
+ return debuggable_;
+ }
+
bool GetIncludeDebugSymbols() const {
return include_debug_symbols_;
}
@@ -189,6 +194,7 @@ class CompilerOptions FINAL {
const bool include_patch_information_;
// When using a profile file only the top K% of the profiled samples will be compiled.
const double top_k_profile_threshold_;
+ const bool debuggable_;
const bool include_debug_symbols_;
const bool implicit_null_checks_;
const bool implicit_so_checks_;
diff --git a/compiler/jit/jit_compiler.cc b/compiler/jit/jit_compiler.cc
index 0283791e28..ff98d4af23 100644
--- a/compiler/jit/jit_compiler.cc
+++ b/compiler/jit/jit_compiler.cc
@@ -72,6 +72,7 @@ JitCompiler::JitCompiler() : total_time_(0) {
false,
false,
CompilerOptions::kDefaultTopKProfileThreshold,
+ false, // TODO: Think about debuggability of JIT-compiled code.
false,
false,
false,
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc
index df7bb57f24..c080453dea 100644
--- a/dex2oat/dex2oat.cc
+++ b/dex2oat/dex2oat.cc
@@ -487,6 +487,7 @@ class Dex2Oat FINAL {
// Profile file to use
double top_k_profile_threshold = CompilerOptions::kDefaultTopKProfileThreshold;
+ bool debuggable = false;
bool include_patch_information = CompilerOptions::kDefaultIncludePatchInformation;
bool include_debug_symbols = kIsDebugBuild;
bool watch_dog_enabled = true;
@@ -675,6 +676,8 @@ class Dex2Oat FINAL {
} else if (option == "--no-include-debug-symbols" || option == "--strip-symbols") {
include_debug_symbols = false;
generate_gdb_information = false; // Depends on debug symbols, see above.
+ } else if (option == "--debuggable") {
+ debuggable = true;
} else if (option.starts_with("--profile-file=")) {
profile_file_ = option.substr(strlen("--profile-file=")).data();
VLOG(compiler) << "dex2oat: profile file is " << profile_file_;
@@ -915,6 +918,10 @@ class Dex2Oat FINAL {
break;
}
+ if (debuggable) {
+ // TODO: Consider adding CFI info and symbols here.
+ }
+
compiler_options_.reset(new CompilerOptions(compiler_filter,
huge_method_threshold,
large_method_threshold,
@@ -924,6 +931,7 @@ class Dex2Oat FINAL {
generate_gdb_information,
include_patch_information,
top_k_profile_threshold,
+ debuggable,
include_debug_symbols,
implicit_null_checks,
implicit_so_checks,
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 383308cf9e..6d9f20e147 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1674,6 +1674,10 @@ void Runtime::AddCurrentRuntimeFeaturesAsDex2OatArguments(std::vector<std::strin
std::string feature_string("--instruction-set-features=");
feature_string += features->GetFeatureString();
argv->push_back(feature_string);
+
+ if (Dbg::IsJdwpConfigured()) {
+ argv->push_back("--debuggable");
+ }
}
void Runtime::UpdateProfilerState(int state) {