Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/uebayasi-xip]: src/usr.sbin/mdsetimage Replace the current usage of Elf6...



details:   https://anonhg.NetBSD.org/src/rev/1e9bcff632d0
branches:  uebayasi-xip
changeset: 751798:1e9bcff632d0
user:      joerg <joerg%NetBSD.org@localhost>
date:      Sat Aug 28 21:30:04 2010 +0000

description:
Replace the current usage of Elf64_Half with Elf64_Word and rename
NetBSD specific Elf64_Quarter to Elf64_Half. This restores compatibility
with the common ELF specifications.

diffstat:

 usr.sbin/mdsetimage/exec_elf32.c |  132 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 132 insertions(+), 0 deletions(-)

diffs (136 lines):

diff -r 14abe3412139 -r 1e9bcff632d0 usr.sbin/mdsetimage/exec_elf32.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/mdsetimage/exec_elf32.c  Sat Aug 28 21:30:04 2010 +0000
@@ -0,0 +1,132 @@
+/* $NetBSD: exec_elf32.c,v 1.12.2.2 2010/08/28 21:30:04 joerg Exp $ */
+
+/*
+ * Copyright (c) 1996 Christopher G. Demetriou
+ * 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: LICENSE_GC,v 1.1 2001/10/01 23:24:05 cgd Exp>>
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: exec_elf32.c,v 1.12.2.2 2010/08/28 21:30:04 joerg Exp $");
+#endif /* not lint */
+
+#ifndef ELFSIZE
+#define        ELFSIZE         32
+#endif
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include "extern.h"
+
+#if defined(NLIST_ELF32) || defined(NLIST_ELF64)
+#include <sys/exec_elf.h>
+#endif
+
+#if (defined(NLIST_ELF32) && (ELFSIZE == 32)) || \
+    (defined(NLIST_ELF64) && (ELFSIZE == 64))
+
+#define        check(off, size)        ((off < 0) || (off + size > mappedsize))
+#define        BAD                     do { rv = -1; goto out; } while (0)
+
+int
+ELFNAMEEND(check)(mappedfile, mappedsize)
+       const char *mappedfile;
+       size_t mappedsize;
+{
+       const Elf_Ehdr *ehdrp;
+       int rv;
+
+       rv = 0;
+
+       if (check(0, sizeof *ehdrp))
+               BAD;
+       ehdrp = (const Elf_Ehdr *)&mappedfile[0];
+
+       if (memcmp(ehdrp->e_ident, ELFMAG, SELFMAG) != 0 ||
+           ehdrp->e_ident[EI_CLASS] != ELFCLASS)
+               BAD;
+
+       switch (ehdrp->e_machine) {
+       ELFDEFNNAME(MACHDEP_ID_CASES)
+
+       default:
+               BAD;
+       }
+
+out:
+       return (rv);
+}
+
+int
+ELFNAMEEND(findoff)(mappedfile, mappedsize, vmaddr, fileoffp)
+       const char *mappedfile;
+       size_t mappedsize, *fileoffp;
+       u_long vmaddr;
+{
+       const Elf_Ehdr *ehdrp;
+       const Elf_Phdr *phdrp;
+       Elf_Off phdr_off;
+       Elf_Word phdr_size;
+#if (ELFSIZE == 32)
+       Elf32_Half nphdr, i;
+#elif (ELFSIZE == 64)
+       Elf64_Word nphdr, i;
+#endif
+       int rv;
+
+       rv = 0;
+
+       ehdrp = (const Elf_Ehdr *)&mappedfile[0];
+       nphdr = ehdrp->e_phnum;
+       phdr_off = ehdrp->e_phoff;
+       phdr_size = sizeof(Elf_Phdr) * nphdr;
+
+       if (check(0, phdr_off + phdr_size))
+               BAD;
+       phdrp = (const Elf_Phdr *)&mappedfile[phdr_off];
+
+#define IS_TEXT(p)     (p.p_flags & PF_X)
+#define IS_DATA(p)     (p.p_flags & PF_W)
+
+       for (i = 0; i < nphdr; i++) {
+               if ((IS_TEXT(phdrp[i]) || IS_DATA(phdrp[i])) &&
+                   phdrp[i].p_vaddr <= vmaddr &&
+                   vmaddr < phdrp[i].p_vaddr + phdrp[i].p_filesz) {
+                       *fileoffp = vmaddr -
+                           phdrp[i].p_vaddr + phdrp[i].p_offset;
+                       break;
+               }
+       }
+       if (i == nphdr)
+               BAD;
+
+out:
+       return (rv);
+}
+
+#endif /* include this size of ELF */



Home | Main Index | Thread Index | Old Index