Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/tools/llvm-objcopy/Object.cpp
Show First 20 Lines • Show All 194 Lines • ▼ Show 20 Line(s) | 194 | if (SymbolNames == Sec) { | |||
---|---|---|---|---|---|
195 | error("String table " + SymbolNames->Name + | 195 | error("String table " + SymbolNames->Name + | ||
196 | " cannot be removed because it is referenced by the symbol table " + | 196 | " cannot be removed because it is referenced by the symbol table " + | ||
197 | this->Name); | 197 | this->Name); | ||
198 | } | 198 | } | ||
199 | removeSymbols([Sec](const Symbol &Sym) { return Sym.DefinedIn == Sec; }); | 199 | removeSymbols([Sec](const Symbol &Sym) { return Sym.DefinedIn == Sec; }); | ||
200 | } | 200 | } | ||
201 | 201 | | |||
202 | void SymbolTableSection::updateSymbols(function_ref<void(Symbol &)> Callable) { | 202 | void SymbolTableSection::updateSymbols(function_ref<void(Symbol &)> Callable) { | ||
203 | for (auto &Sym : Symbols) | 203 | std::for_each(std::begin(Symbols) + 1, std::end(Symbols), | ||
204 | Callable(*Sym); | 204 | [Callable](SymPtr &Sym) { Callable(*Sym); }); | ||
205 | std::stable_partition( | 205 | std::stable_partition( | ||
206 | std::begin(Symbols), std::end(Symbols), | 206 | std::begin(Symbols), std::end(Symbols), | ||
207 | [](const SymPtr &Sym) { return Sym->Binding == STB_LOCAL; }); | 207 | [](const SymPtr &Sym) { return Sym->Binding == STB_LOCAL; }); | ||
208 | assignIndices(); | 208 | assignIndices(); | ||
209 | } | 209 | } | ||
210 | 210 | | |||
211 | void SymbolTableSection::removeSymbols( | 211 | void SymbolTableSection::removeSymbols( | ||
212 | function_ref<bool(const Symbol &)> ToRemove) { | 212 | function_ref<bool(const Symbol &)> ToRemove) { | ||
213 | Symbols.erase( | 213 | Symbols.erase( | ||
214 | std::remove_if(std::begin(Symbols), std::end(Symbols), | 214 | std::remove_if(std::begin(Symbols) + 1, std::end(Symbols), | ||
215 | [ToRemove](const SymPtr &Sym) { return ToRemove(*Sym); }), | 215 | [ToRemove](const SymPtr &Sym) { return ToRemove(*Sym); }), | ||
216 | std::end(Symbols)); | 216 | std::end(Symbols)); | ||
217 | Size = Symbols.size() * EntrySize; | 217 | Size = Symbols.size() * EntrySize; | ||
218 | assignIndices(); | 218 | assignIndices(); | ||
219 | } | 219 | } | ||
220 | 220 | | |||
221 | void SymbolTableSection::initialize(SectionTableRef SecTable) { | 221 | void SymbolTableSection::initialize(SectionTableRef SecTable) { | ||
222 | Size = 0; | 222 | Size = 0; | ||
▲ Show 20 Lines • Show All 1012 Lines • Show Last 20 Lines |