about summary refs log tree commit diff
path: root/sysdeps/nacl/start.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2015-04-17 09:02:19 -0700
committerRoland McGrath <roland@hack.frob.com>2015-04-17 09:02:19 -0700
commitd1e44df1fa5fefd8a083f6c1e909bbcdc97c6438 (patch)
treea76176eca62c0907dd7f135979312c8e55ad06a5 /sysdeps/nacl/start.c
parentf70925993ada98039250d46c62fb89c168b8f9d6 (diff)
downloadglibc-d1e44df1fa5fefd8a083f6c1e909bbcdc97c6438.tar.gz
glibc-d1e44df1fa5fefd8a083f6c1e909bbcdc97c6438.tar.xz
glibc-d1e44df1fa5fefd8a083f6c1e909bbcdc97c6438.zip
Add arm-nacl port.
Diffstat (limited to 'sysdeps/nacl/start.c')
-rw-r--r--sysdeps/nacl/start.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/sysdeps/nacl/start.c b/sysdeps/nacl/start.c
new file mode 100644
index 0000000000..a4b6dd33d4
--- /dev/null
+++ b/sysdeps/nacl/start.c
@@ -0,0 +1,73 @@
+/* Entry-point for programs.  NaCl version.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdint.h>
+#include <link.h>
+
+/* NaCl's elf32.h is incompatible with the real <elf.h>.  */
+#define NATIVE_CLIENT_SRC_INCLUDE_ELF32_H_
+#include <native_client/src/untrusted/nacl/nacl_startup.h>
+
+
+/* The application defines this, of course.  */
+extern int main (int argc, char **argv, char **envp);
+
+/* These are defined in libc.  */
+extern int __libc_csu_init (int argc, char **argv, char **envp);
+extern void __libc_csu_fini (void);
+extern void __libc_start_main (int (*main) (int, char **, char **),
+			       int argc, char **argv, ElfW(auxv_t) *auxv,
+			       int (*init) (int, char **, char **),
+			       void (*fini) (void),
+			       void (*rtld_fini) (void),
+			       void *stack_end);
+
+void
+_start (uint32_t info[])
+{
+  /* The generic code actually assumes that envp follows argv.  */
+
+  __libc_start_main (&main,
+		     nacl_startup_argc (info),
+		     nacl_startup_argv (info),
+		     nacl_startup_auxv (info),
+		     &__libc_csu_init, &__libc_csu_fini,
+		     nacl_startup_fini (info),
+		     __builtin_frame_address (0));
+
+  /* That should not return.  Make sure we crash if it did.  */
+  while (1)
+    __builtin_trap ();
+}