diff options
author | Marc Espie <espie@cvs.openbsd.org> | 1999-05-10 16:14:08 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 1999-05-10 16:14:08 +0000 |
commit | d077e4952475b4d4eb95c5c1298b066e30faa111 (patch) | |
tree | f544fb34e49e353bf75db63355cf162028859746 /usr.bin/strip | |
parent | c606ee6a29b096ead9a5b55824175725213f4afe (diff) |
Fixes endianess problems with old a.out tools. This makes building
some cross toolchains possible.
This also changes some utilities's behavior slightly:
- nm, strip, size now handle any a.out format they know about.
- ranlib complains if it detects mixed archives (several object
formats for different boxes).
In the presence of mixed objects, you still have file, ranlib or ld
to prevent you from getting too confused...
Diffstat (limited to 'usr.bin/strip')
-rw-r--r-- | usr.bin/strip/Makefile | 3 | ||||
-rw-r--r-- | usr.bin/strip/strip.c | 34 |
2 files changed, 24 insertions, 13 deletions
diff --git a/usr.bin/strip/Makefile b/usr.bin/strip/Makefile index 6443a4dea34..8adf1fa3205 100644 --- a/usr.bin/strip/Makefile +++ b/usr.bin/strip/Makefile @@ -1,9 +1,10 @@ -# $OpenBSD: Makefile,v 1.7 1998/05/11 07:41:23 niklas Exp $ +# $OpenBSD: Makefile,v 1.8 1999/05/10 16:14:07 espie Exp $ TARGET_MACHINE_ARCH?= ${MACHINE_ARCH} PROG= strip +CFLAGS+=-I${.CURDIR}/../nm .if ${TARGET_MACHINE_ARCH} != ${MACHINE_ARCH} # XXX should make this automatic .if ${TARGET_MACHINE_ARCH} == "i386" diff --git a/usr.bin/strip/strip.c b/usr.bin/strip/strip.c index 44aca452a37..29a18f332ce 100644 --- a/usr.bin/strip/strip.c +++ b/usr.bin/strip/strip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: strip.c,v 1.10 1998/05/11 07:41:25 niklas Exp $ */ +/* $OpenBSD: strip.c,v 1.11 1999/05/10 16:14:07 espie Exp $ */ /* * Copyright (c) 1988 Regents of the University of California. @@ -41,7 +41,7 @@ char copyright[] = #ifndef lint /*static char sccsid[] = "from: @(#)strip.c 5.8 (Berkeley) 11/6/91";*/ -static char rcsid[] = "$OpenBSD: strip.c,v 1.10 1998/05/11 07:41:25 niklas Exp $"; +static char rcsid[] = "$OpenBSD: strip.c,v 1.11 1999/05/10 16:14:07 espie Exp $"; #endif /* not lint */ #include <sys/param.h> @@ -56,6 +56,8 @@ static char rcsid[] = "$OpenBSD: strip.c,v 1.10 1998/05/11 07:41:25 niklas Exp $ #include <stdlib.h> #include <string.h> #include <err.h> +#include <ranlib.h> +#include "byte.c" #ifdef MID_MACHINE_OVERRIDE #undef MID_MACHINE @@ -120,17 +122,17 @@ main(argc, argv) (void)close(fd); ERROR(errno); } -#if (MID_MACHINE == MID_M68K) - if (N_BADMAG(*ep) || ((N_GETMID(*ep) != MID_MACHINE) && - (N_GETMID(*ep) != MID_M68K4K))) { -#else - if (N_BADMAG(*ep) || N_GETMID(*ep) != MID_MACHINE) { -#endif + if (BAD_OBJECT(*ep)) { munmap((caddr_t)ep, sb.st_size); (void)close(fd); ERROR(EFTYPE); } + /* since we're dealing with an mmap there, we have to convert once + for dealing with data in memory, and a second time for out + */ + fix_header_order(ep); errors |= sfcn(fn, fd, ep, &sb); + fix_header_order(ep); munmap((caddr_t)ep, sb.st_size); if (close(fd)) { ERROR(errno); @@ -216,6 +218,8 @@ s_stab(fn, fd, ep, sp) register int cnt, len, nsymcnt; register char *nstr, *nstrbase, *p, *strbase; register NLIST *sym, *nsym; + u_long allocsize; + int mid; NLIST *symbase; /* Quit if no symbols. */ @@ -227,6 +231,8 @@ s_stab(fn, fd, ep, sp) return 1; } + mid = N_GETMID(*ep); + /* * Initialize old and new symbol pointers. They both point to the * beginning of the symbol table in memory, since we're deleting @@ -240,7 +246,8 @@ s_stab(fn, fd, ep, sp) * of the string table. */ strbase = (char *)ep + N_STROFF(*ep); - if ((nstrbase = malloc((u_int)*(u_long *)strbase)) == NULL) { + allocsize = fix_long_order(*(u_long *)strbase, mid); + if ((nstrbase = malloc((u_int) allocsize)) == NULL) { warnx("%s", strerror(ENOMEM)); return 1; } @@ -251,7 +258,8 @@ s_stab(fn, fd, ep, sp) * copy it and save its string in the new string table. Keep * track of the number of symbols. */ - for (cnt = ep->a_syms / sizeof(NLIST); cnt--; ++sym) + for (cnt = ep->a_syms / sizeof(NLIST); cnt--; ++sym) { + fix_nlist_order(sym, mid); if (!(sym->n_type & N_STAB) && sym->strx) { *nsym = *sym; nsym->strx = nstr - nstrbase; @@ -267,14 +275,16 @@ s_stab(fn, fd, ep, sp) len = strlen(p) + 1; bcopy(p, nstr, len); nstr += len; - ++nsym; + fix_nlist_order(nsym++, mid); } + } /* Fill in new symbol table size. */ ep->a_syms = (nsym - symbase) * sizeof(NLIST); /* Fill in the new size of the string table. */ - *(u_long *)nstrbase = len = nstr - nstrbase; + len = nstr - nstrbase; + *(u_long *)nstrbase = fix_long_order(len, mid); /* * Copy the new string table into place. Nsym should be pointing |