rtld_start.S revision 1.2
11.2Skleink/* $NetBSD: rtld_start.S,v 1.2 1999/08/23 09:13:25 kleink Exp $ */ 21.1Skleink 31.1Skleink/*- 41.1Skleink * Copyright (c) 1999 The NetBSD Foundation, Inc. 51.1Skleink * All rights reserved. 61.1Skleink * 71.1Skleink * This code is derived from software contributed to The NetBSD Foundation 81.1Skleink * by Klaus Klein. 91.1Skleink * 101.1Skleink * Redistribution and use in source and binary forms, with or without 111.1Skleink * modification, are permitted provided that the following conditions 121.1Skleink * are met: 131.1Skleink * 1. Redistributions of source code must retain the above copyright 141.1Skleink * notice, this list of conditions and the following disclaimer. 151.1Skleink * 2. Redistributions in binary form must reproduce the above copyright 161.1Skleink * notice, this list of conditions and the following disclaimer in the 171.1Skleink * documentation and/or other materials provided with the distribution. 181.1Skleink * 3. All advertising materials mentioning features or use of this software 191.1Skleink * must display the following acknowledgement: 201.1Skleink * This product includes software developed by the NetBSD 211.1Skleink * Foundation, Inc. and its contributors. 221.1Skleink * 4. Neither the name of The NetBSD Foundation nor the names of its 231.1Skleink * contributors may be used to endorse or promote products derived 241.1Skleink * from this software without specific prior written permission. 251.1Skleink * 261.1Skleink * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 271.1Skleink * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 281.1Skleink * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 291.1Skleink * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 301.1Skleink * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 311.1Skleink * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 321.1Skleink * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 331.1Skleink * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 341.1Skleink * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 351.1Skleink * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 361.1Skleink * POSSIBILITY OF SUCH DAMAGE. 371.1Skleink */ 381.1Skleink 391.1Skleink#include <machine/asm.h> 401.1Skleink 411.1Skleink .text 421.2Skleink .align 4 431.1Skleink .globl .rtld_start 441.1Skleink .type .rtld_start,@function 451.1Skleink.rtld_start: 461.1Skleink subql #8,%sp | storage for obj and cleanup 471.1Skleink pea (%sp) | push sp 481.1Skleink jbsr _rtld@PLTPC | entry = _rtld(sp) 491.1Skleink addql #4,%sp | pop argument 501.1Skleink moveal (%sp)+,%a1 | cleanup 511.1Skleink moveal (%sp)+,%a0 | obj 521.1Skleink moveal %d0,%a3 531.1Skleink jmp (%a3) | Go for it! 541.1Skleink .size .rtld_start,.-.rtld_start 551.1Skleink 561.2Skleink .align 4 571.1Skleink .globl _rtld_bind_start 581.1Skleink .type _rtld_bind_start,@function 591.1Skleink_rtld_bind_start: 601.1Skleink moveml %d0-%d1/%a0-%a1,-(%sp) | preserve caller-saved registers 611.1Skleink movel 20(%sp),-(%sp) | push reloff 621.1Skleink movel (16+4)(%sp),-(%sp) | push obj 631.1Skleink jbsr _rtld_bind@PLTPC | %a0 = _rtld_bind(obj, reloff) 641.1Skleink addql #8,%sp | pop args 651.1Skleink movel %a0,(16+4)(%sp) | write fake `return' address over obj 661.1Skleink moveml (%sp)+,%d0-%d1/%a0-%a1 | restore caller-saved registers 671.1Skleink addql #4,%sp | skip reloff 681.1Skleink rts | `return' right into function 691.1Skleink .size _rtld_bind_start,.-_rtld_bind_start 70