diff options
author | paul <paul@FreeBSD.org> | 1993-11-09 04:44:30 +0000 |
---|---|---|
committer | paul <paul@FreeBSD.org> | 1993-11-09 04:44:30 +0000 |
commit | 7666248deac389d89c43c64f9e46c12ff3396b93 (patch) | |
tree | a5788ed4c0af262ba6f83173cf6c7713cc757141 /libexec | |
parent | fe43b03bfb7b42dc633611ddb6d8340211e2e957 (diff) | |
download | FreeBSD-src-7666248deac389d89c43c64f9e46c12ff3396b93.zip FreeBSD-src-7666248deac389d89c43c64f9e46c12ff3396b93.tar.gz |
Added -lgcc_pic to Makefile -- Why do we need this and NetBSD don't ??
Incorporated patch by Guido (inspired by Davidg) that fixes stack
problem. May not be final fix but it works more than the current method.
Diffstat (limited to 'libexec')
-rw-r--r-- | libexec/rtld-aout/Makefile | 4 | ||||
-rw-r--r-- | libexec/rtld-aout/rtld.c | 27 |
2 files changed, 13 insertions, 18 deletions
diff --git a/libexec/rtld-aout/Makefile b/libexec/rtld-aout/Makefile index a7975f6..06b215c 100644 --- a/libexec/rtld-aout/Makefile +++ b/libexec/rtld-aout/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.3 1993/11/08 13:20:39 pk Exp $ +# $Id: Makefile,v 1.3 1993/11/09 04:19:29 paul Exp $ PROG= ld.so SRCS= mdprologue.S rtld.c shlib.c etc.c md.c @@ -8,7 +8,7 @@ LDDIR?= $(.CURDIR)/.. PICFLAG=-fpic CFLAGS += -I$(LDDIR) -I$(.CURDIR) -I$(LDDIR)/$(MACHINE) -O $(PICFLAG) -DRTLD LDFLAGS = -Bshareable -Bsymbolic -assert nosymbolic -LIBS = -lc_pic +LIBS = -lc_pic -lgcc_pic BINDIR= /usr/libexec .PATH: $(LDDIR) $(LDDIR)/$(MACHINE) diff --git a/libexec/rtld-aout/rtld.c b/libexec/rtld-aout/rtld.c index e833787..9c4f0bc 100644 --- a/libexec/rtld-aout/rtld.c +++ b/libexec/rtld-aout/rtld.c @@ -27,9 +27,10 @@ * (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.8 1993/11/08 13:20:40 pk Exp $ + * $Id: rtld.c,v 1.2 1993/11/09 04:19:31 paul Exp $ */ +#include <machine/vmparam.h> #include <sys/param.h> #include <stdio.h> #include <stdlib.h> @@ -888,11 +889,10 @@ int *usehints; if (ld_path != NULL) { /* Prefer paths from LD_LIBRARY_PATH */ - while ((cp = strsep(&ld_path, ":")) != NULL) { + while ((cp = strtok(ld_path, ":")) != NULL) { + ld_path = NULL; hint = findhint(name, major, minor, cp); - if (ld_path) - *(ld_path-1) = ':'; if (hint) return hint; } @@ -951,18 +951,13 @@ init_brk() _exit(1); } - /* - * Walk to the top of stack - */ - if (*cpp) { - while (*cpp) cpp++; - cp = *--cpp; - while (*cp) cp++; - } else - cp = (char *)&cp; - - curbrk = (caddr_t) - (((long)(cp - 1 - rlim.rlim_cur) + PAGSIZ) & ~(PAGSIZ - 1)); + if (environ < USRSTACK - MAXSSIZ) { + curbrk = (caddr_t) + (((long)(USRSTACK - MAXSSIZ - rlim.rlim_cur) + PAGSIZ) & ~(PAGSIZ - 1)); + } else { + curbrk = (caddr_t) + (((long)(USRSTACK - rlim.rlim_cur) + PAGSIZ) & ~(PAGSIZ - 1)) ; + } } void |