summaryrefslogtreecommitdiffstats
path: root/compiler/elf_writer_quick.cc
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2014-09-03 08:53:49 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-09-03 08:53:49 +0000
commit859efc4e6f5f0bba503ff55dc08a59d8ce7a81d1 (patch)
tree52393db2da81529b7fbbd863fd9a5e46af6f6516 /compiler/elf_writer_quick.cc
parenta70343f996aea274a2568e8f2bcda829cdbc61d7 (diff)
parent33ac819bd13c6e9d42b36ae8393c37cfb1bb4cde (diff)
downloadart-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.cc25
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();
}
}