/* * Stolen from glibc-2.2.2 by David Schleef */ .text .align 4 .globl _dl_linux_resolver .globl _dl_linux_resolve .type _dl_linux_resolve,@function _dl_linux_resolve: /* We need to save the registers used to pass parameters, and register 0, which is used by _mcount; the registers are saved in a stack frame. */ stwu 1,-64(1) stw 0,12(1) stw 3,16(1) stw 4,20(1) /* The code that calls this has put parameters for 'fixup' in r12 and r11. */ mr 3,12 stw 5,24(1) mr 4,11 stw 6,28(1) mflr 0 /* We also need to save some of the condition register fields. */ stw 7,32(1) stw 0,48(1) stw 8,36(1) mfcr 0 stw 9,40(1) stw 10,44(1) stw 0,8(1) bl _dl_linux_resolver@local /* 'fixup' returns the address we want to branch to. */ mtctr 3 /* Put the registers back... */ lwz 0,48(1) lwz 10,44(1) lwz 9,40(1) mtlr 0 lwz 8,36(1) lwz 0,8(1) lwz 7,32(1) lwz 6,28(1) mtcrf 0xFF,0 lwz 5,24(1) lwz 4,20(1) lwz 3,16(1) lwz 0,12(1) /* ...unwind the stack frame, and jump to the PLT entry we updated. */ addi 1,1,64 bctr .LFE2: .size _dl_linux_resolve,.LFE2-_dl_linux_resolve