diff options
Diffstat (limited to 'runtime/image.cc')
| -rw-r--r-- | runtime/image.cc | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/runtime/image.cc b/runtime/image.cc index 44193da4ee..ba1e58bb2c 100644 --- a/runtime/image.cc +++ b/runtime/image.cc @@ -24,7 +24,7 @@ namespace art { const uint8_t ImageHeader::kImageMagic[] = { 'a', 'r', 't', '\n' }; -const uint8_t ImageHeader::kImageVersion[] = { '0', '1', '7', '\0' }; +const uint8_t ImageHeader::kImageVersion[] = { '0', '1', '8', '\0' }; ImageHeader::ImageHeader(uint32_t image_begin, uint32_t image_size, @@ -147,4 +147,26 @@ std::ostream& operator<<(std::ostream& os, const ImageSection& section) { return os << "size=" << section.Size() << " range=" << section.Offset() << "-" << section.End(); } +void ImageSection::VisitPackedArtFields(ArtFieldVisitor* visitor, uint8_t* base) const { + for (size_t pos = 0; pos < Size(); ) { + auto* array = reinterpret_cast<LengthPrefixedArray<ArtField>*>(base + Offset() + pos); + for (size_t i = 0; i < array->Length(); ++i) { + visitor->Visit(&array->At(i, sizeof(ArtField))); + } + pos += array->ComputeSize(array->Length(), sizeof(ArtField)); + } +} + +void ImageSection::VisitPackedArtMethods(ArtMethodVisitor* visitor, + uint8_t* base, + size_t method_size) const { + for (size_t pos = 0; pos < Size(); ) { + auto* array = reinterpret_cast<LengthPrefixedArray<ArtMethod>*>(base + Offset() + pos); + for (size_t i = 0; i < array->Length(); ++i) { + visitor->Visit(&array->At(i, method_size)); + } + pos += array->ComputeSize(array->Length(), method_size); + } +} + } // namespace art |