summaryrefslogtreecommitdiff
path: root/exec/priv.h
diff options
context:
space:
mode:
Diffstat (limited to 'exec/priv.h')
-rw-r--r--exec/priv.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/exec/priv.h b/exec/priv.h
new file mode 100644
index 00000000..f6889b32
--- /dev/null
+++ b/exec/priv.h
@@ -0,0 +1,153 @@
+/* GNU Hurd standard exec server, private declarations.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1999 Free Software Foundation, Inc.
+ Written by Roland McGrath.
+
+This file is part of the GNU Hurd.
+
+The GNU Hurd is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU Hurd is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU Hurd; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <hurd/trivfs.h>
+#include <hurd/ports.h>
+#include <hurd/lookup.h>
+#include <rwlock.h>
+
+#ifdef BFD
+#include <bfd.h>
+#endif
+
+#include <elf.h>
+#include <fcntl.h>
+#include "exec_S.h"
+
+
+#ifndef exec_priv_h
+#define exec_priv_h
+
+#ifdef BFD
+/* A BFD whose architecture and machine type are those of the host system. */
+extern bfd_arch_info_type host_bfd_arch_info;
+extern bfd host_bfd;
+#endif
+
+/* Information kept around to be given to a new task
+ in response to a message on the task's bootstrap port. */
+struct bootinfo
+ {
+ struct port_info pi;
+ vm_address_t stack_base;
+ vm_size_t stack_size;
+ int flags;
+ char *argv, *envp;
+ size_t argvlen, envplen, dtablesize, nports, nints;
+ mach_port_t *dtable, *portarray;
+ int *intarray;
+ vm_address_t phdr_addr, user_entry;
+ vm_size_t phdr_size;
+ };
+
+
+/* Where to put the service ports. */
+struct port_bucket *port_bucket;
+struct port_class *execboot_portclass;
+
+
+typedef struct trivfs_protid *trivfs_protid_t; /* For MiG. */
+
+extern mach_port_t procserver; /* Our proc port. */
+
+#ifndef BFD
+typedef void asection;
+#endif
+
+/* Data shared between check, check_section,
+ load, load_section, and finish. */
+struct execdata
+ {
+ /* Passed out to caller. */
+ error_t error;
+
+ /* Set by check. */
+ vm_address_t entry;
+ FILE stream;
+ file_t file;
+
+#ifdef BFD
+ bfd *bfd;
+#endif
+ union /* Interpreter section giving name of file. */
+ {
+ asection *section;
+ const Elf32_Phdr *phdr;
+ } interp;
+ memory_object_t filemap, cntlmap;
+ struct shared_io *cntl;
+ char *file_data; /* File data if already copied in core. */
+ off_t file_size;
+ size_t optimal_block; /* Optimal size for io_read from file. */
+
+ /* Set by caller of load. */
+ task_t task;
+
+ union
+ {
+ /* Vector indexed by section index,
+ information passed from check_section to load_section.
+ Set by caller of check_section and load. */
+ vm_offset_t *bfd_locations;
+ struct
+ {
+ /* Program header table read from the executable.
+ After `check' this is a pointer into the mapping window.
+ By `load' it is local alloca'd storage. */
+ Elf32_Phdr *phdr;
+ Elf32_Word phnum; /* Number of program header table elements. */
+ int anywhere; /* Nonzero if image can go anywhere. */
+ vm_address_t loadbase; /* Actual mapping location. */
+ } elf;
+ } info;
+ };
+
+error_t elf_machine_matches_host (Elf32_Half e_machine);
+
+void finish (struct execdata *, int dealloc_file_port);
+
+void check_hashbang (struct execdata *e,
+ file_t file,
+ task_t oldtask,
+ int flags,
+ char *argv, u_int argvlen, boolean_t argv_copy,
+ char *envp, u_int envplen, boolean_t envp_copy,
+ mach_port_t *dtable, u_int dtablesize,
+ boolean_t dtable_copy,
+ mach_port_t *portarray, u_int nports,
+ boolean_t portarray_copy,
+ int *intarray, u_int nints, boolean_t intarray_copy,
+ mach_port_t *deallocnames, u_int ndeallocnames,
+ mach_port_t *destroynames, u_int ndestroynames);
+
+
+/* Standard exec data for secure execs. */
+extern mach_port_t *std_ports;
+extern int *std_ints;
+extern size_t std_nports, std_nints;
+extern struct rwlock std_lock;
+
+
+#endif /* exec_priv_h */