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