[РЕШЕНО] qemu-arm и ld-linux-x86-64.so.2 [РЕШЕНО]

Потребовалось собрать систему для arm, кросскомпиляция - не вариант, решил использовать эмуляцию, но с нативным armv5-...-gcc. Раньше подобная конструкция работала.
Используется chroot и binfmt, как бинарник для arm используется qemu-wrapper

include <string.h>
#include <unistd.h>

int main(int argc, char **argv, char **envp) {
	char *newargv[argc + 4];
	newargv[3] = "/mnt/root/usr/bin/qemu-arm";
	newargv[0] = argv[0];
        newargv[1] = "--library-path";
	newargv[2] = "/mnt/root/lib:/mnt/root/usr/lib";

	memcpy(&newargv[4], &argv[1], sizeof(*argv) * (argc - 1));
	newargv[argc + 3] = NULL;
	return execve("/mnt/root/lib/ld-linux-x86-64.so.2", newargv, envp);
}

(slepnoga, надеюсь это ты удалять не будешь?)
Возможно, криво, но это недопеределка.
При подборке аргументов обнаружил:

mittorn@mittorn-desktop ~ $ /lib/ld-linux-x86-64.so.2 /usr/bin/qemu-arm
Registering `arm-cpu' which already exists
Аварийный останов

И так с любыми аргументами. Если запускать напрямую, то всё отлично работает, но у меня в chroot нет на месте x86-64 либ и быть не может. Раньше ставил qemu, оно отлично таким манипуляциям поддавалось.

Вот strace с ld-linux и напрямую. Как видно, отличаются только адреса и поведение после

brk(0)=0x7f5d5435c000
brk(0x7f5d5437d000)

http://pastebin.com/hJqBb7HS

Гугл не помог, яндекс тоже.

ЗЫ
Уже собрал qemu-user c --enable-static --disable-shared из qemu-kvm вручную (без install естественнно, просто бинарник куда надо кинул), были проблемы с интернетом, не отписался. Так что [РЕШЕНО] уже давно. Сейчас парюсь с gcc. portage нативный уже работает простым запуском через ld-linux + оверлеем некоторых bash-скриптов. В qemu-arm теряются некоторые env-ы, по этому поправил bash-скрипты, исправления с mount -o bind накладываются. прирост скорости огромен. Но gcc как на зло не хочет static делаться.

У меня конструкция chroot и

У меня конструкция chroot и binfmt отлично работает. Делалось по одной из инструкций вида:
1. FEATURES="buildpkg" emerge qemu-user
2. ROOT=/patch/to/chroot emerge -K qemu-user
3. /etc/init.d/qemu-binfmt start
4. Монтируем dev, proc и возможно portage
5. chroot в arm

И никаких костылей с врапперами.
И да, qemu/qemu-kvm и qemu-user конфликтуют, поэтому можно поставить qemu-user, создав бинарный пакет, установить его в chroot, а потом вернуть qemu/qemu-kvm.

А как вообще собрать

А как вообще собрать qemu-user? У меня сборка вылетала, что-то ругалось на неверный usage. Точный вывод сейчас не могу привести.
ЗЫЖ дело было в gcc-4x

Локальный оверлей растёт

Последнюю версию

Последнюю версию размаскируйте, она собирается нормально.

Уже собрал qemu-user c

Уже собрал qemu-user c --enable-static --disable-shared из qemu-kvm вручную (без install естественнно, просто бинарник куда надо кинул), были проблемы с интернетом, не отписался. Так что [РЕШЕНО] уже давно. Сейчас парюсь с gcc. portage нативный уже работает простым запуском через ld-linux + оверлеем некоторых bash-скриптов. В qemu-arm теряются некоторые env-ы, по этому поправил bash-скрипты, исправления с mount -o bind накладываются. прирост скорости огромен. Но gcc как на зло не хочет static делаться.

Локальный оверлей растёт

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".