From b9aa930e449daf128eaaacfe2814dbb378708094 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 4 Mar 1995 17:49:20 +0000 Subject: Weak symbol support from NetBSD. This should bring us in sync with the NetBSD ld code except for local changes for dlopen() and friends and the hashing on the minor value of the shlibs. We should be binary compatible now with all their libraries. Obtained from: NetBSD --- libexec/rtld-aout/Makefile | 14 +---- libexec/rtld-aout/i386/md.c | 47 +++++++-------- libexec/rtld-aout/i386/md.h | 89 ++++++++++------------------- libexec/rtld-aout/i386/mdprologue.S | 64 ++++++--------------- libexec/rtld-aout/rtld.c | 110 ++++++++++++++++++------------------ libexec/rtld-aout/shlib.c | 4 +- 6 files changed, 132 insertions(+), 196 deletions(-) (limited to 'libexec') diff --git a/libexec/rtld-aout/Makefile b/libexec/rtld-aout/Makefile index d8c9165..7c81145 100644 --- a/libexec/rtld-aout/Makefile +++ b/libexec/rtld-aout/Makefile @@ -1,10 +1,9 @@ -# $Id: Makefile,v 1.12 1994/08/28 18:48:32 bde Exp $ +# $Id: Makefile,v 1.13 1994/09/18 19:41:38 swallace Exp $ PROG= ld.so SRCS= mdprologue.S rtld.c malloc.c shlib.c etc.c md.c NOMAN= noman LDDIR?= $(.CURDIR)/.. -#PICFLAG=-pic PICFLAG=-fpic CFLAGS+=-I$(LDDIR) -I$(.CURDIR) -I$(LDDIR)/$(MACHINE) $(PICFLAG) -DRTLD LDFLAGS+=-Bshareable -Bsymbolic -assert nosymbolic @@ -14,18 +13,9 @@ LDADD+= -lc_pic -lgcc_pic BINDIR= /usr/libexec INSTALLFLAGS+= -fschg -.SUFFIXES: .S - .PATH: $(LDDIR) $(LDDIR)/$(MACHINE) $(PROG): ${OBJS} ${DPADD} - $(LD) -o $(PROG) $(LDFLAGS) $(OBJS) $(LDDESTDIR) $(LDADD) - -.S.o: -.if defined(DESTDIR) - ${CPP} -I${DESTDIR}/usr/include ${.IMPSRC} | ${AS} ${ASFLAGS} -o ${.TARGET} - -.else - ${CPP} ${.IMPSRC} | ${AS} ${ASFLAGS} -o ${.TARGET} - -.endif + $(LD) -o $(PROG) $(LDFLAGS) $(OBJS) $(LDADD) .include diff --git a/libexec/rtld-aout/i386/md.c b/libexec/rtld-aout/i386/md.c index 40d9916..07271fc 100644 --- a/libexec/rtld-aout/i386/md.c +++ b/libexec/rtld-aout/i386/md.c @@ -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.c,v 1.10 1994/06/15 22:40:44 rich Exp $ + * $Id: md.c,v 1.11 1994/12/23 22:31:12 nate Exp $ */ #include @@ -58,9 +58,10 @@ unsigned char *addr; return get_short(addr); case 2: return get_long(addr); + default: + errx(1, "Unsupported relocation size: %x", + RELOC_TARGET_SIZE(rp)); } - errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp)); - return 0; } /* @@ -76,15 +77,17 @@ int relocatable_output; switch (RELOC_TARGET_SIZE(rp)) { case 0: put_byte(addr, relocation); - return; + break; case 1: put_short(addr, relocation); - return; + break; case 2: put_long(addr, relocation); - return; + break; + default: + errx(1, "Unsupported relocation size: %x", + RELOC_TARGET_SIZE(rp)); } - errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp)); } /* @@ -257,7 +260,7 @@ int magic, flags; #endif /* TEXT_START depends on the value of outheader.a_entry. */ - if (!(link_mode & SHAREABLE)) /*WAS: if (entry_symbol) */ + if (!(link_mode & SHAREABLE)) hp->a_entry = PAGSIZ; } #endif /* RTLD */ @@ -305,15 +308,15 @@ int n; for (; n; n--, r++) { r->r_address = md_swap_long(r->r_address); bits = ((int *)r)[1]; - r->r_symbolnum = md_swap_long(bits & 0xffffff00); + r->r_symbolnum = md_swap_long(bits) & 0x00ffffff; r->r_pcrel = (bits & 1); - r->r_length = ((bits >> 1) & 3); - r->r_extern = ((bits >> 3) & 1); - r->r_baserel = ((bits >> 4) & 1); - r->r_jmptable = ((bits >> 5) & 1); - r->r_relative = ((bits >> 6) & 1); + r->r_length = (bits >> 1) & 3; + r->r_extern = (bits >> 3) & 1; + r->r_baserel = (bits >> 4) & 1; + r->r_jmptable = (bits >> 5) & 1; + r->r_relative = (bits >> 6) & 1; #ifdef N_SIZE - r->r_copy = ((bits >> 7) & 1); + r->r_copy = (bits >> 7) & 1; #endif } } @@ -327,15 +330,15 @@ int n; for (; n; n--, r++) { r->r_address = md_swap_long(r->r_address); - bits = (md_swap_long(r->r_symbolnum) & 0xffffff00); + bits = md_swap_long(r->r_symbolnum) & 0xffffff00; bits |= (r->r_pcrel & 1); - bits |= ((r->r_length << 1) & 6); - bits |= ((r->r_extern << 3) & 8); - bits |= ((r->r_baserel << 4) & 0x10); - bits |= ((r->r_jmptable << 5) & 0x20); - bits |= ((r->r_relative << 6) & 0x40); + bits |= (r->r_length & 3) << 1; + bits |= (r->r_extern & 1) << 3; + bits |= (r->r_baserel & 1) << 4; + bits |= (r->r_jmptable & 1) << 5; + bits |= (r->r_relative & 1) << 6; #ifdef N_SIZE - bits |= ((r->r_copy << 7) & 0x80); + bits |= (r->r_copy & 1) << 7; #endif ((int *)r)[1] = bits; } diff --git a/libexec/rtld-aout/i386/md.h b/libexec/rtld-aout/i386/md.h index 89c1213..da5283d 100644 --- a/libexec/rtld-aout/i386/md.h +++ b/libexec/rtld-aout/i386/md.h @@ -27,14 +27,12 @@ * (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.10 1994/06/15 22:40:46 rich Exp $ + * $Id: md.h,v 1.11 1994/12/23 22:31:14 nate Exp $ */ #if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc - #define NEED_SWAP - #endif #define MAX_ALIGNMENT (sizeof (long)) @@ -144,6 +142,34 @@ typedef struct jmpslot { #ifdef CROSS_LINKER +#define get_byte(p) ( ((unsigned char *)(p))[0] ) + +#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \ + ( ((unsigned char *)(p))[1] ) \ + ) + +#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \ + ( ((unsigned char *)(p))[1] << 16) | \ + ( ((unsigned char *)(p))[2] << 8 ) | \ + ( ((unsigned char *)(p))[3] ) \ + ) + +#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); } + +#define put_short(p, v) { ((unsigned char *)(p))[0] = \ + ((((unsigned long)(v)) >> 8) & 0xff); \ + ((unsigned char *)(p))[1] = \ + ((((unsigned long)(v)) ) & 0xff); } + +#define put_long(p, v) { ((unsigned char *)(p))[0] = \ + ((((unsigned long)(v)) >> 24) & 0xff); \ + ((unsigned char *)(p))[1] = \ + ((((unsigned long)(v)) >> 16) & 0xff); \ + ((unsigned char *)(p))[2] = \ + ((((unsigned long)(v)) >> 8) & 0xff); \ + ((unsigned char *)(p))[3] = \ + ((((unsigned long)(v)) ) & 0xff); } + #ifdef NEED_SWAP /* Define IO byte swapping routines */ @@ -177,67 +203,11 @@ void md_swapout_jmpslot __P((jmpslot_t *, int)); #define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \ (((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000)) -#define get_byte(p) ( ((unsigned char *)(p))[0] ) - -#define get_short(p) ( ( ((unsigned char *)(p))[1] << 8) | \ - ( ((unsigned char *)(p))[0] ) \ - ) -#define get_long(p) ( ( ((unsigned char *)(p))[3] << 24) | \ - ( ((unsigned char *)(p))[2] << 16) | \ - ( ((unsigned char *)(p))[1] << 8 ) | \ - ( ((unsigned char *)(p))[0] ) \ - ) - -#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); } - -#define put_short(p, v) { ((unsigned char *)(p))[1] = \ - ((((unsigned long)(v)) >> 8) & 0xff); \ - ((unsigned char *)(p))[0] = \ - ((((unsigned long)(v)) ) & 0xff); } - -#define put_long(p, v) { ((unsigned char *)(p))[3] = \ - ((((unsigned long)(v)) >> 24) & 0xff); \ - ((unsigned char *)(p))[2] = \ - ((((unsigned long)(v)) >> 16) & 0xff); \ - ((unsigned char *)(p))[1] = \ - ((((unsigned long)(v)) >> 8) & 0xff); \ - ((unsigned char *)(p))[0] = \ - ((((unsigned long)(v)) ) & 0xff); } - #else /* We need not swap, but must pay attention to alignment: */ #define md_swap_short(x) (x) #define md_swap_long(x) (x) -#define get_byte(p) ( ((unsigned char *)(p))[0] ) - -#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \ - ( ((unsigned char *)(p))[1] ) \ - ) - -#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \ - ( ((unsigned char *)(p))[1] << 16) | \ - ( ((unsigned char *)(p))[2] << 8 ) | \ - ( ((unsigned char *)(p))[3] ) \ - ) - - -#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); } - -#define put_short(p, v) { ((unsigned char *)(p))[0] = \ - ((((unsigned long)(v)) >> 8) & 0xff); \ - ((unsigned char *)(p))[1] = \ - ((((unsigned long)(v)) ) & 0xff); } - -#define put_long(p, v) { ((unsigned char *)(p))[0] = \ - ((((unsigned long)(v)) >> 24) & 0xff); \ - ((unsigned char *)(p))[1] = \ - ((((unsigned long)(v)) >> 16) & 0xff); \ - ((unsigned char *)(p))[2] = \ - ((((unsigned long)(v)) >> 8) & 0xff); \ - ((unsigned char *)(p))[3] = \ - ((((unsigned long)(v)) ) & 0xff); } - #endif /* NEED_SWAP */ #else /* Not a cross linker: use native */ @@ -254,4 +224,3 @@ void md_swapout_jmpslot __P((jmpslot_t *, int)); #define put_long(where,what) (*(long *)(where) = (what)) #endif /* CROSS_LINKER */ - diff --git a/libexec/rtld-aout/i386/mdprologue.S b/libexec/rtld-aout/i386/mdprologue.S index 43640c6..1de0f72 100644 --- a/libexec/rtld-aout/i386/mdprologue.S +++ b/libexec/rtld-aout/i386/mdprologue.S @@ -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: mdprologue.S,v 1.4 1994/06/15 22:40:49 rich Exp $ + * $Id: mdprologue.S,v 1.7 1994/12/04 07:42:44 mycroft Exp $ */ /* @@ -35,7 +35,6 @@ */ #include -#define LCALL(x,y) .byte 0x9a ; .long y; .word x .text .globl _binder, _binder_entry @@ -46,76 +45,49 @@ _rtl: # crt0 calls us here pushl %ebp # Allocate stack frame - movl %esp, %ebp + movl %esp,%ebp pushl %ebx + call 1f # PIC function prologue 1: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-1b],%ebx - movl 12(%ebp), %eax # Extract data from interface structure + movl 12(%ebp),%eax # Extract data from interface structure movl (%eax),%eax # base address of ld.so (first field) # setup arguments for rtld() - movl (%ebx), %ecx # 1st entry in GOT is our __DYNAMIC - addl %eax, %ecx # add load address + movl (%ebx),%ecx # 1st entry in GOT is our __DYNAMIC + addl %eax,%ecx # add load address pushl %ecx # 3rd arg pushl 12(%ebp) # 2nd arg == &crt. pushl 8(%ebp) # 1st arg == version - addl _rtld@GOT(%ebx), %eax # relocate address of function + addl _rtld@GOT(%ebx),%eax # relocate address of function call %eax # _rtld(version, crtp, DYNAMIC) addl $12,%esp # pop arguments - movl -4(%ebp), %ebx # restore %ebx - leave # remove stack frame, - ret # let's rock + popl %ebx + leave # remove stack frame + ret # First call to a procedure generally comes through here for # binding. _binder_entry: pushl %ebp # setup a stack frame - movl %esp, %ebp + movl %esp,%ebp pusha # save all regs - movl $0, %eax # clear - movl 4(%ebp), %esi # return address in PLT - movw (%esi), %ax # get hold of relocation number - subl $6, %esi # make it point to the jmpslot + xorl %eax,%eax # clear + movl 4(%ebp),%esi # return address in PLT + movw (%esi),%ax # get hold of relocation number + subl $6,%esi # make it point to the jmpslot pushl %eax # pushd arguments pushl %esi # call _binder@PLT # _binder(rpc, index) - addl $8, %esp # pop arguments - movl %eax, 4(%ebp) # return value from _binder() == actual + addl $8,%esp # pop arguments + movl %eax,4(%ebp) # return value from _binder() == actual # address of function popa # restore regs leave # remove our stack frame ret - - # Special system call stubs which return real and effective user and group - # id's. Saves overhead of making separate calls for each. - # !! Relies on compatability option in BSD 4.three-and-a-half - - .globl _getreuid, _getregid -_getreuid: - lea SYS_getuid, %eax - LCALL(7,0) - jc out - movl 4(%esp), %ecx # get 1st arg - movl %eax, (%ecx) # put value in it - movl 8(%esp), %ecx # same for 2nd arg - movl %edx, (%ecx) # - ret # done - -_getregid: - lea SYS_getgid, %eax - LCALL(7,0) - jc out - movl 4(%esp), %ecx # get 1st arg - movl %eax, (%ecx) # put value in it - movl 8(%esp), %ecx # same for 2nd arg - movl %edx, (%ecx) # - ret # done - -out: jmp cerror@PLT # Call common error routine - diff --git a/libexec/rtld-aout/rtld.c b/libexec/rtld-aout/rtld.c index 6332911..c2e6021 100644 --- a/libexec/rtld-aout/rtld.c +++ b/libexec/rtld-aout/rtld.c @@ -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: rtld.c,v 1.20 1995/01/12 19:12:29 joerg Exp $ + * $Id: rtld.c,v 1.21 1995/02/07 13:33:42 jkh Exp $ */ #include @@ -38,9 +38,8 @@ #include #include #include -#ifndef BSD +#ifndef MAP_COPY #define MAP_COPY MAP_PRIVATE -#define MAP_ANON 0 #endif #include #include @@ -58,8 +57,19 @@ #include "ld.h" -#ifndef BSD /* Need do better than this */ -#define NEED_DEV_ZERO 1 +#ifndef MAP_ANON +#define MAP_ANON 0 +#define anon_open() do { \ + if ((anon_fd = open("/dev/zero", O_RDWR, 0)) == -1) \ + err("open: %s", "/dev/zero"); \ +} while (0) +#define anon_close() do { \ + (void)close(anon_fd); \ + anon_fd = -1; \ +} while (0) +#else +#define anon_open() +#define anon_close() #endif /* @@ -135,6 +145,7 @@ static int careful; static char __main_progname[] = "main"; static char *main_progname = __main_progname; static char us[] = "/usr/libexec/ld.so"; +static int anon_fd = -1; struct so_map *link_map_head, *main_map; struct so_map **link_map_tail = &link_map_head; @@ -166,14 +177,15 @@ static void init_map __P((struct so_map *, char *)); static char *rtfindlib __P((char *, int, int, int *)); void binder_entry __P((void)); long binder __P((jmpslot_t *)); -static void maphints __P((void)); -static void unmaphints __P((void)); static struct nzlist *lookup __P((char *, struct so_map **, int)); static inline struct rt_symbol *lookup_rts __P((char *)); static struct rt_symbol *enter_rts __P((char *, long, int, caddr_t, long, struct so_map *)); static void generror __P((char *, ...)); +static void maphints __P((void)); +static void unmaphints __P((void)); + static inline int strcmp (register const char *s1, register const char *s2) { @@ -251,6 +263,7 @@ struct _dynamic *dp; if (getenv("LD_NOSTD_PATH") == NULL) std_search_path(); + anon_open(); /* Load required objects into the process address space */ load_objects(crtp, dp); @@ -301,11 +314,12 @@ struct _dynamic *dp; ddp->dd_sym_loaded = 1; } - /* Forget hints so that hints file can go away if it is unlinked */ + /* Close the hints file */ unmaphints(); /* Close our file descriptor */ (void)close(crtp->crt_ldfd); + anon_close(); return 0; } @@ -511,9 +525,9 @@ again: return NULL; } - if ((addr = mmap(0, hdr.a_text + hdr.a_data, - PROT_READ|PROT_EXEC, - MAP_COPY, fd, 0)) == (caddr_t)-1) { + if ((addr = mmap(0, hdr.a_text + hdr.a_data + hdr.a_bss, + PROT_READ|PROT_EXEC, + MAP_COPY, fd, 0)) == (caddr_t)-1) { generror ("mmap failed for \"%s\" : %s", path, strerror (errno)); (void)close(fd); @@ -528,29 +542,17 @@ again: return NULL; } - (void)close(fd); - - fd = -1; -#ifdef NEED_DEV_ZERO - if ((fd = open("/dev/zero", O_RDWR, 0)) == -1) { - generror ("open failed for \"/dev/zero\" : %s", - strerror (errno)); - return NULL; - } -#endif - if (hdr.a_bss && mmap(addr + hdr.a_text + hdr.a_data, hdr.a_bss, - PROT_READ|PROT_WRITE|PROT_EXEC, - MAP_ANON|MAP_FIXED|MAP_COPY, - fd, hdr.a_text + hdr.a_data) == (caddr_t)-1) { + if (mmap(addr + hdr.a_text + hdr.a_data, hdr.a_bss, + PROT_READ|PROT_WRITE|PROT_EXEC, + MAP_ANON|MAP_COPY|MAP_FIXED, + anon_fd, 0) == (caddr_t)-1) { generror ("mmap failed for \"%s\" : %s", path, strerror (errno)); (void)close(fd); return NULL; - } + } -#ifdef NEED_DEV_ZERO - close(fd); -#endif + (void)close(fd); /* Assume _DYNAMIC is the first data item */ dp = (struct _dynamic *)(addr+hdr.a_text); @@ -634,7 +636,7 @@ caddr_t addr; if (getenv("LD_SUPPRESS_WARNINGS") == NULL && getenv("LD_WARN_NON_PURE_CODE") != NULL) - warnx("ld.so: warning: non pure code in %s at %x (%s)\n", + warnx("warning: non pure code in %s at %x (%s)", smp->som_path, r->r_address, sym); if (smp->som_write == 0 && @@ -884,7 +886,7 @@ lookup(name, src_map, strong) * Search all maps for a definition of NAME */ for (smp = link_map_head; smp; smp = smp->som_next) { - int buckets = LD_BUCKETS(smp->som_dynamic); + int buckets; long hashval; struct rrs_hash *hp; char *cp; @@ -896,10 +898,13 @@ lookup(name, src_map, strong) char *stringbase; int symsize; - if (LM_PRIVATE(smp)->spd_flags & RTLD_RTLD) + if (*src_map && smp != *src_map) continue; - if (*src_map && smp != *src_map) + if ((buckets = LD_BUCKETS(smp->som_dynamic)) == 0) + continue; + + if (LM_PRIVATE(smp)->spd_flags & RTLD_RTLD) continue; restart: @@ -1042,8 +1047,9 @@ binder(jsp) } +static int hfd; +static long hsize; static struct hints_header *hheader; -static long hmsize; static struct hints_bucket *hbuckets; static char *hstrtab; @@ -1053,52 +1059,47 @@ static char *hstrtab; maphints __P((void)) { caddr_t addr; - long msize; - int fd; - if ((fd = open(_PATH_LD_HINTS, O_RDONLY, 0)) == -1) { + if ((hfd = open(_PATH_LD_HINTS, O_RDONLY, 0)) == -1) { hheader = (struct hints_header *)-1; return; } - msize = PAGSIZ; - addr = mmap(0, msize, PROT_READ, MAP_COPY, fd, 0); + hsize = PAGSIZ; + addr = mmap(0, hsize, PROT_READ, MAP_COPY, hfd, 0); if (addr == (caddr_t)-1) { - close(fd); + close(hfd); hheader = (struct hints_header *)-1; return; } hheader = (struct hints_header *)addr; if (HH_BADMAG(*hheader)) { - munmap(addr, msize); - close(fd); + munmap(addr, hsize); + close(hfd); hheader = (struct hints_header *)-1; return; } if (hheader->hh_version != LD_HINTS_VERSION_1) { - munmap(addr, msize); - close(fd); + munmap(addr, hsize); + close(hfd); hheader = (struct hints_header *)-1; return; } - hmsize = msize; - if (hheader->hh_ehints > msize) { - hmsize = hheader->hh_ehints; - if (mmap(addr+msize, hheader->hh_ehints - msize, + if (hheader->hh_ehints > hsize) { + if (mmap(addr+hsize, hheader->hh_ehints - hsize, PROT_READ, MAP_COPY|MAP_FIXED, - fd, msize) != (caddr_t)(addr+msize)) { + hfd, hsize) != (caddr_t)(addr+hsize)) { - munmap((caddr_t)hheader, msize); - close(fd); + munmap((caddr_t)hheader, hsize); + close(hfd); hheader = (struct hints_header *)-1; return; } } - close(fd); hbuckets = (struct hints_bucket *)(addr + hheader->hh_hashtab); hstrtab = (char *)(addr + hheader->hh_strtab); @@ -1107,8 +1108,10 @@ maphints __P((void)) static void unmaphints() { + if (HINTS_VALID) { - munmap((caddr_t)hheader, hmsize); + munmap((caddr_t)hheader, hsize); + close(hfd); hheader = NULL; } } @@ -1404,4 +1407,3 @@ char *fmt; (void)write(1, buf, strlen(buf)); va_end(ap); } - diff --git a/libexec/rtld-aout/shlib.c b/libexec/rtld-aout/shlib.c index 058689a..38cb2d1 100644 --- a/libexec/rtld-aout/shlib.c +++ b/libexec/rtld-aout/shlib.c @@ -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: shlib.c,v 1.10 1994/12/23 22:30:51 nate Exp $ + * $Id: shlib.c,v 1.11 1995/01/05 02:36:29 swallace Exp $ */ #include @@ -54,7 +54,7 @@ char *strsep(); * Standard directories to search for files specified by -l. */ #ifndef STANDARD_SEARCH_DIRS -#define STANDARD_SEARCH_DIRS "/usr/lib", "/usr/X11R6/lib", "/usr/local/lib" +#define STANDARD_SEARCH_DIRS "/usr/lib", "/usr/local/lib" #endif /* -- cgit v1.1