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