mirror of
git://git.musl-libc.org/musl
synced 2025-03-06 03:37:29 +00:00
__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.
This commit is contained in:
parent
0239cd0681
commit
00bd3b7d30
7
src/env/__libc_start_main.c
vendored
7
src/env/__libc_start_main.c
vendored
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user