summaryrefslogtreecommitdiffstats
path: root/vm/analysis/CodeVerify.h
diff options
context:
space:
mode:
authorjeffhao <jeffhao@google.com>2011-08-10 14:58:39 -0700
committerjeffhao <jeffhao@google.com>2011-08-12 13:41:04 -0700
commit43b06bc2d11c5fcd69c3554c0e525abad8480fab (patch)
tree04f7f3be224967f88e49751046e89aa47d3b9a1f /vm/analysis/CodeVerify.h
parent76166696d18dc019b9ab6ccf212f9420df143c51 (diff)
downloadandroid_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.h14
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,