Module Name:    src
Committed By:   christos
Date:           Tue Aug 23 20:27:22 UTC 2011

Modified Files:
        src/usr.bin/elf2ecoff: elf2ecoff.c

Log Message:
misc knf cleanup.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/usr.bin/elf2ecoff/elf2ecoff.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/elf2ecoff/elf2ecoff.c
diff -u src/usr.bin/elf2ecoff/elf2ecoff.c:1.27 src/usr.bin/elf2ecoff/elf2ecoff.c:1.28
--- src/usr.bin/elf2ecoff/elf2ecoff.c:1.27	Tue Jun 28 09:13:15 2011
+++ src/usr.bin/elf2ecoff/elf2ecoff.c	Tue Aug 23 16:27:22 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: elf2ecoff.c,v 1.27 2011/06/28 13:13:15 tsutsui Exp $	*/
+/*	$NetBSD: elf2ecoff.c,v 1.28 2011/08/23 20:27:22 christos Exp $	*/
 
 /*
  * Copyright (c) 1997 Jonathan Stone
@@ -74,45 +74,29 @@
 	char   *stringtab;
 };
 
-int     debug = 0;
+static int     debug = 0;
+static int     needswap;
 
-int     phcmp(Elf32_Phdr * h1, Elf32_Phdr * h2);
-
-
-char   *saveRead(int file, off_t offset, off_t len, const char *name);
-void    safewrite(int outfile, const void *buf, off_t len, const char *msg);
-void    copy(int, int, off_t, off_t);
-void    combine(struct sect * base, struct sect * new, int paddable);
-void    translate_syms(struct elf_syms *, struct ecoff_syms *);
-void	elf_symbol_table_to_ecoff(int out, int in,
-	    struct ecoff_exechdr * ep,
-	    off_t symoff, off_t symsize,
-	    off_t stroff, off_t strsize);
-
-
-int	make_ecoff_section_hdrs(struct ecoff_exechdr * ep,
-	    struct ecoff_scnhdr * esecs);
-
-void	write_ecoff_symhdr(int outfile, struct ecoff_exechdr * ep,
-	    struct ecoff_symhdr * symhdrp,
-	    long nesyms, long extsymoff, long extstroff,
-	    long strsize);
-
-void    pad16(int fd, int size, const char *msg);
-void	bswap32_region(int32_t* , int);
-
-int    *symTypeTable;
-int	needswap;
-
-
-
-
-void	elf_read_syms(struct elf_syms * elfsymsp, int infile,
-	    off_t symoff, off_t symsize, off_t stroff, off_t strsize);
+static int     phcmp(Elf32_Phdr *, Elf32_Phdr *);
+static char   *saveRead(int, off_t, off_t, const char *);
+static void    safewrite(int, const void *, off_t, const char *);
+static void    copy(int, int, off_t, off_t);
+static void    combine(struct sect *, struct sect *, int);
+static void    translate_syms(struct elf_syms *, struct ecoff_syms *);
+static void    elf_symbol_table_to_ecoff(int, int, struct ecoff_exechdr *,
+    off_t, off_t, off_t, off_t);
+static int     make_ecoff_section_hdrs(struct ecoff_exechdr *,
+    struct ecoff_scnhdr *);
+static void    write_ecoff_symhdr(int, struct ecoff_exechdr *,
+    struct ecoff_symhdr *, long, long, long, long);
+static void    pad16(int, int, const char *);
+static void    bswap32_region(int32_t* , int);
+static void    elf_read_syms(struct elf_syms *, int, off_t, off_t, off_t,
+    off_t);
 
 
 int
-main(int argc, char **argv, char **envp)
+main(int argc, char **argv)
 {
 	Elf32_Ehdr ex;
 	Elf32_Phdr *ph;
@@ -145,7 +129,8 @@
 	if (argc < 3 || argc > 4) {
 usage:
 		fprintf(stderr,
-		    "usage: elf2ecoff <elf executable> <ECOFF executable> [-s]\n");
+		    "Usage: %s <elf executable> <ECOFF executable> [-s]\n",
+		    getprogname());
 		exit(1);
 	}
 	if (argc == 4) {
@@ -154,27 +139,18 @@
 		symflag = 1;
 	}
 	/* Try the input file... */
-	if ((infile = open(argv[1], O_RDONLY)) < 0) {
-		fprintf(stderr, "Can't open %s for read: %s\n",
-		    argv[1], strerror(errno));
-		exit(1);
-	}
+	if ((infile = open(argv[1], O_RDONLY)) < 0)
+		err(1, "Can't open %s for read", argv[1]);
 	/* Read the header, which is at the beginning of the file... */
 	i = read(infile, &ex, sizeof ex);
-	if (i != sizeof ex) {
-		fprintf(stderr, "ex: %s: %s.\n",
-		    argv[1], i ? strerror(errno) : "End of file reached");
-		exit(1);
-	}
+	if (i != sizeof ex)
+		err(1, "Short header read from %s", argv[1]);
 	if (ex.e_ident[EI_DATA] == ELFDATA2LSB)
 		mipsel = 1;
 	else if (ex.e_ident[EI_DATA] == ELFDATA2MSB)
 		mipsel = 0;
-	else {
-		fprintf(stderr, "invalid ELF byte order %d\n",
-		    ex.e_ident[EI_DATA]);
-		exit(1);
-	}
+	else
+		errx(1, "invalid ELF byte order %d", ex.e_ident[EI_DATA]);
 #if BYTE_ORDER == BIG_ENDIAN
 	if (mipsel)
 		needswap = 1;
@@ -235,11 +211,13 @@
 
 	}
 
-	/* Figure out if we can cram the program header into an ECOFF
+	/*
+	 * Figure out if we can cram the program header into an ECOFF
 	 * header...  Basically, we can't handle anything but loadable
 	 * segments, but we can ignore some kinds of segments.  We can't
 	 * handle holes in the address space.  Segments may be out of order,
-	 * so we sort them first. */
+	 * so we sort them first.
+	 */
 
 	qsort(ph, ex.e_phnum, sizeof(Elf32_Phdr),
 	    (int (*) (const void *, const void *)) phcmp);
@@ -251,18 +229,17 @@
 		    ph[i].p_type == PT_MIPS_REGINFO) {
 
 			if (debug) {
-				fprintf(stderr, "  skipping PH %zu type %d flags 0x%x\n",
+				fprintf(stderr, "  skipping PH %zu type %d "
+				    "flags 0x%x\n",
 				    i, ph[i].p_type, ph[i].p_flags);
 			}
 			continue;
 		}
 		/* Section types we can't handle... */
 		else
-			if (ph[i].p_type != PT_LOAD) {
-				fprintf(stderr, "Program header %zu type %d can't be converted.\n",
-				    i, ph[i].p_type);
-				exit(1);
-			}
+			if (ph[i].p_type != PT_LOAD)
+				errx(1, "Program header %zu type %d can't be "
+				    "converted", i, ph[i].p_type);
 		/* Writable (data) segment? */
 		if (ph[i].p_flags & PF_W) {
 			struct sect ndata, nbss;
@@ -273,8 +250,10 @@
 			nbss.len = ph[i].p_memsz - ph[i].p_filesz;
 
 			if (debug) {
-				fprintf(stderr,
-				    "  combinining PH %zu type %d flags 0x%x with data, ndata = %ld, nbss =%ld\n", i, ph[i].p_type, ph[i].p_flags, ndata.len, nbss.len);
+				fprintf(stderr, "  combinining PH %zu type %d "
+				    "flags 0x%x with data, ndata = %ld, "
+				    "nbss =%ld\n", i, ph[i].p_type,
+				    ph[i].p_flags, ndata.len, nbss.len);
 			}
 			combine(&data, &ndata, 0);
 			combine(&bss, &nbss, 1);
@@ -284,9 +263,8 @@
 			ntxt.vaddr = ph[i].p_vaddr;
 			ntxt.len = ph[i].p_filesz;
 			if (debug) {
-
-				fprintf(stderr,
-				    "  combinining PH %zu type %d flags 0x%x with text, len = %ld\n",
+				fprintf(stderr, "  combinining PH %zu type %d "
+				    "flags 0x%x with text, len = %ld\n",
 				    i, ph[i].p_type, ph[i].p_flags, ntxt.len);
 			}
 			combine(&text, &ntxt, 0);
@@ -298,10 +276,9 @@
 
 	/* Sections must be in order to be converted... */
 	if (text.vaddr > data.vaddr || data.vaddr > bss.vaddr ||
-	    text.vaddr + text.len > data.vaddr || data.vaddr + data.len > bss.vaddr) {
-		fprintf(stderr, "Sections ordering prevents a.out conversion.\n");
-		exit(1);
-	}
+	    text.vaddr + text.len > data.vaddr ||
+	    data.vaddr + data.len > bss.vaddr)
+		errx(1, "Sections ordering prevents a.out conversion");
 	/* If there's a data section but no text section, then the loader
 	 * combined everything into one section.   That needs to be the text
 	 * section, so just make the data section zero length following text. */
@@ -385,25 +362,23 @@
 	}
 
 	/* Make the output file... */
-	if ((outfile = open(argv[2], O_WRONLY | O_CREAT, 0777)) < 0) {
-		fprintf(stderr, "Unable to create %s: %s\n", argv[2], strerror(errno));
-		exit(1);
-	}
+	if ((outfile = open(argv[2], O_WRONLY | O_CREAT, 0777)) < 0)
+		err(1, "Unable to create %s", argv[2]);
+
 	/* Truncate file... */
 	if (ftruncate(outfile, 0)) {
 		warn("ftruncate %s", argv[2]);
 	}
 	/* Write the headers... */
-	safewrite(outfile, &ep.f, sizeof(ep.f), "ep.f: write: %s\n");
+	safewrite(outfile, &ep.f, sizeof(ep.f), "ep.f: write");
 	if (debug)
 		fprintf(stderr, "wrote %zu byte file header.\n", sizeof(ep.f));
 
-	safewrite(outfile, &ep.a, sizeof(ep.a), "ep.a: write: %s\n");
+	safewrite(outfile, &ep.a, sizeof(ep.a), "ep.a: write");
 	if (debug)
 		fprintf(stderr, "wrote %zu byte a.out header.\n", sizeof(ep.a));
 
-	safewrite(outfile, &esecs, sizeof(esecs[0]) * nsecs,
-	    "esecs: write: %s\n");
+	safewrite(outfile, &esecs, sizeof(esecs[0]) * nsecs, "esecs: write");
 	if (debug)
 		fprintf(stderr, "wrote %zu bytes of section headers.\n",
 		    sizeof(esecs[0]) * nsecs);
@@ -412,7 +387,7 @@
 	pad = ((sizeof ep.f + sizeof ep.a + sizeof esecs) & 15);
 	if (pad) {
 		pad = 16 - pad;
-		pad16(outfile, pad, "ipad: write: %s\n");
+		pad16(outfile, pad, "ipad: write");
 		if (debug)
 			fprintf(stderr, "wrote %d byte pad.\n", pad);
 	}
@@ -426,27 +401,25 @@
 			if (cur_vma != ph[i].p_vaddr) {
 				unsigned long gap = ph[i].p_vaddr - cur_vma;
 				char    obuf[1024];
-				if (gap > 65536) {
-					fprintf(stderr, "Intersegment gap (%ld bytes) too large.\n",
-					    gap);
-					exit(1);
-				}
+				if (gap > 65536)
+					errx(1, "Intersegment gap (%ld bytes) "
+					    "too large", gap);
 				if (debug)
-					fprintf(stderr, "Warning: %ld byte intersegment gap.\n", gap);
+					fprintf(stderr, "Warning: %ld byte "
+					    "intersegment gap.\n", gap);
 				memset(obuf, 0, sizeof obuf);
 				while (gap) {
-					int     count = write(outfile, obuf, (gap > sizeof obuf
-						? sizeof obuf : gap));
-					if (count < 0) {
-						fprintf(stderr, "Error writing gap: %s\n",
-						    strerror(errno));
-						exit(1);
-					}
+					int count = write(outfile, obuf,
+					    (gap > sizeof obuf
+					    ? sizeof obuf : gap));
+					if (count < 0)
+						err(1, "Error writing gap");
 					gap -= count;
 				}
 			}
 			if (debug)
-				fprintf(stderr, "writing %d bytes...\n", ph[i].p_filesz);
+				fprintf(stderr, "writing %d bytes...\n",
+				    ph[i].p_filesz);
 			copy(outfile, infile, ph[i].p_offset, ph[i].p_filesz);
 			cur_vma = ph[i].p_vaddr + ph[i].p_filesz;
 		}
@@ -470,45 +443,38 @@
 	{
 		char    obuf[4096];
 		memset(obuf, 0, sizeof obuf);
-		if (write(outfile, obuf, sizeof(obuf)) != sizeof(obuf)) {
-			fprintf(stderr, "Error writing PROM padding: %s\n",
-			    strerror(errno));
-			exit(1);
-		}
+		if (write(outfile, obuf, sizeof(obuf)) != sizeof(obuf))
+			err(1, "Error writing PROM padding");
 	}
 
 	/* Looks like we won... */
-	exit(0);
+	return 0;
 }
 
-void
+static void
 copy(int out, int in, off_t offset, off_t size)
 {
 	char    ibuf[4096];
 	size_t  remaining, cur, count;
 
 	/* Go to the start of the ELF symbol table... */
-	if (lseek(in, offset, SEEK_SET) < 0) {
-		perror("copy: lseek");
-		exit(1);
-	}
+	if (lseek(in, offset, SEEK_SET) < 0)
+		err(1, "copy: lseek");
 	remaining = size;
 	while (remaining) {
 		cur = remaining;
 		if (cur > sizeof ibuf)
 			cur = sizeof ibuf;
 		remaining -= cur;
-		if ((count = read(in, ibuf, cur)) != cur) {
-			fprintf(stderr, "copy: read: %s\n",
-			    count ? strerror(errno) : "premature end of file");
-			exit(1);
-		}
-		safewrite(out, ibuf, cur, "copy: write: %s\n");
+		if ((count = read(in, ibuf, cur)) != cur)
+			err(1, "copy: short read");
+		safewrite(out, ibuf, cur, "copy: write");
 	}
 }
+
 /* Combine two segments, which must be contiguous.   If pad is true, it's
    okay for there to be padding between. */
-void
+static void
 combine(struct sect *base, struct sect *new, int pad)
 {
 
@@ -519,17 +485,15 @@
 			if (base->vaddr + base->len != new->vaddr) {
 				if (pad)
 					base->len = new->vaddr - base->vaddr;
-				else {
-					fprintf(stderr,
-					    "Non-contiguous data can't be converted.\n");
-					exit(1);
-				}
+				else
+					errx(1, "Non-contiguous data can't be "
+					    "converted");
 			}
 			base->len += new->len;
 		}
 }
 
-int
+static int
 phcmp(Elf32_Phdr *h1, Elf32_Phdr *h2)
 {
 
@@ -542,40 +506,31 @@
 			return 0;
 }
 
-char *
+static char *
 saveRead(int file, off_t offset, off_t len, const char *name)
 {
 	char   *tmp;
 	int     count;
 	off_t   off;
 
-	if ((off = lseek(file, offset, SEEK_SET)) < 0) {
-		fprintf(stderr, "%s: fseek: %s\n", name, strerror(errno));
-		exit(1);
-	}
-	if ((tmp = malloc(len)) == NULL) {
-		fprintf(stderr, "%s: Can't allocate %ld bytes.\n", name, (long) len);
-		exit(1);
-	}
+	if ((off = lseek(file, offset, SEEK_SET)) < 0)
+		err(1, "%s: fseek", name);
+	if ((tmp = malloc(len)) == NULL)
+		err(1, "%s: Can't allocate %ld bytes", name, (long) len);
 	count = read(file, tmp, len);
-	if (count != len) {
-		fprintf(stderr, "%s: read: %s.\n",
-		    name, count ? strerror(errno) : "End of file reached");
-		exit(1);
-	}
+	if (count != len)
+		err(1, "%s: short read", name);
 	return tmp;
 }
 
-void
+static void
 safewrite(int outfile, const void *buf, off_t len, const char *msg)
 {
-	int     written;
+	ssize_t     written;
 
 	written = write(outfile, buf, len);
-	if (written != len) {
-		fprintf(stderr, msg, strerror(errno));
-		exit(1);
-	}
+	if (written != len)
+		err(1, "%s", msg);
 }
 
 
@@ -583,7 +538,7 @@
  * Output only three ECOFF sections, corresponding to ELF psecs
  * for text, data, and bss.
  */
-int
+static int
 make_ecoff_section_hdrs(struct ecoff_exechdr *ep, struct ecoff_scnhdr *esecs)
 {
 
@@ -631,14 +586,15 @@
  * Guess at how big the symbol table will be.
  * Mark all symbols as EXTERN (for now).
  */
-void
+static void
 write_ecoff_symhdr(int out, struct ecoff_exechdr *ep,
     struct ecoff_symhdr *symhdrp, long nesyms,
     long extsymoff, long extstroff, long strsize)
 {
 
 	if (debug)
-		fprintf(stderr, "writing symhdr for %ld entries at offset 0x%lx\n",
+		fprintf(stderr,
+		    "writing symhdr for %ld entries at offset 0x%lx\n",
 		    nesyms, (u_long) ep->f.f_symptr);
 
 	ep->f.f_nsyms = sizeof(struct ecoff_symhdr);
@@ -665,11 +621,11 @@
 	}
 
 	safewrite(out, symhdrp, sizeof(*symhdrp),
-	    "writing symbol header: %s\n");
+	    "writing symbol header");
 }
 
 
-void
+static void
 elf_read_syms(struct elf_syms *elfsymsp, int in, off_t symoff, off_t symsize,
     off_t stroff, off_t strsize)
 {
@@ -699,10 +655,7 @@
 }
 
 
-/*
- *
- */
-void
+static void
 elf_symbol_table_to_ecoff(int out, int in, struct ecoff_exechdr *ep,
     off_t symoff, off_t symsize, off_t stroff, off_t strsize)
 {
@@ -743,9 +696,9 @@
 	/* Write out the string table... */
 	padding = ecoff_strsize - ecoffsymtab.stringsize;
 	safewrite(out, ecoffsymtab.stringtab, ecoffsymtab.stringsize,
-	    "string table: write: %s\n");
+	    "string table: write");
 	if (padding)
-		pad16(out, padding, "string table: padding: %s\n");
+		pad16(out, padding, "string table: padding");
 
 
 	/* Write out the symbol table... */
@@ -760,9 +713,9 @@
 	}
 	safewrite(out, ecoffsymtab.ecoff_syms,
 	    nsyms * sizeof(struct ecoff_extsym),
-	    "symbol table: write: %s\n");
+	    "symbol table: write");
 	if (padding)
-		pad16(out, padding, "symbols: padding: %s\n");
+		pad16(out, padding, "symbols: padding");
 }
 
 
@@ -770,7 +723,7 @@
 /*
  * In-memory translation of ELF symbosl to ECOFF.
  */
-void
+static void
 translate_syms(struct elf_syms *elfp, struct ecoff_syms *ecoffp)
 {
 
@@ -795,10 +748,8 @@
 
 	newstrings = (char *) ecoffp->stringtab;
 	nsp = (char *) ecoffp->stringtab;
-	if (newstrings == NULL) {
-		fprintf(stderr, "No memory for new string table!\n");
-		exit(1);
-	}
+	if (newstrings == NULL)
+		errx(1, "No memory for new string table");
 	/* Copy and translate  symbols... */
 	idx = 0;
 	for (i = 0; i < nsyms; i++) {
@@ -833,7 +784,7 @@
 /*
  * pad to a 16-byte boundary
  */
-void
+static void
 pad16(int fd, int size, const char *msg)
 {
 
@@ -841,7 +792,7 @@
 }
 
 /* swap a 32bit region */
-void
+static void
 bswap32_region(int32_t* p, int len)
 {
 	size_t i;

Reply via email to