189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%default { "routine":"NoRange","isrange":"0" } 289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "executed" 389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "unknown method" 489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* 589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * Handle a static method call. 689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * 789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project * for: invoke-static, invoke-static/range 889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project */ 989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */ 1089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */ 1189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 1289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 1389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex 1489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project EXPORT_PC() 1589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offDvmDex_pResMethods(%ecx),%ecx # ecx<- pDvmDex->pResMethods 1689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved methodToCall 1789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax 18c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethod${routine} 1989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project GET_GLUE(%ecx) 2089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offGlue_method(%ecx),%ecx # ecx<- glue->method 2189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movzwl 2(rPC),%eax 2289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl offMethod_clazz(%ecx),%ecx# ecx<- method->clazz 2389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG1(%esp) # arg1<- BBBB 2489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %ecx,OUT_ARG0(%esp) # arg0<- clazz 2589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp .L${opcode}_continue 2689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%break 2789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project 2889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L${opcode}_continue: 2989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl $$METHOD_STATIC,%eax 3089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project movl %eax,OUT_ARG2(%esp) # arg2<- flags 3189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project SPILL(rPC) 3289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project call dvmResolveMethod # call(clazz,ref,flags) 3389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project UNSPILL(rPC) 3489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project testl %eax,%eax # got null? 35c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch jne common_invokeMethod${routine} 3689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project jmp common_exceptionThrown 37