weak_alias(libc_start_init, __libc_start_init);
+static int libc_start_main_stage2(int (*)(int,char **,char **), int, char **);
+
int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv)
{
char **envp = argv+argc+1;
__init_libc(envp, argv[0]);
+
+ /* Barrier against hoisting application code or anything using ssp
+ * or thread pointer prior to its initialization above. */
+ int (*stage2)();
+ __asm__ ( "" : "=r"(stage2) : "r"(libc_start_main_stage2) : "memory" );
+ return stage2(main, argc, argv);
+}
+
+static int libc_start_main_stage2(int (*main)(int,char **,char **), int argc, char **argv)
+{
+ char **envp = argv+argc+1;
__libc_start_init();
/* Pass control to the application */