1b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith/* 2b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * Copyright (C) 2014 The Android Open Source Project 3b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * 4b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * Licensed under the Apache License, Version 2.0 (the "License"); 5b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * you may not use this file except in compliance with the License. 6b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * You may obtain a copy of the License at 7b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * 8b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * http://www.apache.org/licenses/LICENSE-2.0 9b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * 10b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * Unless required by applicable law or agreed to in writing, software 11b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * distributed under the License is distributed on an "AS IS" BASIS, 12b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * See the License for the specific language governing permissions and 14b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * limitations under the License. 15b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith */ 16b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith 17b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith#include "asm_support_arm64.S" 18b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith 19b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith /* 20b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith * Jni dlsym lookup stub. 21b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith */ 22b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith .extern artFindNativeMethod 2375b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu 2475b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu // TODO: Add CFI directives. 2575b9113b2b0a5807043af2a669a93d1579af8e2cSerban ConstantinescuENTRY art_jni_dlsym_lookup_stub 2675b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu // spill regs. 2775b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp x29, x30, [sp, #-16]! 2875b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu mov x29, sp 2975b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp d6, d7, [sp, #-16]! 3075b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp d4, d5, [sp, #-16]! 3175b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp d2, d3, [sp, #-16]! 3275b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp d0, d1, [sp, #-16]! 3375b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp x6, x7, [sp, #-16]! 3475b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp x4, x5, [sp, #-16]! 3575b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp x2, x3, [sp, #-16]! 3675b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu stp x0, x1, [sp, #-16]! 3775b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu 3875b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu bl artFindNativeMethod 3975b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu mov x17, x0 // store result in scratch reg. 4075b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu 4175b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu // load spill regs. 4275b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp x0, x1, [sp], #16 4375b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp x2, x3, [sp], #16 4475b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp x4, x5, [sp], #16 4575b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp x6, x7, [sp], #16 4675b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp d0, d1, [sp], #16 4775b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp d2, d3, [sp], #16 4875b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp d4, d5, [sp], #16 4975b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp d6, d7, [sp], #16 5075b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ldp x29, x30, [sp], #16 5175b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu 5275b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu cbz x17, 1f // is method code null ? 5375b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu br x17 // if non-null, tail call to method's code. 5475b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu 5575b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu1: 5675b9113b2b0a5807043af2a669a93d1579af8e2cSerban Constantinescu ret // restore regs and return to caller to handle exception. 5775b9113b2b0a5807043af2a669a93d1579af8e2cSerban ConstantinescuEND art_jni_dlsym_lookup_stub 58