
/* This code is used in dl-runtime.c to call the `fixup' function
   and then redirect to the address it returns. */
/* We assume that R3 contain relocation offset and R4 contains
   link_map (_DYNAMIC). This must be consistent with the JUMP_SLOT
   layout generated by binutils. */

/* Based on glibc 2.3.6, dl-machine.h */
/*
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

.text
.align 4
.globl _dl_linux_resolver
.globl _dl_linux_resolve
.type  _dl_linux_resolve,@function

_dl_linux_resolve:
    addik r1,r1,-40
    swi   r5,r1,12
    swi   r6,r1,16
    swi   r7,r1,20
    swi   r8,r1,24
    swi   r9,r1,28
    swi   r10,r1,32
    swi   r15,r1,0
    addk r5,r0,r4
    brlid r15, _dl_linux_resolver
    addk r6,r0,r3; /* delay slot */
    lwi   r10,r1,32
    lwi   r9,r1,28
    lwi   r8,r1,24
    lwi   r7,r1,20
    lwi   r6,r1,16
    lwi   r5,r1,12
    lwi   r15,r1,0
    brad  r3
    addik r1,r1,40; /* delay slot */
    .size _dl_linux_resolve, . - _dl_linux_resolve
