The popular binfmt-wrapper patch adds an additional executable which mangle argv suitable for binfmt flag P. In a chroot you need the both (statically linked) qemu-$arch and qemu-$arch-binfmt-wrapper. This is sub optimal and a better approach is to recognize the -binfmt-wrapper extension within linux-user(qemu-$arch) and mangle argv there. This just produces on executable which can be either copied to the chroot or bind mounted with the appropriate -binfmt-wrapper suffix.
Signed-off-by: Joakim Tjernlund <joakim.tjernl...@transmode.se> --- linux-user/main.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/linux-user/main.c b/linux-user/main.c index 71a33c7..212067a 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3828,6 +3828,19 @@ int main(int argc, char **argv, char **envp) int i; int ret; int execfd; + char *binfmt; + + i = strlen( argv[0] ) - strlen ( "-binfmt-wrapper" ); + binfmt = argv[0] + i; + if (i > 0 && strcmp ( binfmt, "-binfmt-wrapper" ) == 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); -- 1.8.5.5