Lines Matching refs:stream

117 void DexWriter::WriteEncodedValue(Stream* stream, dex_ir::EncodedValue* encoded_value) {  in WriteEncodedValue()  argument
166 WriteEncodedValueHeader(stream, type, 0); in WriteEncodedValue()
167 WriteEncodedArray(stream, encoded_value->GetEncodedArray()->GetEncodedValues()); in WriteEncodedValue()
170 WriteEncodedValueHeader(stream, type, 0); in WriteEncodedValue()
171 WriteEncodedAnnotation(stream, encoded_value->GetEncodedAnnotation()); in WriteEncodedValue()
174 WriteEncodedValueHeader(stream, type, 0); in WriteEncodedValue()
177 WriteEncodedValueHeader(stream, type, encoded_value->GetBoolean() ? 1 : 0); in WriteEncodedValue()
182 WriteEncodedValueHeader(stream, type, length - 1); in WriteEncodedValue()
183 stream->Write(buffer + start, length); in WriteEncodedValue()
186 void DexWriter::WriteEncodedValueHeader(Stream* stream, int8_t value_type, size_t value_arg) { in WriteEncodedValueHeader() argument
188 stream->Write(buffer, sizeof(uint8_t)); in WriteEncodedValueHeader()
191 void DexWriter::WriteEncodedArray(Stream* stream, dex_ir::EncodedValueVector* values) { in WriteEncodedArray() argument
192 stream->WriteUleb128(values->size()); in WriteEncodedArray()
194 WriteEncodedValue(stream, value.get()); in WriteEncodedArray()
198 void DexWriter::WriteEncodedAnnotation(Stream* stream, dex_ir::EncodedAnnotation* annotation) { in WriteEncodedAnnotation() argument
199 stream->WriteUleb128(annotation->GetType()->GetIndex()); in WriteEncodedAnnotation()
200 stream->WriteUleb128(annotation->GetAnnotationElements()->size()); in WriteEncodedAnnotation()
203 stream->WriteUleb128(annotation_element->GetName()->GetIndex()); in WriteEncodedAnnotation()
204 WriteEncodedValue(stream, annotation_element->GetValue()); in WriteEncodedAnnotation()
208 void DexWriter::WriteEncodedFields(Stream* stream, dex_ir::FieldItemVector* fields) { in WriteEncodedFields() argument
212 stream->WriteUleb128(index - prev_index); in WriteEncodedFields()
213 stream->WriteUleb128(field.GetAccessFlags()); in WriteEncodedFields()
218 void DexWriter::WriteEncodedMethods(Stream* stream, dex_ir::MethodItemVector* methods) { in WriteEncodedMethods() argument
223 stream->WriteUleb128(index - prev_index); in WriteEncodedMethods()
224 stream->WriteUleb128(method.GetAccessFlags()); in WriteEncodedMethods()
225 stream->WriteUleb128(code_off); in WriteEncodedMethods()
232 void DexWriter::WriteStringIds(Stream* stream, bool reserve_only) { in WriteStringIds() argument
233 const uint32_t start = stream->Tell(); in WriteStringIds()
235 stream->AlignTo(SectionAlignment(DexFile::kDexTypeStringIdItem)); in WriteStringIds()
237 stream->Skip(string_id->GetSize()); in WriteStringIds()
240 stream->Write(&string_data_off, string_id->GetSize()); in WriteStringIds()
243 if (compute_offsets_ && start != stream->Tell()) { in WriteStringIds()
248 void DexWriter::WriteStringData(Stream* stream, dex_ir::StringData* string_data) { in WriteStringData() argument
249 ProcessOffset(stream, string_data); in WriteStringData()
250 stream->AlignTo(SectionAlignment(DexFile::kDexTypeStringDataItem)); in WriteStringData()
251 stream->WriteUleb128(CountModifiedUtf8Chars(string_data->Data())); in WriteStringData()
252 stream->Write(string_data->Data(), strlen(string_data->Data())); in WriteStringData()
254 stream->Skip(1); in WriteStringData()
257 void DexWriter::WriteStringDatas(Stream* stream) { in WriteStringDatas() argument
258 const uint32_t start = stream->Tell(); in WriteStringDatas()
260 WriteStringData(stream, string_data.get()); in WriteStringDatas()
262 if (compute_offsets_ && start != stream->Tell()) { in WriteStringDatas()
267 void DexWriter::WriteTypeIds(Stream* stream) { in WriteTypeIds() argument
269 const uint32_t start = stream->Tell(); in WriteTypeIds()
271 stream->AlignTo(SectionAlignment(DexFile::kDexTypeTypeIdItem)); in WriteTypeIds()
272 ProcessOffset(stream, type_id.get()); in WriteTypeIds()
274 stream->Write(descriptor_idx, type_id->GetSize()); in WriteTypeIds()
276 if (compute_offsets_ && start != stream->Tell()) { in WriteTypeIds()
281 void DexWriter::WriteTypeLists(Stream* stream) { in WriteTypeLists() argument
284 const uint32_t start = stream->Tell(); in WriteTypeLists()
286 stream->AlignTo(SectionAlignment(DexFile::kDexTypeTypeList)); in WriteTypeLists()
288 ProcessOffset(stream, type_list.get()); in WriteTypeLists()
289 stream->Write(size, sizeof(uint32_t)); in WriteTypeLists()
292 stream->Write(list, sizeof(uint16_t)); in WriteTypeLists()
295 if (compute_offsets_ && start != stream->Tell()) { in WriteTypeLists()
300 void DexWriter::WriteProtoIds(Stream* stream, bool reserve_only) { in WriteProtoIds() argument
302 const uint32_t start = stream->Tell(); in WriteProtoIds()
304 stream->AlignTo(SectionAlignment(DexFile::kDexTypeProtoIdItem)); in WriteProtoIds()
305 ProcessOffset(stream, proto_id.get()); in WriteProtoIds()
307 stream->Skip(proto_id->GetSize()); in WriteProtoIds()
312 stream->Write(buffer, proto_id->GetSize()); in WriteProtoIds()
315 if (compute_offsets_ && start != stream->Tell()) { in WriteProtoIds()
320 void DexWriter::WriteFieldIds(Stream* stream) { in WriteFieldIds() argument
322 const uint32_t start = stream->Tell(); in WriteFieldIds()
324 stream->AlignTo(SectionAlignment(DexFile::kDexTypeFieldIdItem)); in WriteFieldIds()
325 ProcessOffset(stream, field_id.get()); in WriteFieldIds()
330 stream->Write(buffer, field_id->GetSize()); in WriteFieldIds()
332 if (compute_offsets_ && start != stream->Tell()) { in WriteFieldIds()
337 void DexWriter::WriteMethodIds(Stream* stream) { in WriteMethodIds() argument
339 const uint32_t start = stream->Tell(); in WriteMethodIds()
341 stream->AlignTo(SectionAlignment(DexFile::kDexTypeMethodIdItem)); in WriteMethodIds()
342 ProcessOffset(stream, method_id.get()); in WriteMethodIds()
347 stream->Write(buffer, method_id->GetSize()); in WriteMethodIds()
349 if (compute_offsets_ && start != stream->Tell()) { in WriteMethodIds()
354 void DexWriter::WriteEncodedArrays(Stream* stream) { in WriteEncodedArrays() argument
355 const uint32_t start = stream->Tell(); in WriteEncodedArrays()
357 stream->AlignTo(SectionAlignment(DexFile::kDexTypeEncodedArrayItem)); in WriteEncodedArrays()
358 ProcessOffset(stream, encoded_array.get()); in WriteEncodedArrays()
359 WriteEncodedArray(stream, encoded_array->GetEncodedValues()); in WriteEncodedArrays()
361 if (compute_offsets_ && start != stream->Tell()) { in WriteEncodedArrays()
366 void DexWriter::WriteAnnotations(Stream* stream) { in WriteAnnotations() argument
368 const uint32_t start = stream->Tell(); in WriteAnnotations()
370 stream->AlignTo(SectionAlignment(DexFile::kDexTypeAnnotationItem)); in WriteAnnotations()
372 ProcessOffset(stream, annotation.get()); in WriteAnnotations()
373 stream->Write(visibility, sizeof(uint8_t)); in WriteAnnotations()
374 WriteEncodedAnnotation(stream, annotation->GetAnnotation()); in WriteAnnotations()
376 if (compute_offsets_ && start != stream->Tell()) { in WriteAnnotations()
381 void DexWriter::WriteAnnotationSets(Stream* stream) { in WriteAnnotationSets() argument
384 const uint32_t start = stream->Tell(); in WriteAnnotationSets()
386 stream->AlignTo(SectionAlignment(DexFile::kDexTypeAnnotationSetItem)); in WriteAnnotationSets()
388 ProcessOffset(stream, annotation_set.get()); in WriteAnnotationSets()
389 stream->Write(size, sizeof(uint32_t)); in WriteAnnotationSets()
392 stream->Write(annotation_off, sizeof(uint32_t)); in WriteAnnotationSets()
395 if (compute_offsets_ && start != stream->Tell()) { in WriteAnnotationSets()
400 void DexWriter::WriteAnnotationSetRefs(Stream* stream) { in WriteAnnotationSetRefs() argument
403 const uint32_t start = stream->Tell(); in WriteAnnotationSetRefs()
405 stream->AlignTo(SectionAlignment(DexFile::kDexTypeAnnotationSetRefList)); in WriteAnnotationSetRefs()
407 ProcessOffset(stream, annotation_set_ref.get()); in WriteAnnotationSetRefs()
408 stream->Write(size, sizeof(uint32_t)); in WriteAnnotationSetRefs()
411 stream->Write(annotations_off, sizeof(uint32_t)); in WriteAnnotationSetRefs()
414 if (compute_offsets_ && start != stream->Tell()) { in WriteAnnotationSetRefs()
419 void DexWriter::WriteAnnotationsDirectories(Stream* stream) { in WriteAnnotationsDirectories() argument
422 const uint32_t start = stream->Tell(); in WriteAnnotationsDirectories()
424 stream->AlignTo(SectionAlignment(DexFile::kDexTypeAnnotationsDirectoryItem)); in WriteAnnotationsDirectories()
425 ProcessOffset(stream, annotations_directory.get()); in WriteAnnotationsDirectories()
434 stream->Write(directory_buffer, 4 * sizeof(uint32_t)); in WriteAnnotationsDirectories()
440 stream->Write(annotation_buffer, 2 * sizeof(uint32_t)); in WriteAnnotationsDirectories()
448 stream->Write(annotation_buffer, 2 * sizeof(uint32_t)); in WriteAnnotationsDirectories()
456 stream->Write(annotation_buffer, 2 * sizeof(uint32_t)); in WriteAnnotationsDirectories()
460 if (compute_offsets_ && start != stream->Tell()) { in WriteAnnotationsDirectories()
465 void DexWriter::WriteHiddenapiClassData(Stream* stream) { in WriteHiddenapiClassData() argument
471 stream->AlignTo(SectionAlignment(DexFile::kDexTypeHiddenapiClassData)); in WriteHiddenapiClassData()
472 ProcessOffset(stream, &header_->HiddenapiClassDatas()); in WriteHiddenapiClassData()
473 const uint32_t start = stream->Tell(); in WriteHiddenapiClassData()
486 stream->Write(data_header.data(), sizeof(uint32_t) * data_header.size()); in WriteHiddenapiClassData()
497 DCHECK_EQ(data_header[i + 1], stream->Tell() - start); in WriteHiddenapiClassData()
499 stream->WriteUleb128(item->GetFlags(&field)); in WriteHiddenapiClassData()
502 stream->WriteUleb128(item->GetFlags(&field)); in WriteHiddenapiClassData()
505 stream->WriteUleb128(item->GetFlags(&method)); in WriteHiddenapiClassData()
508 stream->WriteUleb128(item->GetFlags(&method)); in WriteHiddenapiClassData()
512 DCHECK_EQ(stream->Tell() - start, data_header[0]); in WriteHiddenapiClassData()
514 if (compute_offsets_ && start != stream->Tell()) { in WriteHiddenapiClassData()
519 void DexWriter::WriteDebugInfoItem(Stream* stream, dex_ir::DebugInfoItem* debug_info) { in WriteDebugInfoItem() argument
520 stream->AlignTo(SectionAlignment(DexFile::kDexTypeDebugInfoItem)); in WriteDebugInfoItem()
521 ProcessOffset(stream, debug_info); in WriteDebugInfoItem()
522 stream->Write(debug_info->GetDebugInfo(), debug_info->GetDebugInfoSize()); in WriteDebugInfoItem()
525 void DexWriter::WriteDebugInfoItems(Stream* stream) { in WriteDebugInfoItems() argument
526 const uint32_t start = stream->Tell(); in WriteDebugInfoItems()
528 WriteDebugInfoItem(stream, debug_info.get()); in WriteDebugInfoItems()
530 if (compute_offsets_ && start != stream->Tell()) { in WriteDebugInfoItems()
535 void DexWriter::WriteCodeItemPostInstructionData(Stream* stream, in WriteCodeItemPostInstructionData() argument
539 stream->AlignTo(dex::TryItem::kAlignment); in WriteCodeItemPostInstructionData()
548 stream->Write(&disk_try_item, sizeof(disk_try_item)); in WriteCodeItemPostInstructionData()
551 const size_t offset = stream->Tell(); in WriteCodeItemPostInstructionData()
552 size_t max_offset = offset + stream->WriteUleb128(code_item->Handlers()->size()); in WriteCodeItemPostInstructionData()
554 stream->Seek(offset + handlers->GetListOffset()); in WriteCodeItemPostInstructionData()
557 stream->WriteSleb128(size); in WriteCodeItemPostInstructionData()
560 stream->WriteUleb128(handler->GetTypeId()->GetIndex()); in WriteCodeItemPostInstructionData()
562 stream->WriteUleb128(handler->GetAddress()); in WriteCodeItemPostInstructionData()
565 max_offset = std::max(max_offset, stream->Tell()); in WriteCodeItemPostInstructionData()
567 stream->Seek(max_offset); in WriteCodeItemPostInstructionData()
571 void DexWriter::WriteCodeItem(Stream* stream, in WriteCodeItem() argument
575 const uint32_t start_offset = stream->Tell(); in WriteCodeItem()
576 stream->AlignTo(SectionAlignment(DexFile::kDexTypeCodeItem)); in WriteCodeItem()
577 ProcessOffset(stream, code_item); in WriteCodeItem()
592 stream->Write(&disk_code_item, OFFSETOF_MEMBER(StandardDexFile::CodeItem, insns_)); in WriteCodeItem()
594 stream->Write(code_item->Insns(), code_item->InsnsSize() * sizeof(uint16_t)); in WriteCodeItem()
596 WriteCodeItemPostInstructionData(stream, code_item, reserve_only); in WriteCodeItem()
598 stream->Clear(start_offset, stream->Tell() - start_offset); in WriteCodeItem()
602 void DexWriter::WriteCodeItems(Stream* stream, bool reserve_only) { in WriteCodeItems() argument
608 const uint32_t start = stream->Tell(); in WriteCodeItems()
610 uint32_t start_offset = stream->Tell(); in WriteCodeItems()
611 WriteCodeItem(stream, code_item.get(), reserve_only); in WriteCodeItems()
618 stream->Tell()); in WriteCodeItems()
623 if (compute_offsets_ && start != stream->Tell()) { in WriteCodeItems()
628 void DexWriter::WriteClassDefs(Stream* stream, bool reserve_only) { in WriteClassDefs() argument
629 const uint32_t start = stream->Tell(); in WriteClassDefs()
632 stream->AlignTo(SectionAlignment(DexFile::kDexTypeClassDefItem)); in WriteClassDefs()
634 stream->Skip(class_def->GetSize()); in WriteClassDefs()
649 stream->Write(class_def_buffer, class_def->GetSize()); in WriteClassDefs()
652 if (compute_offsets_ && start != stream->Tell()) { in WriteClassDefs()
657 void DexWriter::WriteClassDatas(Stream* stream) { in WriteClassDatas() argument
658 const uint32_t start = stream->Tell(); in WriteClassDatas()
661 stream->AlignTo(SectionAlignment(DexFile::kDexTypeClassDataItem)); in WriteClassDatas()
662 ProcessOffset(stream, class_data.get()); in WriteClassDatas()
663 stream->WriteUleb128(class_data->StaticFields()->size()); in WriteClassDatas()
664 stream->WriteUleb128(class_data->InstanceFields()->size()); in WriteClassDatas()
665 stream->WriteUleb128(class_data->DirectMethods()->size()); in WriteClassDatas()
666 stream->WriteUleb128(class_data->VirtualMethods()->size()); in WriteClassDatas()
667 WriteEncodedFields(stream, class_data->StaticFields()); in WriteClassDatas()
668 WriteEncodedFields(stream, class_data->InstanceFields()); in WriteClassDatas()
669 WriteEncodedMethods(stream, class_data->DirectMethods()); in WriteClassDatas()
670 WriteEncodedMethods(stream, class_data->VirtualMethods()); in WriteClassDatas()
672 if (compute_offsets_ && start != stream->Tell()) { in WriteClassDatas()
677 void DexWriter::WriteCallSiteIds(Stream* stream, bool reserve_only) { in WriteCallSiteIds() argument
678 const uint32_t start = stream->Tell(); in WriteCallSiteIds()
681 stream->AlignTo(SectionAlignment(DexFile::kDexTypeCallSiteIdItem)); in WriteCallSiteIds()
683 stream->Skip(call_site_id->GetSize()); in WriteCallSiteIds()
686 stream->Write(call_site_off, call_site_id->GetSize()); in WriteCallSiteIds()
689 if (compute_offsets_ && start != stream->Tell()) { in WriteCallSiteIds()
694 void DexWriter::WriteMethodHandles(Stream* stream) { in WriteMethodHandles() argument
695 const uint32_t start = stream->Tell(); in WriteMethodHandles()
698 stream->AlignTo(SectionAlignment(DexFile::kDexTypeMethodHandleItem)); in WriteMethodHandles()
703 stream->Write(method_handle_buff, method_handle->GetSize()); in WriteMethodHandles()
705 if (compute_offsets_ && start != stream->Tell()) { in WriteMethodHandles()
710 void DexWriter::WriteMapItems(Stream* stream, MapItemQueue* queue) { in WriteMapItems() argument
713 stream->Write(&map_list_size, sizeof(map_list_size)); in WriteMapItems()
721 stream->Write(&map_item, sizeof(map_item)); in WriteMapItems()
726 void DexWriter::GenerateAndWriteMapItems(Stream* stream) { in GenerateAndWriteMapItems() argument
790 WriteMapItems(stream, &queue); in GenerateAndWriteMapItems()
793 void DexWriter::WriteHeader(Stream* stream) { in WriteHeader() argument
833 stream->Seek(0); in WriteHeader()
834 stream->Overwrite(reinterpret_cast<uint8_t*>(&header), sizeof(header)); in WriteHeader()
845 Stream* stream = &stream_storage; in Write() local
848 stream->Seek(GetHeaderSize()); in Write()
852 const uint32_t string_ids_offset = stream->Tell(); in Write()
853 WriteStringIds(stream, /*reserve_only=*/ true); in Write()
854 WriteTypeIds(stream); in Write()
855 const uint32_t proto_ids_offset = stream->Tell(); in Write()
856 WriteProtoIds(stream, /*reserve_only=*/ true); in Write()
857 WriteFieldIds(stream); in Write()
858 WriteMethodIds(stream); in Write()
859 const uint32_t class_defs_offset = stream->Tell(); in Write()
860 WriteClassDefs(stream, /*reserve_only=*/ true); in Write()
861 const uint32_t call_site_ids_offset = stream->Tell(); in Write()
862 WriteCallSiteIds(stream, /*reserve_only=*/ true); in Write()
863 WriteMethodHandles(stream); in Write()
868 stream->AlignTo(kDataSectionAlignment); in Write()
869 data_offset_ = stream->Tell(); in Write()
874 const uint32_t code_items_offset = stream->Tell(); in Write()
875 WriteCodeItems(stream, /*reserve_only=*/ true); in Write()
877 WriteDebugInfoItems(stream); in Write()
880 Stream::ScopedSeek seek(stream, code_items_offset); in Write()
881 WriteCodeItems(stream, /*reserve_only=*/ false); in Write()
884 WriteEncodedArrays(stream); in Write()
885 WriteAnnotations(stream); in Write()
886 WriteAnnotationSets(stream); in Write()
887 WriteAnnotationSetRefs(stream); in Write()
888 WriteAnnotationsDirectories(stream); in Write()
889 WriteTypeLists(stream); in Write()
890 WriteClassDatas(stream); in Write()
891 WriteStringDatas(stream); in Write()
892 WriteHiddenapiClassData(stream); in Write()
896 Stream::ScopedSeek seek(stream, string_ids_offset); in Write()
897 WriteStringIds(stream, /*reserve_only=*/ false); in Write()
900 Stream::ScopedSeek seek(stream, proto_ids_offset); in Write()
901 WriteProtoIds(stream, /*reserve_only=*/ false); in Write()
904 Stream::ScopedSeek seek(stream, class_defs_offset); in Write()
905 WriteClassDefs(stream, /*reserve_only=*/ false); in Write()
908 Stream::ScopedSeek seek(stream, call_site_ids_offset); in Write()
909 WriteCallSiteIds(stream, /*reserve_only=*/ false); in Write()
914 stream->AlignTo(SectionAlignment(DexFile::kDexTypeMapList)); in Write()
915 header_->SetMapListOffset(stream->Tell()); in Write()
917 stream->Seek(header_->MapListOffset()); in Write()
919 GenerateAndWriteMapItems(stream); in Write()
920 stream->AlignTo(kDataSectionAlignment); in Write()
924 header_->SetDataSize(stream->Tell() - data_offset_); in Write()
938 header_->SetLinkOffset(stream->Tell()); in Write()
940 stream->Seek(header_->LinkOffset()); in Write()
942 stream->Write(&link_data[0], link_data.size()); in Write()
947 header_->SetFileSize(stream->Tell()); in Write()
949 WriteHeader(stream); in Write()
952 header_->SetChecksum(DexFile::CalculateChecksum(stream->Begin(), header_->FileSize())); in Write()
954 WriteHeader(stream); in Write()
987 void DexWriter::ProcessOffset(Stream* stream, dex_ir::Item* item) { in ProcessOffset() argument
989 item->SetOffset(stream->Tell()); in ProcessOffset()
992 stream->Seek(item->GetOffset()); in ProcessOffset()
996 void DexWriter::ProcessOffset(Stream* stream, dex_ir::CollectionBase* item) { in ProcessOffset() argument
998 item->SetOffset(stream->Tell()); in ProcessOffset()
1001 stream->Seek(item->GetOffset()); in ProcessOffset()