blob: 069463067eba3f37fe260f11b9e285f8af7f24d7 [file] [log] [blame]
Brian Carlstrom4a289ed2011-08-16 17:17:49 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_IMAGE_H_
4#define ART_SRC_IMAGE_H_
5
6#include <string.h>
7
8#include "globals.h"
Brian Carlstroma663ea52011-08-19 23:33:41 -07009#include "object.h"
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070010
11namespace art {
12
13// header of image files written by ImageWriter, read and validated by Space.
14class ImageHeader {
15 public:
16 ImageHeader() {}
17
Brian Carlstrom16192862011-09-12 17:50:06 -070018 ImageHeader(uint32_t base_addr, uint32_t image_roots)
19 : base_addr_(base_addr), image_roots_(image_roots) {
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070020 memcpy(magic_, kImageMagic, sizeof(kImageMagic));
21 memcpy(version_, kImageVersion, sizeof(kImageVersion));
22 }
23
24 bool IsValid() {
25 if (memcmp(magic_, kImageMagic, sizeof(kImageMagic) != 0)) {
26 return false;
27 }
28 if (memcmp(version_, kImageVersion, sizeof(kImageVersion) != 0)) {
29 return false;
30 }
31 return true;
32 }
33
34 byte* GetBaseAddr() const {
35 return reinterpret_cast<byte*>(base_addr_);
36 }
37
Brian Carlstrom16192862011-09-12 17:50:06 -070038 enum ImageRoot {
39 kJniStubArray,
40 kImageRootsMax,
41 };
42
43 Object* GetImageRoot(ImageRoot image_root) const {
44 return reinterpret_cast<ObjectArray<Object>*>(image_roots_)->Get(image_root);
45 }
46
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070047 private:
48 static const byte kImageMagic[4];
49 static const byte kImageVersion[4];
50
51 byte magic_[4];
52 byte version_[4];
Brian Carlstroma663ea52011-08-19 23:33:41 -070053
54 // required base address for mapping the image.
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070055 uint32_t base_addr_;
Brian Carlstrom16192862011-09-12 17:50:06 -070056
57 // absolute address of an Object[] of objects needed to reinitialize from an image
58 uint32_t image_roots_;
59
60 friend class ImageWriter;
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070061};
62
63} // namespace art
64
65#endif // ART_SRC_IMAGE_H_