17655f29fabc0a12765de828914a18314382e5a35Ian Rogers/*
27655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Copyright (C) 2012 The Android Open Source Project
37655f29fabc0a12765de828914a18314382e5a35Ian Rogers *
47655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License");
57655f29fabc0a12765de828914a18314382e5a35Ian Rogers * you may not use this file except in compliance with the License.
67655f29fabc0a12765de828914a18314382e5a35Ian Rogers * You may obtain a copy of the License at
77655f29fabc0a12765de828914a18314382e5a35Ian Rogers *
87655f29fabc0a12765de828914a18314382e5a35Ian Rogers *      http://www.apache.org/licenses/LICENSE-2.0
97655f29fabc0a12765de828914a18314382e5a35Ian Rogers *
107655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Unless required by applicable law or agreed to in writing, software
117655f29fabc0a12765de828914a18314382e5a35Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS,
127655f29fabc0a12765de828914a18314382e5a35Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137655f29fabc0a12765de828914a18314382e5a35Ian Rogers * See the License for the specific language governing permissions and
147655f29fabc0a12765de828914a18314382e5a35Ian Rogers * limitations under the License.
157655f29fabc0a12765de828914a18314382e5a35Ian Rogers */
167655f29fabc0a12765de828914a18314382e5a35Ian Rogers
177655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "asm_support_arm.S"
187655f29fabc0a12765de828914a18314382e5a35Ian Rogers
197655f29fabc0a12765de828914a18314382e5a35Ian Rogers    /*
207655f29fabc0a12765de828914a18314382e5a35Ian Rogers     * Jni dlsym lookup stub.
217655f29fabc0a12765de828914a18314382e5a35Ian Rogers     */
227655f29fabc0a12765de828914a18314382e5a35Ian Rogers    .extern artFindNativeMethod
237655f29fabc0a12765de828914a18314382e5a35Ian RogersENTRY art_jni_dlsym_lookup_stub
247655f29fabc0a12765de828914a18314382e5a35Ian Rogers    push   {r0, r1, r2, r3, lr}           @ spill regs
257655f29fabc0a12765de828914a18314382e5a35Ian Rogers    .cfi_adjust_cfa_offset 20
267fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_rel_offset r0, 0
277fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_rel_offset r1, 4
287fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_rel_offset r2, 8
297fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_rel_offset r3, 12
307fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_rel_offset lr, 16
317655f29fabc0a12765de828914a18314382e5a35Ian Rogers    sub    sp, #12                        @ pad stack pointer to align frame
327655f29fabc0a12765de828914a18314382e5a35Ian Rogers    .cfi_adjust_cfa_offset 12
33468532ea115657709bc32ee498e701a4c71762d4Ian Rogers    blx    artFindNativeMethod
347655f29fabc0a12765de828914a18314382e5a35Ian Rogers    mov    r12, r0                        @ save result in r12
357655f29fabc0a12765de828914a18314382e5a35Ian Rogers    add    sp, #12                        @ restore stack pointer
367655f29fabc0a12765de828914a18314382e5a35Ian Rogers    .cfi_adjust_cfa_offset -12
37637859cef76e7d41f7fdfd1f1aea7d60b4a315dcIan Rogers    cbz    r0, 1f                         @ is method code null?
387655f29fabc0a12765de828914a18314382e5a35Ian Rogers    pop    {r0, r1, r2, r3, lr}           @ restore regs
397655f29fabc0a12765de828914a18314382e5a35Ian Rogers    .cfi_adjust_cfa_offset -20
407fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_restore r0
417fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_restore r1
427fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_restore r2
437fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_restore r3
447fae7c40e62ffe669fc224c57ed530b4d9c8da2cChristopher Ferris    .cfi_restore lr
45637859cef76e7d41f7fdfd1f1aea7d60b4a315dcIan Rogers    bx     r12                            @ if non-null, tail call to method's code
46637859cef76e7d41f7fdfd1f1aea7d60b4a315dcIan Rogers1:
47637859cef76e7d41f7fdfd1f1aea7d60b4a315dcIan Rogers    pop    {r0, r1, r2, r3, pc}           @ restore regs and return to caller to handle exception
487655f29fabc0a12765de828914a18314382e5a35Ian RogersEND art_jni_dlsym_lookup_stub
49