Двоичный /ELF тихо выходит из другой системы ARM

У меня есть ELF, который был скомпилирован на процессоре armv7a Cortex-A9. Там он работает нормально, без проблем, но когда он перемещается на процессор Armv7a Cortex-A8, файл молча завершается следующим образом:

casey @ arm: ~ / Unreal / System $./UCCLinux.bin.orig casey @ arm: ~ / Unreal / System $

Я создал свой собственный UCCLinux.bin, который использует общие объекты, которые не изменились с процессором Cortex A9, и выполнение работает нормально. Это наводит меня на мысль, что нет ничего плохого в общих объектах, но что-то в самом ELF. Однако, различие ld --verbose / readelf показывает только одно небольшое отличие. На версии, которую я собрал, нужна другая зависимость. ld-linux-armhf.so.3, где его нет и заменено на libm.so.6; который у меня есть.

В рабочей системе меня также смущает путь поиска: SEARCH_DIR ("/ usr / armv7hl-suse-linux-gnueabi / lib") armv7 *h* l без hf на gnueabi. Я не уверен, подразумевает ли это что-нибудь для сборки SuSE через Ubuntu, так как они оба нахлынули, это может быть просто семантикой.

Вывод ldd в обеих системах совпадает с исходным файлом. Помимо изменений в этой зависимости и нескольких относительно незначительных комментариев, вероятно, от разных компиляторов в разных дистрибутивах, я в полной растерянности.

У меня есть выходные данные из файла, который я создал, и файла, который мне дали.

Хорошо: http://pastebin.com/ef8Svn1Q

Плохо: http://pastebin.com/04fyP5xt

Я совершенно не понимаю, почему это происходит, потому что все другие небольшие тестовые программы, которые я стараюсь, работают безупречно. Это просто один файл по какой-то причине. Компиляция с mtune = cortex-a8 ничего не изменила, и это было бы полным обломом, если бы нам пришлось распространять сборку с "О, кстати, вам нужно скомпилировать свой собственный двоичный файл, чтобы даже запустить его". Кроме того, я подозреваю, что с этим могут возникнуть некоторые проблемы.

Соответствующие {насколько мне известно} опции компилятора:

-march = armv7-a -mtune = cortex-a9 -mfloat-abi = hard -mfpu = vfpv3-d16

FPU соответствует обоим процессорам, и оба - это hardvloat armv7a.

Есть идеи?

Изменить: нашел новую информацию с Valgrind.

-1929-- Чтение символов из /home/casey/Unreal/System/UCCLinux.bin.orig (0x8000) --1929-- Чтение символов из /lib/arm-linux-gnueabi/ld-2.15.so (0x4000000) --1929-- Учитывая /lib/arm-linux-gnueabi/ld-2.15.so .. --1929-- .. Несоответствие CRC (вычислено c6793f6a хотел 66aab705) --1929-- объект не имеет таблицы символов

valgrind: фатальная ошибка при запуске: перенаправление функции valgrind: что является обязательным для этой комбинации платформы и инструмента. valgrind: не может быть установлен. Подробности перенаправления: valgrind: функция перенаправления, которая должна быть перенаправлена: valgrind: имя которой соответствует шаблону: memcpy valgrind: в объекте с совпадающим именем сына: ld-linux.so.3 valgrind: не был найден во время обработки valgrind: символы от объекта с soname: ld-linux.so.3

В моем дистрибутиве есть как жесткие, так и мягкие плавники, хотя я думал, что они взаимоисключающие.

0 ответов

Другие вопросы по тегам