• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%default { "routine":"NoRange","isrange":"0" }
2%verify "executed"
3%verify "unknown method"
4    /*
5     * Handle a static method call.
6     *
7     * for: invoke-static, invoke-static/range
8     */
9    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
10    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
11    movl      rSELF,%ecx
12    movzwl    2(rPC),%eax               # eax<- BBBB
13    movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
14    EXPORT_PC
15    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
16    movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
17    testl     %eax,%eax
18    jne       common_invokeMethod${routine}
19    movl      rSELF,%ecx
20    movl      offThread_method(%ecx),%ecx # ecx<- self->method
21    movzwl    2(rPC),%eax
22    movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
23    movl      %eax,OUT_ARG1(%esp)       # arg1<- BBBB
24    movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
25    movl      $$METHOD_STATIC,%eax
26    movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
27    call      dvmResolveMethod          # call(clazz,ref,flags)
28    testl     %eax,%eax                 # got null?
29    jne       common_invokeMethod${routine}
30    jmp       common_exceptionThrown
31