Qemu can autodetect if it is started from Linux binfmt loader when binfmt flag O is on. Use that and require binfmt flag P as well which will enable QEMU to pass in correct argv0 to the application.
Signed-off-by: Joakim Tjernlund <joakim.tjernl...@transmode.se> --- linux-user/main.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/linux-user/main.c b/linux-user/main.c index 71a33c7..9736768 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3829,6 +3829,18 @@ int main(int argc, char **argv, char **envp) int ret; int execfd; + execfd = qemu_getauxval(AT_EXECFD); + if (execfd > 0 ) { + if (argc < 3) { + fprintf(stderr, "%s: Please use me through binfmt with P flag\n", + argv[0]); + exit(1); + } + handle_arg_argv0(argv[2]); /* binfmt wrapper */ + memmove(&argv[2], &argv[3], (argc-2)*sizeof(argv)); + argc--; + } + module_call_init(MODULE_INIT_QOM); if ((envlist = envlist_create()) == NULL) { @@ -4003,7 +4015,6 @@ int main(int argc, char **argv, char **envp) cpu->opaque = ts; task_settid(ts); - execfd = qemu_getauxval(AT_EXECFD); if (execfd == 0) { execfd = open(filename, O_RDONLY); if (execfd < 0) { -- 1.8.5.5