Lines Matching +full:ext +full:- +full:address
29 // Original author: Jim Blandy <[email protected]> <jimb@red-bean.com>
68 if (inline_origins_[specification_offset]->name == "<name omitted>") { in GetOrCreateInlineOrigin()
69 inline_origins_[specification_offset]->name = name; in GetOrCreateInlineOrigin()
97 inline_origins_[specification_offset] = std::move(remove->second); in SetReference()
121 delete it->second; in ~Module()
128 void Module::SetLoadAddress(Address address) { in SetLoadAddress() argument
129 load_address_ = address; in SetLoadAddress()
139 assert(!function->name.empty()); in AddFunction()
141 if (!AddressIsInModule(function->address)) { in AddFunction()
146 // with the same address if present. in AddFunction()
147 Extern ext(function->address); in AddFunction() local
148 ExternSet::iterator it_ext = externs_.find(&ext); in AddFunction()
151 (function->address & 0x1) == 0) { in AddFunction()
153 Extern arm_thumb_ext(function->address | 0x1); in AddFunction()
157 Extern* found_ext = it_ext->get(); in AddFunction()
158 bool name_mismatch = found_ext->name != function->name; in AddFunction()
161 // In the case of a .dSYM built with -gmlt, the external name will be the in AddFunction()
162 // fully-qualified symbol name, but the function name will be the partial in AddFunction()
167 (function->name == "<name omitted>" || in AddFunction()
168 found_ext->name.find(function->name.str()) != string::npos)) { in AddFunction()
174 function->is_multiple |= in AddFunction()
175 is_multiple_based_on_name || found_ext->is_multiple; in AddFunction()
178 function->name = AddStringToPool(it_ext->get()->name); in AddFunction()
185 for (const Range& range : function->ranges) { in AddFunction()
186 Extern debug_ext(range.address); in AddFunction()
187 ExternSet::iterator it_debug = externs_.lower_bound(&ext); in AddFunction()
189 (*it_debug)->address >= range.address + range.size); in AddFunction()
193 if (enable_multiple_field_ && function_addresses_.count(function->address)) { in AddFunction()
196 [&](Function* other) { return other->address == function->address; }); in AddFunction()
198 (*existing_function)->is_multiple = true; in AddFunction()
203 function_addresses_.emplace(function->address); in AddFunction()
214 if (!AddressIsInModule(stack_frame_entry->address)) { in AddStackFrameEntry()
221 void Module::AddExtern(std::unique_ptr<Extern> ext) { in AddExtern() argument
222 if (!AddressIsInModule(ext->address)) { in AddExtern()
226 std::pair<ExternSet::iterator,bool> ret = externs_.emplace(std::move(ext)); in AddExtern()
228 (*ret.first)->is_multiple = true; in AddExtern()
234 vec->insert(i, functions_.begin(), functions_.end()); in GetFunctions()
239 auto pos = vec->insert(i, externs_.size(), nullptr); in GetExterns()
240 for (const std::unique_ptr<Extern>& ext : externs_) { in GetExterns() local
241 *pos = ext.get(); in GetExterns()
259 || *destiny->first != name) { // Repeated string comparison, boo hoo. in FindFile()
261 file->source_id = -1; in FindFile()
263 FileByNameMap::value_type(&file->name, file)); in FindFile()
265 return destiny->second; in FindFile()
275 return (it == files_.end()) ? NULL : it->second; in FindExistingFile()
279 vec->clear(); in GetFiles()
281 vec->push_back(it->second); in GetFiles()
285 vec->clear(); in GetStackFrameEntries()
286 vec->reserve(stack_frame_entries_.size()); in GetStackFrameEntries()
288 vec->push_back(ent.get()); in GetStackFrameEntries()
293 // First, give every source file an id of -1. in AssignSourceIds()
296 file_it->second->source_id = -1; in AssignSourceIds()
304 for (vector<Line>::iterator line_it = func->lines.begin(); in AssignSourceIds()
305 line_it != func->lines.end(); ++line_it) in AssignSourceIds()
306 line_it->file->source_id = 0; in AssignSourceIds()
313 // any file. Those will have file id -1. in AssignSourceIds()
314 if (in->call_site_file) { in AssignSourceIds()
315 in->call_site_file->source_id = 0; in AssignSourceIds()
319 Inline::InlineDFS(func->inlines, markInlineFiles); in AssignSourceIds()
329 if (!file_it->second->source_id) in AssignSourceIds()
330 file_it->second->source_id = next_source_id++; in AssignSourceIds()
339 auto it = inline_origins.find(in->origin); in CreateInlineOrigins()
341 inline_origins.insert(in->origin); in CreateInlineOrigins()
343 in->origin = *it; in CreateInlineOrigins()
346 Module::Inline::InlineDFS(func->inlines, addInlineOrigins); in CreateInlineOrigins()
349 origin->id = next_id++; in CreateInlineOrigins()
364 stream << it->first << ": " << it->second; in WriteRuleMap()
369 bool Module::AddressIsInModule(Address address) const { in AddressIsInModule()
374 if (address >= segment.address && in AddressIsInModule()
375 address < segment.address + segment.size) { in AddressIsInModule()
401 File* file = file_it->second; in Write()
402 if (file->source_id >= 0) { in Write()
403 stream << "FILE " << file->source_id << " " << file->name << "\n"; in Write()
410 stream << "INLINE_ORIGIN " << origin->id << " " << origin->name << "\n"; in Write()
419 vector<Line>::iterator line_it = func->lines.begin(); in Write()
420 for (auto range_it = func->ranges.cbegin(); in Write()
421 range_it != func->ranges.cend(); ++range_it) { in Write()
422 stream << "FUNC " << (func->is_multiple ? "m " : "") << hex in Write()
423 << (range_it->address - load_address_) << " " << range_it->size in Write()
424 << " " << func->parameter_size << " " << func->name << dec in Write()
433 stream << in->inline_nest_level << " " << in->call_site_line << " " in Write()
434 << in->getCallSiteFileID() << " " << in->origin->id << hex; in Write()
435 for (const Range& r : in->ranges) in Write()
436 stream << " " << (r.address - load_address_) << " " << r.size; in Write()
439 Module::Inline::InlineDFS(func->inlines, write_inline); in Write()
443 while ((line_it != func->lines.end()) && in Write()
444 (line_it->address >= range_it->address) && in Write()
445 (line_it->address < (range_it->address + range_it->size))) { in Write()
447 << (line_it->address - load_address_) << " " in Write()
448 << line_it->size << " " in Write()
450 << line_it->number << " " in Write()
451 << line_it->file->source_id << "\n"; in Write()
464 Extern* ext = extern_it->get(); in Write() local
465 stream << "PUBLIC " << (ext->is_multiple ? "m " : "") << hex in Write()
466 << (ext->address - load_address_) << " 0 " << ext->name << dec in Write()
475 StackFrameEntry* entry = frame_it->get(); in Write()
477 << (entry->address - load_address_) << " " in Write()
478 << entry->size << " " << dec; in Write()
480 || !WriteRuleMap(entry->initial_rules, stream)) in Write()
486 for (RuleChangeMap::const_iterator delta_it = entry->rule_changes.begin(); in Write()
487 delta_it != entry->rule_changes.end(); ++delta_it) { in Write()
489 << (delta_it->first - load_address_) << " " << dec; in Write()
491 || !WriteRuleMap(delta_it->second, stream)) in Write()