diff --git a/gnu/usr.bin/ld/i386/md.c b/gnu/usr.bin/ld/i386/md.c index 546bd8e2e97..3c9610b127a 100644 --- a/gnu/usr.bin/ld/i386/md.c +++ b/gnu/usr.bin/ld/i386/md.c @@ -27,10 +27,11 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: md.c,v 1.12 1995/03/04 17:46:20 nate Exp $ + * $Id: md.c,v 1.13 1996/10/01 01:27:56 peter Exp $ */ #include +#include #include #include #include @@ -171,6 +172,23 @@ u_long addr; sp->reloc_index = 0; } +/* + * Bind a jmpslot to its target address. TARGET is where the jmpslot + * should jump to, and WHERE is a pointer to the jmpslot's address field. + * This is called by the dynamic linker when LD_BIND_NOW is set in the + * environment. + */ +void +md_bind_jmpslot(target, where) +u_long target; +caddr_t where; +{ + jmpslot_t *sp = + (jmpslot_t *) (where - offsetof(jmpslot_t, addr[0])); + + md_fix_jmpslot(sp, (long) sp, target); +} + /* * Update the relocation record for a RRS jmpslot. */ diff --git a/gnu/usr.bin/ld/i386/md.h b/gnu/usr.bin/ld/i386/md.h index f7ad9d406df..cdf3191f76d 100644 --- a/gnu/usr.bin/ld/i386/md.h +++ b/gnu/usr.bin/ld/i386/md.h @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: md.h,v 1.12 1995/03/04 17:46:21 nate Exp $ + * $Id: md.h,v 1.13 1996/10/01 01:27:58 peter Exp $ */ #ifndef __MD_H__ @@ -232,6 +232,7 @@ long md_get_addend __P((struct relocation_info *, unsigned char *)); void md_relocate __P((struct relocation_info *, long, unsigned char *, int)); void md_make_jmpslot __P((jmpslot_t *, long, long)); void md_fix_jmpslot __P((jmpslot_t *, long, u_long)); +void md_bind_jmpslot __P((u_long, caddr_t)); int md_make_reloc __P((struct relocation_info *, struct relocation_info *, int)); void md_make_jmpreloc __P((struct relocation_info *, struct relocation_info *, int)); void md_make_gotreloc __P((struct relocation_info *, struct relocation_info *, int)); diff --git a/libexec/rtld-aout/i386/md.c b/libexec/rtld-aout/i386/md.c index 546bd8e2e97..3c9610b127a 100644 --- a/libexec/rtld-aout/i386/md.c +++ b/libexec/rtld-aout/i386/md.c @@ -27,10 +27,11 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: md.c,v 1.12 1995/03/04 17:46:20 nate Exp $ + * $Id: md.c,v 1.13 1996/10/01 01:27:56 peter Exp $ */ #include +#include #include #include #include @@ -171,6 +172,23 @@ u_long addr; sp->reloc_index = 0; } +/* + * Bind a jmpslot to its target address. TARGET is where the jmpslot + * should jump to, and WHERE is a pointer to the jmpslot's address field. + * This is called by the dynamic linker when LD_BIND_NOW is set in the + * environment. + */ +void +md_bind_jmpslot(target, where) +u_long target; +caddr_t where; +{ + jmpslot_t *sp = + (jmpslot_t *) (where - offsetof(jmpslot_t, addr[0])); + + md_fix_jmpslot(sp, (long) sp, target); +} + /* * Update the relocation record for a RRS jmpslot. */ diff --git a/libexec/rtld-aout/i386/md.h b/libexec/rtld-aout/i386/md.h index f7ad9d406df..cdf3191f76d 100644 --- a/libexec/rtld-aout/i386/md.h +++ b/libexec/rtld-aout/i386/md.h @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: md.h,v 1.12 1995/03/04 17:46:21 nate Exp $ + * $Id: md.h,v 1.13 1996/10/01 01:27:58 peter Exp $ */ #ifndef __MD_H__ @@ -232,6 +232,7 @@ long md_get_addend __P((struct relocation_info *, unsigned char *)); void md_relocate __P((struct relocation_info *, long, unsigned char *, int)); void md_make_jmpslot __P((jmpslot_t *, long, long)); void md_fix_jmpslot __P((jmpslot_t *, long, u_long)); +void md_bind_jmpslot __P((u_long, caddr_t)); int md_make_reloc __P((struct relocation_info *, struct relocation_info *, int)); void md_make_jmpreloc __P((struct relocation_info *, struct relocation_info *, int)); void md_make_gotreloc __P((struct relocation_info *, struct relocation_info *, int));