Rename ume.c/ume.h as m_ume.c/pub_core_ume.h to be consistent with
all the other modules.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3992 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/pub_core_ume.h b/coregrind/pub_core_ume.h
new file mode 100644
index 0000000..84b8d3b
--- /dev/null
+++ b/coregrind/pub_core_ume.h
@@ -0,0 +1,123 @@
+
+/*--------------------------------------------------------------------*/
+/*--- User-mode execve. pub_core_ume.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ jseward@acm.org
+
+ This program 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 of the
+ License, or (at your option) any later version.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_CORE_UME_H
+#define __PUB_CORE_UME_H
+
+//--------------------------------------------------------------------
+// PURPOSE: This module implements user-mode execve, ie. program loading
+// and exec'ing. It is shared between stage1 and stage2.
+//--------------------------------------------------------------------
+
+#include <elf.h>
+#include <sys/types.h>
+
+/*------------------------------------------------------------*/
+/*--- General stuff ---*/
+/*------------------------------------------------------------*/
+
+/* This is only here so it can be shared between stage1 and stage2 */
+extern
+void foreach_map(int (*fn)(char *start, char *end,
+ const char *perm, off_t offset,
+ int maj, int min, int ino, void* extra),
+ void* extra);
+
+/* Jump to 'dst', but first set the stack pointer to 'stack'. Also,
+ clear all the integer registers before entering 'dst'. It's
+ important that the stack pointer is set to exactly 'stack' and not
+ (eg) stack - apparently_harmless_looking_small_offset. Basically
+ because the code at 'dst' might be wanting to scan the area above
+ 'stack' (viz, the auxv array), and putting spurious words on the
+ stack confuses it.
+
+ This is only exported so that vgtest_ume.c can use it.
+*/
+extern
+__attribute__((noreturn))
+void jump_and_switch_stacks ( Addr stack, Addr dst );
+
+
+/*------------------------------------------------------------*/
+/*--- Loading ELF files ---*/
+/*------------------------------------------------------------*/
+
+// Info needed to load and run a program. IN/INOUT/OUT refers to the
+// inputs/outputs of do_exec().
+struct exeinfo
+{
+ Addr map_base; // IN: if non-zero, base address of mappings
+ char** argv; // IN: the original argv
+
+ Addr exe_base; // INOUT: lowest (allowed) address of exe
+ Addr exe_end; // INOUT: highest (allowed) address
+
+ Addr phdr; // OUT: address phdr was mapped at
+ int phnum; // OUT: number of phdrs
+ Addr interp_base; // OUT: where interpreter (ld.so) was mapped
+ Addr entry; // OUT: entrypoint in main executable
+ Addr init_eip; // OUT: initial eip
+ Addr brkbase; // OUT: base address of brk segment
+
+ // These are the extra args added by #! scripts
+ char* interp_name; // OUT: the interpreter name
+ char* interp_args; // OUT: the args for the interpreter
+};
+
+// Does everything short of actually running 'exe': finds the file,
+// checks execute permissions, sets up interpreter if program is a script,
+// reads headers, maps file into memory, and returns important info about
+// the program.
+extern int do_exec(const char *exe, struct exeinfo *info);
+
+/*------------------------------------------------------------*/
+/*--- Finding and dealing with auxv ---*/
+/*------------------------------------------------------------*/
+
+struct ume_auxv
+{
+ Word a_type;
+ union {
+ void *a_ptr;
+ Word a_val;
+ } u;
+};
+
+extern struct ume_auxv *find_auxv(UWord* orig_esp);
+
+/* Our private auxv entries */
+#define AT_UME_PADFD 0xff01 /* padding file fd */
+#define AT_UME_EXECFD 0xff02 /* stage1 executable fd */
+
+#endif /* __PUB_CORE_UME_H */
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/