Fix the offset of $dexfile debug symbol.
The symbol is currently unused but will be needed soon.
It is also more convenient if it is marked as STT_FUNC.
Test: testrunner.py --intepreter -t 137 (with other CLs)
Change-Id: I47bcbb498c47cd662eb85aaeb0363678e54d6471
diff --git a/compiler/debug/elf_symtab_writer.h b/compiler/debug/elf_symtab_writer.h
index 9007360..a853714 100644
--- a/compiler/debug/elf_symtab_writer.h
+++ b/compiler/debug/elf_symtab_writer.h
@@ -108,7 +108,7 @@
uint64_t dex_address = dex->GetAddress() + it.first /* offset within the section */;
const DexFile* dex_file = it.second;
typename ElfTypes::Word dex_name = strtab->Write(kDexFileSymbolName);
- symtab->Add(dex_name, dex, dex_address, dex_file->Size(), STB_LOCAL, STT_NOTYPE);
+ symtab->Add(dex_name, dex, dex_address, dex_file->Size(), STB_GLOBAL, STT_FUNC);
if (mini_debug_info) {
continue; // Don't add interpreter method names to mini-debug-info for now.
}
diff --git a/dex2oat/linker/oat_writer.cc b/dex2oat/linker/oat_writer.cc
index 4449328..849887c 100644
--- a/dex2oat/linker/oat_writer.cc
+++ b/dex2oat/linker/oat_writer.cc
@@ -4220,9 +4220,11 @@
debug::DebugInfo debug_info{};
debug_info.compiled_methods = ArrayRef<const debug::MethodDebugInfo>(method_info_);
if (dex_files_ != nullptr) {
- for (auto dex_file : *dex_files_) {
- uint32_t offset = vdex_dex_files_offset_ + (dex_file->Begin() - (*dex_files_)[0]->Begin());
- debug_info.dex_files.emplace(offset, dex_file);
+ DCHECK_EQ(dex_files_->size(), oat_dex_files_.size());
+ for (size_t i = 0, size = dex_files_->size(); i != size; ++i) {
+ const DexFile* dex_file = (*dex_files_)[i];
+ const OatDexFile& oat_dex_file = oat_dex_files_[i];
+ debug_info.dex_files.emplace(oat_dex_file.dex_file_offset_, dex_file);
}
}
return debug_info;