diff options
author | Vladimir Marko <vmarko@google.com> | 2014-09-03 08:53:49 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-03 08:53:49 +0000 |
commit | 859efc4e6f5f0bba503ff55dc08a59d8ce7a81d1 (patch) | |
tree | 52393db2da81529b7fbbd863fd9a5e46af6f6516 /compiler/elf_writer_quick.cc | |
parent | a70343f996aea274a2568e8f2bcda829cdbc61d7 (diff) | |
parent | 33ac819bd13c6e9d42b36ae8393c37cfb1bb4cde (diff) | |
download | art-859efc4e6f5f0bba503ff55dc08a59d8ce7a81d1.zip art-859efc4e6f5f0bba503ff55dc08a59d8ce7a81d1.tar.gz art-859efc4e6f5f0bba503ff55dc08a59d8ce7a81d1.tar.bz2 |
Merge "ART fix oat debug source map operations"
Diffstat (limited to 'compiler/elf_writer_quick.cc')
-rw-r--r-- | compiler/elf_writer_quick.cc | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/compiler/elf_writer_quick.cc b/compiler/elf_writer_quick.cc index acbdcb1..4c69fc8 100644 --- a/compiler/elf_writer_quick.cc +++ b/compiler/elf_writer_quick.cc @@ -1205,7 +1205,7 @@ class LineTableGenerator FINAL : public Leb128Encoder { size_t current_line) : Leb128Encoder(data), line_base_(line_base), line_range_(line_range), opcode_base_(opcode_base), current_address_(current_address), - current_line_(current_line) {} + current_line_(current_line), current_file_index_(0) {} void PutDelta(unsigned delta_addr, int delta_line) { current_line_ += delta_line; @@ -1259,8 +1259,11 @@ class LineTableGenerator FINAL : public Leb128Encoder { } void SetFile(unsigned file_index) { - PushByte(data_, DW_LNS_set_file); - PushBackUnsigned(file_index); + if (current_file_index_ != file_index) { + current_file_index_ = file_index; + PushByte(data_, DW_LNS_set_file); + PushBackUnsigned(file_index); + } } void EndSequence() { @@ -1277,6 +1280,7 @@ class LineTableGenerator FINAL : public Leb128Encoder { const int opcode_base_; uintptr_t current_address_; size_t current_line_; + unsigned current_file_index_; DISALLOW_COPY_AND_ASSIGN(LineTableGenerator); }; @@ -1554,16 +1558,17 @@ void ElfWriterQuick<Elf_Word, Elf_Sword, Elf_Addr, Elf_Dyn, PushWord(dbg_info, dbg.low_pc_ + text_section_offset); PushWord(dbg_info, dbg.high_pc_ + text_section_offset); - pc2java_map.clear(); GetLineInfoForJava(dbg.dbgstream_, dbg.compiled_method_->GetSrcMappingTable(), &pc2java_map, dbg.low_pc_); pc2java_map.DeltaFormat({dbg.low_pc_, 1}, dbg.high_pc_); - - line_table_generator.SetFile(file_index); - line_table_generator.SetAddr(dbg.low_pc_ + text_section_offset); - line_table_generator.SetLine(1); - for (auto& src_map_elem : pc2java_map) { - line_table_generator.PutDelta(src_map_elem.from_, src_map_elem.to_); + if (!pc2java_map.empty()) { + line_table_generator.SetFile(file_index); + line_table_generator.SetAddr(dbg.low_pc_ + text_section_offset); + line_table_generator.SetLine(1); + for (auto& src_map_elem : pc2java_map) { + line_table_generator.PutDelta(src_map_elem.from_, src_map_elem.to_); + } + pc2java_map.clear(); } } |