1*716fd348SMartin Matuska /* 2*716fd348SMartin Matuska * CDDL HEADER START 3*716fd348SMartin Matuska * 4*716fd348SMartin Matuska * The contents of this file are subject to the terms of the 5*716fd348SMartin Matuska * Common Development and Distribution License (the "License"). 6*716fd348SMartin Matuska * You may not use this file except in compliance with the License. 7*716fd348SMartin Matuska * 8*716fd348SMartin Matuska * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*716fd348SMartin Matuska * or http://www.opensolaris.org/os/licensing. 10*716fd348SMartin Matuska * See the License for the specific language governing permissions 11*716fd348SMartin Matuska * and limitations under the License. 12*716fd348SMartin Matuska * 13*716fd348SMartin Matuska * When distributing Covered Code, include this CDDL HEADER in each 14*716fd348SMartin Matuska * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*716fd348SMartin Matuska * If applicable, add the following below this CDDL HEADER, with the 16*716fd348SMartin Matuska * fields enclosed by brackets "[]" replaced with your own identifying 17*716fd348SMartin Matuska * information: Portions Copyright [yyyy] [name of copyright owner] 18*716fd348SMartin Matuska * 19*716fd348SMartin Matuska * CDDL HEADER END 20*716fd348SMartin Matuska */ 21*716fd348SMartin Matuska 22*716fd348SMartin Matuska /* 23*716fd348SMartin Matuska * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24*716fd348SMartin Matuska * Use is subject to license terms. 25*716fd348SMartin Matuska */ 26*716fd348SMartin Matuska 27*716fd348SMartin Matuska /* 28*716fd348SMartin Matuska * Copyright (c) 2013 by Delphix. All rights reserved. 29*716fd348SMartin Matuska */ 30*716fd348SMartin Matuska 31*716fd348SMartin Matuska #include <stdio.h> 32*716fd348SMartin Matuska #include <sys/stat.h> 33*716fd348SMartin Matuska #include <fcntl.h> 34*716fd348SMartin Matuska #include <sys/types.h> 35*716fd348SMartin Matuska #include <sys/mman.h> 36*716fd348SMartin Matuska #include <errno.h> 37*716fd348SMartin Matuska 38*716fd348SMartin Matuska int 39*716fd348SMartin Matuska main(int argc, char *argv[]) 40*716fd348SMartin Matuska { 41*716fd348SMartin Matuska int error, fd; 42*716fd348SMartin Matuska struct stat statbuf; 43*716fd348SMartin Matuska 44*716fd348SMartin Matuska if (argc != 2) { 45*716fd348SMartin Matuska (void) printf("Error: missing binary name.\n"); 46*716fd348SMartin Matuska (void) printf("Usage:\n\t%s <binary name>\n", 47*716fd348SMartin Matuska argv[0]); 48*716fd348SMartin Matuska return (1); 49*716fd348SMartin Matuska } 50*716fd348SMartin Matuska 51*716fd348SMartin Matuska errno = 0; 52*716fd348SMartin Matuska 53*716fd348SMartin Matuska if ((fd = open(argv[1], O_RDONLY)) < 0) { 54*716fd348SMartin Matuska error = errno; 55*716fd348SMartin Matuska perror("open"); 56*716fd348SMartin Matuska return (error); 57*716fd348SMartin Matuska } 58*716fd348SMartin Matuska if (fstat(fd, &statbuf) < 0) { 59*716fd348SMartin Matuska error = errno; 60*716fd348SMartin Matuska perror("fstat"); 61*716fd348SMartin Matuska return (error); 62*716fd348SMartin Matuska } 63*716fd348SMartin Matuska 64*716fd348SMartin Matuska if (mmap(0, statbuf.st_size, 65*716fd348SMartin Matuska PROT_EXEC, MAP_SHARED, fd, 0) == MAP_FAILED) { 66*716fd348SMartin Matuska error = errno; 67*716fd348SMartin Matuska perror("mmap"); 68*716fd348SMartin Matuska return (error); 69*716fd348SMartin Matuska } 70*716fd348SMartin Matuska 71*716fd348SMartin Matuska return (0); 72*716fd348SMartin Matuska } 73