提交 00bd3b7d 编写于 作者: A Alexander Monakov 提交者: Rich Felker

__libc_start_main: slightly simplify stage2 pointer setup

Use "+r" in the asm instead of implementing a non-transparent copy by
applying "0" constraint to the source value. Introduce a typedef for
the function type to avoid spelling it out twice.
上级 0239cd06
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册