diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2008-06-04 21:12:51 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2008-06-04 21:12:51 +0000 |
commit | 27c67008ddea42303263824c8d145cb52ac76acb (patch) | |
tree | 0587195c442101efe5ca5d09279d74fdef466e8a /usr.bin | |
parent | 8e4b93b0d63335923d0a9a19013170d078bcbd43 (diff) |
olf support starts to die (easy stuff first); ok miod
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/Makefile | 4 | ||||
-rw-r--r-- | usr.bin/elf2olf/Makefile | 8 | ||||
-rw-r--r-- | usr.bin/elf2olf/elf2olf.1 | 113 | ||||
-rw-r--r-- | usr.bin/elf2olf/elf2olf.c | 262 |
4 files changed, 2 insertions, 385 deletions
diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 3f52b83db26..dc46cc66dec 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.108 2008/05/21 19:48:50 miod Exp $ +# $OpenBSD: Makefile,v 1.109 2008/06/04 21:12:49 deraadt Exp $ .include <bsd.own.mk> @@ -6,7 +6,7 @@ SUBDIR= apply apropos ar arch asa asn1_compile at aucat audioctl awk banner \ basename bc bdes bgplg \ biff cal calendar cap_mkdb cdio checknr chpass cmp col colcrt colrm \ column comm compile_et compress cpp crontab csplit ctags cut \ - dc deroff diff diff3 dirname du elf2olf encrypt env expand false file \ + dc deroff diff diff3 dirname du encrypt env expand false file \ file2c find fgen finger fmt fold from fsplit fstat ftp gencat getcap \ getconf getent getopt gprof grep gzsig head hexdump id indent \ infocmp ipcrm ipcs \ diff --git a/usr.bin/elf2olf/Makefile b/usr.bin/elf2olf/Makefile deleted file mode 100644 index 8b17f488d42..00000000000 --- a/usr.bin/elf2olf/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $OpenBSD: Makefile,v 1.5 1996/12/08 20:59:20 tholo Exp $ - -PROG= elf2olf -CPPFLAGS+= -DOS_ID=OOS_OPENBSD -LINKS= ${BINDIR}/elf2olf ${BINDIR}/olf2elf -MLINKS= elf2olf.1 olf2elf.1 - -.include <bsd.prog.mk> diff --git a/usr.bin/elf2olf/elf2olf.1 b/usr.bin/elf2olf/elf2olf.1 deleted file mode 100644 index 4e4919c675b..00000000000 --- a/usr.bin/elf2olf/elf2olf.1 +++ /dev/null @@ -1,113 +0,0 @@ -.\" $OpenBSD: elf2olf.1,v 1.15 2007/05/31 19:20:09 jmc Exp $ -.\" -.\" Copyright (c) 1996, 1997 Erik Theisen. -.\" All rights reserved. -.\" -.\" 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. The name of the author may not be used to endorse or promote products -.\" derived from this software without specific prior written permission -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -.\" -.\" @(#)$Id: elf2olf.1,v 1.15 2007/05/31 19:20:09 jmc Exp $ -.\" -.Dd $Mdocdate: May 31 2007 $ -.Dt ELF2OLF 1 -.Os -.Sh NAME -.Nm elf2olf , -.Nm olf2elf -.Nd convert between ELF and OLF object module format -.Sh SYNOPSIS -.Nm elf2olf -.Op Fl v -.Op Fl o Ar opsys -.Ar module ... -.Nm olf2elf -.Op Fl v -.Ar -.Sh DESCRIPTION -The -.Nm elf2olf -utility reads the specified -.Em ELF -version 1 module operands and converts them to the default operating system's -.Em OLF -object module format. -.Pp -The -.Nm olf2elf -utility reverses the process. -The -.Ar module -operands are processed in command line order. -.Pp -The options are as follows: -.Bl -tag -width Ds -.It Fl o Ar opsys -Specifies the operating system -.Em OLF -tag -.Em "opsys" -as follows: -.Pp -.Bl -tag -width Ds -compact -.It Ta Pa "openbsd" Ta "OpenBSD" -.It Ta Pa "netbsd" Ta "NetBSD" -.It Ta Pa "freebsd" Ta "FreeBSD" -.It Ta Pa "44bsd" Ta "4.4BSD" -.It Ta Pa "linux" Ta "Linux" -.It Ta Pa "svr4" Ta "AT&T System V Release 4" -.It Ta Pa "esix" Ta "esix UNIX" -.It Ta Pa "solaris" Ta "SunSoft Solaris" -.It Ta Pa "irix" Ta "SGI IRIX" -.It Ta Pa "sco " Ta "SCO UNIX" -.It Ta Pa "dell" Ta "Dell SVR4" -.It Ta Pa "ncr " Ta "NCR SVR4" -.El -.It Fl v -Operate in verbose mode. -.El -.Pp -The -.Nm elf2olf -and -.Nm olf2elf -utilities exit 0 on success or >0 if an error occurred. -.Sh HISTORY -The -.Nm elf2olf -and -.Nm olf2elf -utilities first appeared in -.Ox 2.1 . -.Sh AUTHORS -Erik Theisen -.Sh BUGS -The -.Em ELF -version 1 object module format lacks any real method to determine the native -operating system for any given binary thus mandating the existence of these -tools. -The converted binaries created by -.Nm elf2olf -will no longer execute on their native operating system, only on OLF -enabled platforms, although -.Nm olf2elf -will undo the damage. diff --git a/usr.bin/elf2olf/elf2olf.c b/usr.bin/elf2olf/elf2olf.c deleted file mode 100644 index b2a0cad4a6e..00000000000 --- a/usr.bin/elf2olf/elf2olf.c +++ /dev/null @@ -1,262 +0,0 @@ -/* $OpenBSD: elf2olf.c,v 1.9 2007/03/15 23:06:01 jmc Exp $ */ -/* - * Copyright (c) 1996 Erik Theisen. All rights reserved. - * - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ -#ifndef lint -static char copyright[] = -"@(#) Copyright (c) 1996 Erik Theisen. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char rcsid[] = "@(#) $Id: elf2olf.c,v 1.9 2007/03/15 23:06:01 jmc Exp $"; -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <errno.h> -#include <unistd.h> - -#include <sys/types.h> -#include <sys/uio.h> -#include <sys/stat.h> -#include <sys/param.h> - -#include <olf_abi.h> - -int retval = 0; -int olf2elf; -char *progname; -int verbose; -int opsys = OS_ID; - -char *os_namev[] = ONAMEV; - -/* Handle endianess */ -#define word(x,y)((y == ELFDATA2LSB) ? ntohl(htonl(x)) : ntohl(x)) -#define half(x,y)((y == ELFDATA2LSB) ? ntohs(htons(x)) : ntohs(x)) - -void usage(void); -void pwarn(char *, char *, int); - -int -main(int argc, char*argv[]) -{ - extern char *optarg; - extern int optind; - int ch, i, okay; - char *opstring; - - int fd; - struct stat st; - Elf32_Ehdr ehdr; - Elf32_Shdr shdr; - int e; - - if ((progname = strrchr(*argv, '/'))) - ++progname; - else - progname = *argv; - - if (strstr(progname, "olf2elf")) - olf2elf = 1; - - /* - * Process cmdline - */ - opstring = olf2elf ? "v" : "vo:"; - while((ch = getopt(argc, argv, opstring)) != -1) - switch(ch) { - case 'v': - verbose = 1; - break; - case 'o': - for (i = 1; i <= OOS_NUM; i++) { - if (os_namev[i] == NULL) { - fprintf(stderr, - "%s: illegal -o argument -- %s\n", - progname, optarg); - usage(); - } - else if (strcmp(optarg, os_namev[i]) == 0) { - opsys = i; - break; - } - } - break; - default: - usage(); - } - argc -= optind; - argv += optind; - - if (argc == 0) - usage(); - - /* - * Process file(s) - */ - do { - okay = 0; - - if ((fd = open(*argv, O_RDWR | O_EXLOCK, 0)) != -1 && - lseek(fd, (off_t)0, SEEK_SET) == 0 && - fstat(fd, &st) == 0) { - - /* Make sure this is a 32bit ELF or OLF version 1 file */ - if (read(fd, &ehdr, sizeof(Elf32_Ehdr)) == sizeof(Elf32_Ehdr)&& - (IS_ELF(ehdr) || IS_OLF(ehdr)) && - ehdr.e_ident[EI_CLASS] == ELFCLASS32 && - ehdr.e_ident[EI_VERSION] == 1) { - - /* Is this elf2olf? */ - if(!olf2elf) { - - /* Tag, your it... */ - ehdr.e_ident[OI_MAG0] = OLFMAG0; - ehdr.e_ident[OI_MAG1] = OLFMAG1; - ehdr.e_ident[OI_MAG2] = OLFMAG2; - ehdr.e_ident[OI_MAG3] = OLFMAG3; - ehdr.e_ident[OI_OS] = opsys; - ehdr.e_ident[OI_DYNAMIC] = ODYNAMIC_N; - ehdr.e_ident[OI_STRIP] = OSTRIP; - - /* We'll need this endian */ - e = ehdr.e_ident[EI_DATA]; - - /* Now we need to figure out wether or */ - /* not we're really stripped. */ - if (lseek(fd, (off_t)word(ehdr.e_shoff, e), - SEEK_SET) == word(ehdr.e_shoff, e)) { - - /* - * search through section header table - * looking for a section header of type - * SHT_SYMTAB and SHT_DYNAMIC. If there is - * one present we're NOT stripped and/or - * dynamic. - */ - for (i = 0; i < half(ehdr.e_shnum, e); i++) { - if (read(fd, &shdr, sizeof(Elf32_Shdr)) == sizeof(Elf32_Shdr)){ - if (word(shdr.sh_type, e) == SHT_SYMTAB) - ehdr.e_ident[OI_STRIP] = OSTRIP_N; - else if (word(shdr.sh_type, e) == SHT_DYNAMIC) - ehdr.e_ident[OI_DYNAMIC] = ODYNAMIC; - } else - pwarn(progname, *argv, errno); - } /* while less than number of section headers */ - - /* We're ready to modify */ - okay = 1; - - } else /* Bogus section header table seek */ - pwarn(progname, *argv, errno); - - } else { /* olf2elf */ - ehdr.e_ident[EI_MAG0] = ELFMAG0; - ehdr.e_ident[EI_MAG1] = ELFMAG1; - ehdr.e_ident[EI_MAG2] = ELFMAG2; - ehdr.e_ident[EI_MAG3] = ELFMAG3; - ehdr.e_ident[OI_OS] = 0; - ehdr.e_ident[OI_DYNAMIC] = 0; - ehdr.e_ident[OI_STRIP] = 0; - - okay = 1; - } /* olf2elf */ - } else /* Bogus non-ELF file encountered */ - pwarn(progname, *argv, ENOEXEC); - - /* - * Do It. - */ - if (okay) { - if (lseek(fd, (off_t)0, SEEK_SET) == 0) { - if (write(fd, &ehdr, sizeof(Elf32_Ehdr)) == sizeof(Elf32_Ehdr)) { - if (verbose) { - if (!olf2elf) { - printf("ELF %s => OLF %d-bit %s %s linked %s OLF.\n", - *argv, - (ehdr.e_ident[OI_CLASS] == OLFCLASS32)?\ - 32 : 64, - os_namev[ehdr.e_ident[OI_OS]], - ehdr.e_ident[OI_DYNAMIC] ? \ - "dynamically" : "statically", - !ehdr.e_ident[OI_STRIP] ? - "stripped" : "unstripped"); - } else - printf("OLF %s => ELF.\n", *argv); - } - } else /* bad write */ - pwarn(progname, *argv, errno); - } else /* bad seek */ - pwarn(progname, *argv, errno); - } /* okay? */ - fsync(fd); - close(fd); - - } else /* couldn't handle file */ - pwarn(progname, *argv, errno); - } while (*(++argv) != NULL); - - - return (retval); -} - -void -pwarn(name, fname, errval) - char *name; - char *fname; - int errval; -{ - fprintf(stderr, "%s: %s: %s.\n", name, fname, strerror(errval)); - retval = 1; -} - -void -usage(void) -{ - int i; - int col = 8; - - if (olf2elf) { - fprintf(stderr, "usage: %s [-v] file ...\n", progname); - } else { - fprintf(stderr, "usage: %s [-v] [-o opsys] module ...\n", progname); - fprintf(stderr, "where opsys is:\n\t"); - for (i = 1; os_namev[i] != NULL; i++) { - col = col + strlen(os_namev[i]) + 2; - if (col > 78) { - fprintf(stderr, "\n\t"); - col = 8; - } - fprintf(stderr, "%s%s", os_namev[i], - os_namev[i+1] ? ", " : "\n"); - } - } - exit(1); -} - - |