Fix for dynamically linked functions returning structs. PR#2586/Pfaller
This commit is contained in:
parent
5b0728f9a2
commit
cc13fe98cb
@ -27,7 +27,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: mdprologue.S,v 1.3 1995/05/29 18:11:35 phil Exp $
|
* $Id: mdprologue.S,v 1.4 1996/07/31 06:22:41 phil Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -64,11 +64,13 @@ _rtl_entry:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
_binder_entry:
|
_binder_entry:
|
||||||
movd tos,r1 /* grab return address (within PLT) */
|
save [r0,r1,r2] /* preserve scratch registers */
|
||||||
movd r0,tos /* save r0 (for cerror) */
|
/* save r0 (for cerror) */
|
||||||
movzwd 0(r1),tos /* get function index */
|
/* save r1 (maybe static chain) */
|
||||||
addr -6(r1),tos /* point to PLT slot */
|
/* save r2 (maybe struct addr) */
|
||||||
|
addr -6(12(sp)),tos /* push address of PLT slot */
|
||||||
bsr _binder /* relocate function address */
|
bsr _binder /* relocate function address */
|
||||||
movd r0,tos /* prepare for jump */
|
cmpqd 0,tos
|
||||||
movd 12(sp),r0 /* restore r0 */
|
movd r0,12(sp) /* prepare for jump */
|
||||||
ret 12 /* jump into function */
|
restore [r0,r1,r2] /* restore scratch registers */
|
||||||
|
ret 0 /* jump into function */
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: mdprologue.S,v 1.3 1995/05/29 18:11:35 phil Exp $
|
* $Id: mdprologue.S,v 1.4 1996/07/31 06:22:41 phil Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -64,11 +64,13 @@ _rtl_entry:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
_binder_entry:
|
_binder_entry:
|
||||||
movd tos,r1 /* grab return address (within PLT) */
|
save [r0,r1,r2] /* preserve scratch registers */
|
||||||
movd r0,tos /* save r0 (for cerror) */
|
/* save r0 (for cerror) */
|
||||||
movzwd 0(r1),tos /* get function index */
|
/* save r1 (maybe static chain) */
|
||||||
addr -6(r1),tos /* point to PLT slot */
|
/* save r2 (maybe struct addr) */
|
||||||
|
addr -6(12(sp)),tos /* push address of PLT slot */
|
||||||
bsr _binder /* relocate function address */
|
bsr _binder /* relocate function address */
|
||||||
movd r0,tos /* prepare for jump */
|
cmpqd 0,tos
|
||||||
movd 12(sp),r0 /* restore r0 */
|
movd r0,12(sp) /* prepare for jump */
|
||||||
ret 12 /* jump into function */
|
restore [r0,r1,r2] /* restore scratch registers */
|
||||||
|
ret 0 /* jump into function */
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: mdprologue.S,v 1.3 1995/05/29 18:11:35 phil Exp $
|
* $Id: mdprologue.S,v 1.4 1996/07/31 06:22:41 phil Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -64,11 +64,13 @@ _rtl_entry:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
_binder_entry:
|
_binder_entry:
|
||||||
movd tos,r1 /* grab return address (within PLT) */
|
save [r0,r1,r2] /* preserve scratch registers */
|
||||||
movd r0,tos /* save r0 (for cerror) */
|
/* save r0 (for cerror) */
|
||||||
movzwd 0(r1),tos /* get function index */
|
/* save r1 (maybe static chain) */
|
||||||
addr -6(r1),tos /* point to PLT slot */
|
/* save r2 (maybe struct addr) */
|
||||||
|
addr -6(12(sp)),tos /* push address of PLT slot */
|
||||||
bsr _binder /* relocate function address */
|
bsr _binder /* relocate function address */
|
||||||
movd r0,tos /* prepare for jump */
|
cmpqd 0,tos
|
||||||
movd 12(sp),r0 /* restore r0 */
|
movd r0,12(sp) /* prepare for jump */
|
||||||
ret 12 /* jump into function */
|
restore [r0,r1,r2] /* restore scratch registers */
|
||||||
|
ret 0 /* jump into function */
|
||||||
|
Loading…
Reference in New Issue
Block a user