exec_elf32.c revision 1.138
11.138Schristos/*	$NetBSD: exec_elf32.c,v 1.138 2013/09/19 18:50:59 christos Exp $	*/
21.1Sfvdl
31.1Sfvdl/*
41.9Scgd * Copyright (c) 1996 Christopher G. Demetriou
51.1Sfvdl * All rights reserved.
61.1Sfvdl *
71.1Sfvdl * Redistribution and use in source and binary forms, with or without
81.1Sfvdl * modification, are permitted provided that the following conditions
91.1Sfvdl * are met:
101.1Sfvdl * 1. Redistributions of source code must retain the above copyright
111.1Sfvdl *    notice, this list of conditions and the following disclaimer.
121.1Sfvdl * 2. Redistributions in binary form must reproduce the above copyright
131.1Sfvdl *    notice, this list of conditions and the following disclaimer in the
141.1Sfvdl *    documentation and/or other materials provided with the distribution.
151.137Sad * 3. All advertising materials mentioning features or use of this software
161.137Sad *    must display the following acknowledgement:
171.137Sad *      This product includes software developed by Christopher G. Demetriou
181.137Sad *	for the NetBSD Project.
191.137Sad * 4. The name of the author may not be used to endorse or promote products
201.1Sfvdl *    derived from this software without specific prior written permission
211.1Sfvdl *
221.1Sfvdl * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
231.1Sfvdl * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
241.1Sfvdl * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
251.1Sfvdl * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
261.1Sfvdl * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
271.1Sfvdl * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
281.1Sfvdl * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
291.1Sfvdl * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
301.1Sfvdl * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
311.1Sfvdl * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
321.1Sfvdl */
331.69Slukem
341.69Slukem#include <sys/cdefs.h>
351.138Schristos__KERNEL_RCSID(0, "$NetBSD: exec_elf32.c,v 1.138 2013/09/19 18:50:59 christos Exp $");
361.30Sthorpej
371.137Sad#define	ELFSIZE	32
381.8Schristos
391.137Sad#include "exec_elf.c"
401.90Schristos
411.137Sad#include <sys/module.h>
421.128Schristos
431.137Sad#define ELF32_AUXSIZE (howmany(ELF_AUX_ENTRIES * sizeof(Aux32Info), \
441.137Sad    sizeof(Elf32_Addr)) + MAXPATHLEN + ALIGN(1))
451.137Sad
461.137Sad#ifdef COREDUMP
471.137Sad#define	DEP	"coredump"
481.137Sad#else
491.137Sad#define	DEP	NULL
501.137Sad#endif
511.137Sad
521.138SchristosMODULE(MODULE_CLASS_EXEC, exec_elf32, DEP);
531.137Sad
541.137Sadstatic struct execsw exec_elf32_execsw[] = {
551.137Sad	{ sizeof (Elf32_Ehdr),
561.137Sad	  exec_elf32_makecmds,
571.137Sad	  { netbsd_elf32_probe },
581.137Sad	  &emul_netbsd,
591.137Sad	  EXECSW_PRIO_ANY,
601.137Sad	  ELF32_AUXSIZE,
611.137Sad	  elf32_copyargs,
621.137Sad	  NULL,
631.137Sad	  coredump_elf32,
641.137Sad	  exec_setup_stack },
651.137Sad#if EXEC_ELF_NOTELESS
661.137Sad	{ sizeof (Elf32_Ehdr),
671.137Sad	  exec_elf32_makecmds,
681.137Sad	  { NULL },
691.137Sad	  &emul_netbsd,
701.137Sad	  EXECSW_PRIO_LAST,
711.137Sad	  ELF32_AUXSIZE,
721.137Sad	  elf32_copyargs,
731.137Sad	  NULL,
741.137Sad	  coredump_elf32,
751.137Sad	  exec_setup_stack },
761.137Sad#endif
771.137Sad};
781.137Sad
791.137Sadstatic int
801.137Sadexec_elf32_modcmd(modcmd_t cmd, void *arg)
811.137Sad{
821.137Sad
831.137Sad	switch (cmd) {
841.137Sad	case MODULE_CMD_INIT:
851.137Sad		return exec_add(exec_elf32_execsw,
861.137Sad		    __arraycount(exec_elf32_execsw));
871.137Sad
881.137Sad	case MODULE_CMD_FINI:
891.137Sad		return exec_remove(exec_elf32_execsw,
901.137Sad		    __arraycount(exec_elf32_execsw));
911.1Sfvdl
921.1Sfvdl	default:
931.137Sad		return ENOTTY;
941.137Sad        }
951.1Sfvdl}
96