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