X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ldso%2Fdynlink.c;h=35a90aef849c1c3f139c5f9a8639dbc123b25461;hb=5daaed6a0efd8a2b1410ff5395a6b3bb0e1a907e;hp=fc6a68b85a72a09e09d99e52ce5e62fc3d9b9be2;hpb=43c423af5b8453afde86e4ba81e0fcc663ae7c22;p=musl diff --git a/ldso/dynlink.c b/ldso/dynlink.c index fc6a68b8..35a90aef 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -1437,6 +1437,7 @@ _Noreturn void __dls3(size_t *sp) size_t aux[AUX_CNT], *auxv; size_t i; char *env_preload=0; + char *replace_argv0=0; size_t vdso_base; int argc = *sp; char **argv = (void *)(sp+1); @@ -1521,6 +1522,10 @@ _Noreturn void __dls3(size_t *sp) if (opt[7]=='=') env_preload = opt+8; else if (opt[7]) *argv = 0; else if (*argv) env_preload = *argv++; + } else if (!memcmp(opt, "argv0", 5)) { + if (opt[5]=='=') replace_argv0 = opt+6; + else if (opt[5]) *argv = 0; + else if (*argv) replace_argv0 = *argv++; } else { argv[0] = 0; } @@ -1677,6 +1682,8 @@ _Noreturn void __dls3(size_t *sp) debug.state = 0; _dl_debug_state(); + if (replace_argv0) argv[0] = replace_argv0; + errno = 0; CRTJMP((void *)aux[AT_ENTRY], argv-1);