Add patchoat tool to Art.
Add a new executable called patchoat to art. This tool takes already
compiled images and oat files and changes their base address, acting as
a cheap form of relocation.
Add a --include-patch-information flag to dex2oat and code to add
required patch information to oat files created with the quick compiler.
Bug: 15358152
Change-Id: Ie0c580db45bb14ec180deb84930def6c3628d97d
diff --git a/runtime/image.h b/runtime/image.h
index abe1ad8..424a40b 100644
--- a/runtime/image.h
+++ b/runtime/image.h
@@ -84,6 +84,10 @@
return reinterpret_cast<byte*>(oat_file_end_);
}
+ off_t GetPatchDelta() const {
+ return patch_delta_;
+ }
+
size_t GetBitmapOffset() const {
return RoundUp(image_size_, kPageSize);
}
@@ -112,10 +116,11 @@
mirror::Object* GetImageRoot(ImageRoot image_root) const
SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
-
- private:
mirror::ObjectArray<mirror::Object>* GetImageRoots() const;
+ void RelocateImage(off_t delta);
+
+ private:
static const byte kImageMagic[4];
static const byte kImageVersion[4];
@@ -150,11 +155,13 @@
// .so files. Used for positioning a following alloc spaces.
uint32_t oat_file_end_;
+ // The total delta that this image has been patched.
+ int32_t patch_delta_;
+
// Absolute address of an Object[] of objects needed to reinitialize from an image.
uint32_t image_roots_;
friend class ImageWriter;
- friend class ImageDumper; // For GetImageRoots()
};
} // namespace art