|
@@ -66,7 +66,8 @@ static void libc_start_init(void)
|
|
|
|
|
|
weak_alias(libc_start_init, __libc_start_init);
|
|
|
|
|
|
-static int libc_start_main_stage2(int (*)(int,char **,char **), int, char **);
|
|
|
+typedef int lsm2_fn(int (*)(int,char **,char **), int, char **);
|
|
|
+static lsm2_fn libc_start_main_stage2;
|
|
|
|
|
|
int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv)
|
|
|
{
|
|
@@ -79,8 +80,8 @@ int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv)
|
|
|
|
|
|
/* Barrier against hoisting application code or anything using ssp
|
|
|
* or thread pointer prior to its initialization above. */
|
|
|
- int (*stage2)(int (*)(int,char **,char **), int, char **);
|
|
|
- __asm__ ( "" : "=r"(stage2) : "0"(libc_start_main_stage2) : "memory" );
|
|
|
+ lsm2_fn *stage2 = libc_start_main_stage2;
|
|
|
+ __asm__ ( "" : "+r"(stage2) : : "memory" );
|
|
|
return stage2(main, argc, argv);
|
|
|
}
|
|
|
|