diff options
Diffstat (limited to 'libdex')
| -rw-r--r-- | libdex/InstrUtils.c | 445 | ||||
| -rw-r--r-- | libdex/InstrUtils.h | 2 |
2 files changed, 443 insertions, 4 deletions
diff --git a/libdex/InstrUtils.c b/libdex/InstrUtils.c index 01c8311a9..ab15c816e 100644 --- a/libdex/InstrUtils.c +++ b/libdex/InstrUtils.c @@ -16,11 +16,450 @@ /* * Dalvik instruction utility functions. + * + * IMPORTANT NOTE: Much of the contents of this file are generated + * automatically by the opcode-gen tool. Any edits to the generated + * sections will get wiped out the next time the tool is run. */ -#include "InstrUtils.h" +#include "InstrUtils.h" #include <stdlib.h> +#if 0 +/* coming soon! */ + +/* + * Table that maps each opcode to the full width of instructions that + * use that opcode, in (16-bit) code units. Unimplemented opcodes as + * well as the "breakpoint" opcode have a width of zero. + */ +static InstructionWidth gOpcodeWidthTable[kNumDalvikInstructions] = { + // BEGIN(libdex-widths); GENERATED AUTOMATICALLY BY opcode-gen + 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 3, 2, 2, 3, 5, 2, 2, 3, 2, 1, 1, 2, + 2, 1, 2, 2, 3, 3, 3, 1, 1, 2, 3, 3, 3, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 0, 3, 3, 3, 3, 3, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 3, 3, + 3, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0, + // END(libdex-widths) +}; + +/* + * Table that maps each opcode to the flags associated with that + * opcode. + */ +static InstructionFlags gOpcodeFlagsTable[kNumDalvikInstructions] = { + // BEGIN(libdex-flags); GENERATED AUTOMATICALLY BY opcode-gen + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanReturn, + kInstrCanReturn, + kInstrCanReturn, + kInstrCanReturn, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanThrow, + kInstrCanBranch, + kInstrCanBranch, + kInstrCanBranch, + kInstrCanContinue|kInstrCanSwitch, + kInstrCanContinue|kInstrCanSwitch, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + kInstrCanContinue|kInstrCanBranch, + 0, + 0, + 0, + 0, + 0, + 0, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + 0, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + 0, + 0, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + 0, + kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanReturn, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + 0, + // END(libdex-flags) +}; + +/* + * Table that maps each opcode to the instruction format associated + * that opcode. + */ +static InstructionFormat gOpcodeFormatTable[kNumDalvikInstructions] = { + // BEGIN(libdex-formats); GENERATED AUTOMATICALLY BY opcode-gen + kFmt10x, kFmt12x, kFmt22x, kFmt32x, kFmt12x, kFmt22x, kFmt32x, + kFmt12x, kFmt22x, kFmt32x, kFmt11x, kFmt11x, kFmt11x, kFmt11x, + kFmt10x, kFmt11x, kFmt11x, kFmt11x, kFmt11n, kFmt21s, kFmt31i, + kFmt21h, kFmt21s, kFmt31i, kFmt51l, kFmt21h, kFmt21c, kFmt31c, + kFmt21c, kFmt11x, kFmt11x, kFmt21c, kFmt22c, kFmt12x, kFmt21c, + kFmt22c, kFmt35c, kFmt3rc, kFmt31t, kFmt11x, kFmt10t, kFmt20t, + kFmt30t, kFmt31t, kFmt31t, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt22t, kFmt22t, kFmt22t, kFmt22t, kFmt22t, kFmt22t, + kFmt21t, kFmt21t, kFmt21t, kFmt21t, kFmt21t, kFmt21t, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt22c, kFmt22c, + kFmt22c, kFmt22c, kFmt22c, kFmt22c, kFmt22c, kFmt22c, kFmt22c, + kFmt22c, kFmt22c, kFmt22c, kFmt22c, kFmt22c, kFmt21c, kFmt21c, + kFmt21c, kFmt21c, kFmt21c, kFmt21c, kFmt21c, kFmt21c, kFmt21c, + kFmt21c, kFmt21c, kFmt21c, kFmt21c, kFmt21c, kFmt35c, kFmt35c, + kFmt35c, kFmt35c, kFmt35c, kFmt00x, kFmt3rc, kFmt3rc, kFmt3rc, + kFmt3rc, kFmt3rc, kFmt00x, kFmt00x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, kFmt23x, + kFmt23x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, + kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt12x, kFmt22s, kFmt22s, + kFmt22s, kFmt22s, kFmt22s, kFmt22s, kFmt22s, kFmt22s, kFmt22b, + kFmt22b, kFmt22b, kFmt22b, kFmt22b, kFmt22b, kFmt22b, kFmt22b, + kFmt22b, kFmt22b, kFmt22b, kFmt22c, kFmt22c, kFmt21c, kFmt21c, + kFmt22c, kFmt22c, kFmt22c, kFmt21c, kFmt21c, kFmt00x, kFmt20bc, + kFmt35mi, kFmt3rmi, kFmt35c, kFmt10x, kFmt22cs, kFmt22cs, kFmt22cs, + kFmt22cs, kFmt22cs, kFmt22cs, kFmt35ms, kFmt3rms, kFmt35ms, kFmt3rms, + kFmt22c, kFmt21c, kFmt21c, kFmt00x, + // END(libdex-formats) +}; + +/* + * Table that maps each opcode to the index type implied by that + * opcode. + */ +static InstructionIndexType gOpcodeIndexTypeTable[kNumDalvikInstructions] = { + // BEGIN(libdex-index-types); GENERATED AUTOMATICALLY BY opcode-gen + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexStringRef, + kIndexStringRef, kIndexTypeRef, kIndexNone, + kIndexNone, kIndexTypeRef, kIndexTypeRef, + kIndexNone, kIndexTypeRef, kIndexTypeRef, + kIndexTypeRef, kIndexTypeRef, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexMethodRef, + kIndexMethodRef, kIndexMethodRef, kIndexMethodRef, + kIndexMethodRef, kIndexUnknown, kIndexMethodRef, + kIndexMethodRef, kIndexMethodRef, kIndexMethodRef, + kIndexMethodRef, kIndexUnknown, kIndexUnknown, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexNone, + kIndexNone, kIndexNone, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexUnknown, + kIndexVaries, kIndexInlineMethod, kIndexInlineMethod, + kIndexMethodRef, kIndexNone, kIndexFieldOffset, + kIndexFieldOffset, kIndexFieldOffset, kIndexFieldOffset, + kIndexFieldOffset, kIndexFieldOffset, kIndexVtableOffset, + kIndexVtableOffset, kIndexVtableOffset, kIndexVtableOffset, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexUnknown, + // END(libdex-index-types) +}; +#endif /* * Generate a table that holds the width of all instructions. @@ -691,7 +1130,7 @@ InstructionFormat* dexCreateInstrFormatTable(void) for (i = 0; i < kNumDalvikInstructions; i++) { OpCode opc = (OpCode) i; - InstructionFormat fmt = kFmtUnknown; + InstructionFormat fmt = kFmt00x; switch (opc) { case OP_GOTO: @@ -1024,7 +1463,7 @@ InstructionFormat* dexCreateInstrFormatTable(void) case OP_UNUSED_7A: case OP_BREAKPOINT: case OP_UNUSED_FF: - fmt = kFmtUnknown; + fmt = kFmt00x; break; /* diff --git a/libdex/InstrUtils.h b/libdex/InstrUtils.h index e65a1bf72..44e5af24d 100644 --- a/libdex/InstrUtils.h +++ b/libdex/InstrUtils.h @@ -38,7 +38,7 @@ */ typedef unsigned char InstructionFormat; enum InstructionFormat { - kFmtUnknown = 0, + kFmt00x = 0, // unknown format (also used for "breakpoint" opcode) kFmt10x, // op kFmt12x, // op vA, vB kFmt11n, // op vA, #+B |
