Add serialization of inlines and inline origins for FastSourceLineResolver so that it can construct inlined frames later.

Bug: 1190878
Change-Id: Ie3b0f2f44e04e790501ea54680fe223974c750ab
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3294126
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
This commit is contained in:
Zequan Wu 2021-11-30 16:29:00 -08:00 committed by Joshua Peraza
parent c472afe064
commit 0ae29c99d1
8 changed files with 379 additions and 27 deletions

View file

@ -43,10 +43,15 @@
namespace google_breakpad {
// Definition of static member variable in SimplerSerializer<Funcion>, which
// is declared in file "simple_serializer-inl.h"
RangeMapSerializer< MemAddr, linked_ptr<BasicSourceLineResolver::Line> >
SimpleSerializer<BasicSourceLineResolver::Function>::range_map_serializer_;
// Definition of static member variables in SimplerSerializer<Funcion> and
// SimplerSerializer<Inline>, which are declared in file
// "simple_serializer-inl.h"
RangeMapSerializer<MemAddr, linked_ptr<BasicSourceLineResolver::Line>>
SimpleSerializer<BasicSourceLineResolver::Function>::range_map_serializer_;
ContainedRangeMapSerializer<MemAddr,
linked_ptr<BasicSourceLineResolver::Inline>>
SimpleSerializer<
BasicSourceLineResolver::Function>::inline_range_map_serializer_;
size_t ModuleSerializer::SizeOf(const BasicSourceLineResolver::Module& module) {
size_t total_size_alloc_ = 0;
@ -66,6 +71,8 @@ size_t ModuleSerializer::SizeOf(const BasicSourceLineResolver::Module& module) {
module.cfi_initial_rules_);
map_sizes_[map_index++] = cfi_delta_rules_serializer_.SizeOf(
module.cfi_delta_rules_);
map_sizes_[map_index++] =
inline_origin_serializer_.SizeOf(module.inline_origins_);
// Header size.
total_size_alloc_ += kNumberMaps_ * sizeof(uint32_t);
@ -95,6 +102,7 @@ char* ModuleSerializer::Write(const BasicSourceLineResolver::Module& module,
dest = wfi_serializer_.Write(&(module.windows_frame_info_[i]), dest);
dest = cfi_init_rules_serializer_.Write(module.cfi_initial_rules_, dest);
dest = cfi_delta_rules_serializer_.Write(module.cfi_delta_rules_, dest);
dest = inline_origin_serializer_.Write(module.inline_origins_, dest);
// Write a null terminator.
dest = SimpleSerializer<char>::Write(0, dest);
return dest;