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