001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.objectmodel;
014
015 import org.vmmagic.unboxed.Address;
016 import org.vmmagic.unboxed.Word;
017
018 /**
019 * Interface of BootImage that is used to define object model classes.
020 */
021 public interface BootImageInterface {
022
023 /**
024 * Allocate space in data portion of bootimage. Moral equivalent of
025 * memory managers allocating raw storage at runtime.
026 * @param size the number of bytes to allocate
027 * @param align the alignment requested; must be a power of 2.
028 * @param offset the offset at which the alignment is desired.
029 */
030 Address allocateDataStorage(int size, int align, int offset);
031
032 /**
033 * Allocate space in code portion of bootimage. Moral equivalent of
034 * memory managers allocating raw storage at runtime.
035 * @param size the number of bytes to allocate
036 * @param align the alignment requested; must be a power of 2.
037 * @param offset the offset at which the alignment is desired.
038 */
039 Address allocateCodeStorage(int size, int align, int offset);
040
041 /**
042 * Fill in 1 byte of bootimage.
043 *
044 * @param offset offset of target from start of image, in bytes
045 * @param value value to write
046 */
047 void setByte(Address offset, int value);
048
049 /**
050 * Fill in 2 bytes of bootimage.
051 *
052 * @param offset offset of target from start of image, in bytes
053 * @param value value to write
054 */
055 void setHalfWord(Address offset, int value);
056
057 /**
058 * Fill in 4 bytes of bootimage, as numeric.
059 *
060 * @param offset offset of target from start of image, in bytes
061 * @param value value to write
062 */
063 void setFullWord(Address offset, int value);
064
065 /**
066 * Fill in 4/8 bytes of bootimage, as object reference.
067 *
068 * @param offset offset of target from start of image, in bytes
069 * @param value value to write
070 * @param objField true if this word is an object field (as opposed
071 * to a static, or tib, or some other metadata)
072 * @param root Does this slot contain a possible reference into the heap? (objField must also be true)
073 */
074 void setAddressWord(Address offset, Word value, boolean objField, boolean root);
075
076 /**
077 * Fill in 4 bytes of bootimage, as null object reference.
078 *
079 * @param offset offset of target from start of image, in bytes
080 * @param objField true if this word is an object field (as opposed
081 * to a static, or tib, or some other metadata)
082 * @param root Does this slot contain a possible reference into the heap? (objField must also be true)
083 */
084 void setNullAddressWord(Address offset, boolean objField, boolean root);
085
086 /**
087 * Fill in 8 bytes of bootimage.
088 *
089 * @param offset offset of target from start of image, in bytes
090 * @param value value to write
091 */
092 void setDoubleWord(Address offset, long value);
093 }