diff --git a/libexec/ld.aout_so/Makefile b/libexec/ld.aout_so/Makefile index fff1427738d7..5e563aceea74 100644 --- a/libexec/ld.aout_so/Makefile +++ b/libexec/ld.aout_so/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.25 1998/08/13 07:34:06 mycroft Exp $ +# $NetBSD: Makefile,v 1.26 1998/12/17 11:34:10 pk Exp $ .if (${MACHINE_ARCH} == "i386") || \ (${MACHINE_ARCH} == "m68k") || \ @@ -6,13 +6,15 @@ (${MACHINE_ARCH} == "sparc") || \ (${MACHINE_ARCH} == "vax") || \ (${MACHINE_ARCH} == "arm32") + PROG= ld.so -SRCS= mdprologue.S rtld.c malloc.c shlib.c etc.c md.c vfprintf.c -CLIB= ${.CURDIR}/../../../../lib/libc +SRCS= mdprologue.S rtld.c malloc.c shlib.c md.c vfprintf.c +CLIB= ${.CURDIR}/../../lib/libc CLIBOBJ!=cd ${CLIB}; \ printf "xxx: .MAKE\n\t@echo \$${.OBJDIR}\n" | ${MAKE} -s -f- PICFLAG=-fpic -fno-function-cse -CPPFLAGS+=$(PICFLAG) -DRTLD -DLIBC_SCCS -I${CLIB}/include +CPPFLAGS+=$(PICFLAG) -DRTLD -DLIBC_SCCS \ + -I${CLIB}/include -I$(.CURDIR)/arch/$(MACHINE_ARCH) -I$(.CURDIR) .if defined(DEBUG) CPPFLAGS+=-DDEBUG .endif @@ -23,12 +25,11 @@ LDFLAGS+= -nostdlib -L${DESTDIR}/usr/lib .endif LDADD+= -lc_pic DPADD+= ${LIBC_PIC} -BINDIR= /usr/libexec HDRS= link.h INCS=${HDRS} INCSDIR=/usr/include -.PATH: ${CLIB}/stdio +.PATH: ${CLIB}/stdio $(.CURDIR)/arch/$(MACHINE_ARCH) $(PROG): $(LD) -o $(PROG) $(LDFLAGS) $(OBJS) $(LDADD) diff --git a/libexec/ld.aout_so/ld.h b/libexec/ld.aout_so/ld.h new file mode 100644 index 000000000000..f08af39ee42f --- /dev/null +++ b/libexec/ld.aout_so/ld.h @@ -0,0 +1,155 @@ +/* $NetBSD: ld.h,v 1.1 1998/12/17 11:34:10 pk Exp $ */ + +/*- + * Copyright (c) 1998 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Paul Kranenburg. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Definitions and functions prototypes shared between the + * link-editor, ld(1), and the run-time linker, ld.so(1). + */ + +#include "md.h" +#include "link.h" + +/* If compiled with GNU C, use the built-in alloca */ +#if defined(__GNUC__) || defined(sparc) +#define alloca __builtin_alloca +#endif + +/* Align to power-of-two boundary */ +#define PALIGN(x,p) (((x) + (u_long)(p) - 1) & (-(u_long)(p))) + +/* Align to machine dependent boundary */ +#define MALIGN(x) PALIGN(x,MAX_ALIGNMENT) + +#ifndef nounderscore +#define ETEXT_SYM "_etext" +#define EDATA_SYM "_edata" +#define END_SYM "_end" +#define DYN_SYM "__DYNAMIC" +#define GOT_SYM "__GLOBAL_OFFSET_TABLE_" +#define PLT_SYM "__PROCEDURE_LINKAGE_TABLE_" +#define LPREFIX 'L' +#else +#define ETEXT_SYM "etext" +#define EDATA_SYM "edata" +#define END_SYM "end" +#define DYN_SYM "_DYNAMIC" +#define GOT_SYM "_GLOBAL_OFFSET_TABLE_" +#define PLT_SYM "_PROCEDURE_LINKAGE_TABLE_" +#define LPREFIX '.' +#endif + +/* + * Default macros; these may be overridden in . + * Note: we only test the existence of RELOC_ADDRESS, so + * you should override all or nothing at all. + * + * See ld.c for an addtional information on their use. + */ +#ifndef RELOC_ADDRESS + +#define RELOC_ADDRESS(r) ((r)->r_address) +#define RELOC_EXTERN_P(r) ((r)->r_extern) +#define RELOC_TYPE(r) ((r)->r_symbolnum) +#define RELOC_SYMBOL(r) ((r)->r_symbolnum) +#define RELOC_MEMORY_SUB_P(r) 0 +#define RELOC_MEMORY_ADD_P(r) 1 +#undef RELOC_ADD_EXTRA +#define RELOC_PCREL_P(r) ((r)->r_pcrel) +#define RELOC_VALUE_RIGHTSHIFT(r) 0 +#if defined(RTLD) && defined(SUN_COMPAT) +#define RELOC_TARGET_SIZE(r) (2) /* !!!!! Sun BUG compatible */ +#else +#define RELOC_TARGET_SIZE(r) ((r)->r_length) +#endif +#define RELOC_TARGET_BITPOS(r) 0 +#define RELOC_TARGET_BITSIZE(r) 32 + +#define RELOC_JMPTAB_P(r) ((r)->r_jmptable) +#define RELOC_BASEREL_P(r) ((r)->r_baserel) +#define RELOC_RELATIVE_P(r) ((r)->r_relative) +#define RELOC_COPY_P(r) ((r)->r_copy) +#define RELOC_LAZY_P(r) ((r)->r_jmptable) + +#define CHECK_GOT_RELOC(r) ((r)->r_pcrel) +#define RELOC_PIC_TYPE(r) ((r)->r_baserel? \ + PIC_TYPE_LARGE:PIC_TYPE_NONE) + +#endif /* RELOC_ADDRESS */ + +/* A separately overridable macros */ +#ifndef RELOC_INIT_SEGMENT_RELOC +#define RELOC_INIT_SEGMENT_RELOC(r) +#endif + +#ifndef MAX_GOTOFF +#define MAX_GOTOFF(x) (LONG_MAX) +#endif + +#ifndef MIN_GOTOFF +#define MIN_GOTOFF(x) (LONG_MIN) +#endif + +#ifndef TEXT_START +#define TEXT_START(x) N_TXTADDR(x) +#endif + +#ifndef DATA_START +#define DATA_START(x) N_DATADDR(x) +#endif + +/* Macros dealing with the set element symbols defined in a.out.h */ +#define SET_ELEMENT_P(x) ((x) >= N_SETA && (x) <= (N_SETB|N_EXT)) +#define TYPE_OF_SET_ELEMENT(x) ((x) - N_SETA + N_ABS) + +#define N_ISWEAK(p) (N_BIND(p) & BIND_WEAK) + +/* Functions that must be provided by arch/md.c: */ +void md_init_header __P((struct exec *, int, int)); +long md_get_addend __P((struct relocation_info *, unsigned char *)); +void md_relocate __P((struct relocation_info *, long, unsigned char *, int)); +int md_make_reloc __P((struct relocation_info *, int)); +void md_set_breakpoint __P((long, long *)); +void md_make_jmpslot __P((jmpslot_t *, long, long)); +void md_fix_jmpslot __P((jmpslot_t *, long, u_long, 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)); +void md_make_cpyreloc __P((struct relocation_info *, + struct relocation_info *)); +int md_midcompat __P((struct exec *)); diff --git a/libexec/ld.aout_so/rtld.c b/libexec/ld.aout_so/rtld.c index 481cdf5f2f53..dae5425ebad3 100644 --- a/libexec/ld.aout_so/rtld.c +++ b/libexec/ld.aout_so/rtld.c @@ -1,4 +1,4 @@ -/* $NetBSD: rtld.c,v 1.70 1998/12/15 21:35:17 pk Exp $ */ +/* $NetBSD: rtld.c,v 1.71 1998/12/17 11:34:10 pk Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #ifndef MAP_COPY @@ -50,7 +49,6 @@ #include #include #include -#include #include #include #include @@ -61,6 +59,7 @@ #include #endif +#include "shlib.h" #include "ld.h" #ifdef __m68k__