exec_elf64.c revision 1.3
11.3Sad/*	$NetBSD: exec_elf64.c,v 1.3 2008/11/19 18:36:06 ad Exp $	*/
21.1Scgd
31.1Scgd/*
41.1Scgd * Copyright (c) 1996 Christopher G. Demetriou
51.1Scgd * All rights reserved.
61.1Scgd *
71.1Scgd * Redistribution and use in source and binary forms, with or without
81.1Scgd * modification, are permitted provided that the following conditions
91.1Scgd * are met:
101.1Scgd * 1. Redistributions of source code must retain the above copyright
111.1Scgd *    notice, this list of conditions and the following disclaimer.
121.1Scgd * 2. Redistributions in binary form must reproduce the above copyright
131.1Scgd *    notice, this list of conditions and the following disclaimer in the
141.1Scgd *    documentation and/or other materials provided with the distribution.
151.1Scgd * 3. All advertising materials mentioning features or use of this software
161.1Scgd *    must display the following acknowledgement:
171.1Scgd *      This product includes software developed by Christopher G. Demetriou
181.1Scgd *	for the NetBSD Project.
191.1Scgd * 4. The name of the author may not be used to endorse or promote products
201.1Scgd *    derived from this software without specific prior written permission
211.1Scgd *
221.1Scgd * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
231.1Scgd * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
241.1Scgd * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
251.1Scgd * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
261.1Scgd * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
271.1Scgd * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
281.1Scgd * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
291.1Scgd * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
301.1Scgd * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
311.1Scgd * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
321.1Scgd */
331.2Slukem
341.2Slukem#include <sys/cdefs.h>
351.3Sad__KERNEL_RCSID(0, "$NetBSD: exec_elf64.c,v 1.3 2008/11/19 18:36:06 ad Exp $");
361.1Scgd
371.1Scgd#define	ELFSIZE	64
381.1Scgd
391.3Sad#include "exec_elf.c"
401.3Sad
411.3Sad#include <sys/module.h>
421.3Sad
431.3Sad#define ELF64_AUXSIZE (howmany(ELF_AUX_ENTRIES * sizeof(Aux64Info), \
441.3Sad    sizeof(Elf64_Addr)) + MAXPATHLEN + ALIGN(1))
451.3Sad
461.3Sad#ifdef COREDUMP
471.3Sad#define	DEP	"coredump"
481.3Sad#else
491.3Sad#define	DEP	NULL
501.3Sad#endif
511.3Sad
521.3SadMODULE(MODULE_CLASS_MISC, exec_elf64, DEP);
531.3Sad
541.3Sadstatic struct execsw exec_elf64_execsw[] = {
551.3Sad	/* Native Elf64 */
561.3Sad	{ sizeof (Elf64_Ehdr),
571.3Sad	  exec_elf64_makecmds,
581.3Sad	  { netbsd_elf64_probe },
591.3Sad	  &emul_netbsd,
601.3Sad	  EXECSW_PRIO_ANY,
611.3Sad	  ELF64_AUXSIZE,
621.3Sad	  elf64_copyargs,
631.3Sad	  NULL,
641.3Sad	  coredump_elf64,
651.3Sad	  exec_setup_stack },
661.3Sad#if EXEC_ELF_NOTELESS
671.3Sad	/* Generic Elf64 -- run at NetBSD Elf64 */
681.3Sad	{ sizeof (Elf64_Ehdr),
691.3Sad	  exec_elf64_makecmds,
701.3Sad	  { NULL },
711.3Sad	  &emul_netbsd,
721.3Sad	  EXECSW_PRIO_ANY,
731.3Sad	  ELF64_AUXSIZE,
741.3Sad	  elf64_copyargs,
751.3Sad	  NULL,
761.3Sad	  coredump_elf64,
771.3Sad	  exec_setup_stack },
781.3Sad#endif
791.3Sad};
801.3Sad
811.3Sadstatic int
821.3Sadexec_elf64_modcmd(modcmd_t cmd, void *arg)
831.3Sad{
841.3Sad
851.3Sad	switch (cmd) {
861.3Sad	case MODULE_CMD_INIT:
871.3Sad		return exec_add(exec_elf64_execsw,
881.3Sad		    __arraycount(exec_elf64_execsw));
891.3Sad
901.3Sad	case MODULE_CMD_FINI:
911.3Sad		return exec_remove(exec_elf64_execsw,
921.3Sad		    __arraycount(exec_elf64_execsw));
931.3Sad
941.3Sad	default:
951.3Sad		return ENOTTY;
961.3Sad        }
971.3Sad}
98