[Lldb-commits] [PATCH] symtab.cpp erases while iterating
Carlo Kok
ck at remobjects.com
Fri Sep 27 01:11:31 PDT 2013
Symtab.cpp in lldb erases entries while iterating through the list.
While this is fine in gcc/clang vc++ asserts on it. Attached patch fixes it.
There's another bit of code concerns me in SymbolFileDWARFDebugMap.cpp:
TimeValue oso_mod_time (oso_file.GetModificationTime());
if (oso_mod_time != comp_unit_info->oso_mod_time)
here it compares the file date with the comp_unit_info. This check fails
if the object files are copied to another computer for debugging, or
even accessed over a mapped drive. For my local copy I just removed the
check though obviously that's not the solution.
--
Carlo Kok
RemObjects Software
-------------- next part --------------
Index: C:/Projects/oxygene-nougat-llvm/lldb/source/Symbol/Symtab.cpp
===================================================================
--- C:/Projects/oxygene-nougat-llvm/lldb/source/Symbol/Symtab.cpp (revision 191382)
+++ C:/Projects/oxygene-nougat-llvm/lldb/source/Symbol/Symtab.cpp (working copy)
@@ -676,14 +676,11 @@
if (AppendSymbolIndexesWithName(symbol_name, indexes) > 0)
{
- std::vector<uint32_t>::iterator pos = indexes.begin();
- while (pos != indexes.end())
- {
- if (symbol_type == eSymbolTypeAny || m_symbols[*pos].GetType() == symbol_type)
- ++pos;
- else
- indexes.erase(pos);
- }
+ for (int i = indexes.size()-1; i>= 0; i -- )
+ {
+ if (!(symbol_type == eSymbolTypeAny || m_symbols[indexes[i]].GetType() == symbol_type))
+ indexes.erase(indexes.begin() + i);
+ }
}
return indexes.size();
}
@@ -695,14 +692,11 @@
if (AppendSymbolIndexesWithName(symbol_name, symbol_debug_type, symbol_visibility, indexes) > 0)
{
- std::vector<uint32_t>::iterator pos = indexes.begin();
- while (pos != indexes.end())
- {
- if (symbol_type == eSymbolTypeAny || m_symbols[*pos].GetType() == symbol_type)
- ++pos;
- else
- indexes.erase(pos);
- }
+ for (int i = indexes.size() - 1; i>= 0; i -- )
+ {
+ if (!(symbol_type == eSymbolTypeAny || m_symbols[indexes[i]].GetType() == symbol_type))
+ indexes.erase(indexes.begin() + i);
+ }
}
return indexes.size();
}
More information about the lldb-commits
mailing list