diff options
author | jeffhao <jeffhao@google.com> | 2011-08-10 14:58:39 -0700 |
---|---|---|
committer | jeffhao <jeffhao@google.com> | 2011-08-12 13:41:04 -0700 |
commit | 43b06bc2d11c5fcd69c3554c0e525abad8480fab (patch) | |
tree | 04f7f3be224967f88e49751046e89aa47d3b9a1f /vm/analysis/CodeVerify.h | |
parent | 76166696d18dc019b9ab6ccf212f9420df143c51 (diff) | |
download | android_dalvik-43b06bc2d11c5fcd69c3554c0e525abad8480fab.tar.gz android_dalvik-43b06bc2d11c5fcd69c3554c0e525abad8480fab.tar.bz2 android_dalvik-43b06bc2d11c5fcd69c3554c0e525abad8480fab.zip |
Dexopt verifier checks that int/float and double/long uses do not mix.
Added new types to dexopt indicating a type is derived from a constant,
which may or may not be floating point. After such a value is used, its
type can be determined, and the verifier enforces that it is always used
that way afterwards.
Change-Id: I150deaa162aec17bcc9c3e3200bc0350ae5b3f24
Diffstat (limited to 'vm/analysis/CodeVerify.h')
-rw-r--r-- | vm/analysis/CodeVerify.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/vm/analysis/CodeVerify.h b/vm/analysis/CodeVerify.h index 51bffd867..58578950d 100644 --- a/vm/analysis/CodeVerify.h +++ b/vm/analysis/CodeVerify.h @@ -65,19 +65,27 @@ enum { * Category-1nr types. The order of these is chiseled into a couple * of tables, so don't add, remove, or reorder if you can avoid it. */ -#define kRegType1nrSTART kRegTypeFloat - kRegTypeFloat, +#define kRegType1nrSTART kRegTypeZero kRegTypeZero, /* 32-bit 0, could be Boolean, Int, Float, or Ref */ kRegTypeOne, /* 32-bit 1, could be Boolean, Int, Float */ kRegTypeBoolean, /* must be 0 or 1 */ + kRegTypeConstPosByte, /* const derived byte, known positive */ + kRegTypeConstByte, /* const derived byte */ + kRegTypeConstPosShort, /* const derived short, known positive */ + kRegTypeConstShort, /* const derived short */ + kRegTypeConstChar, /* const derived char */ + kRegTypeConstInteger, /* const derived integer */ kRegTypePosByte, /* byte, known positive (can become char) */ kRegTypeByte, kRegTypePosShort, /* short, known positive (can become char) */ kRegTypeShort, kRegTypeChar, kRegTypeInteger, -#define kRegType1nrEND kRegTypeInteger + kRegTypeFloat, +#define kRegType1nrEND kRegTypeFloat + kRegTypeConstLo, /* const derived wide, lower half */ + kRegTypeConstHi, /* const derived wide, upper half */ kRegTypeLongLo, /* lower-numbered register; endian-independent */ kRegTypeLongHi, kRegTypeDoubleLo, |