Двоичный /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
В моем дистрибутиве есть как жесткие, так и мягкие плавники, хотя я думал, что они взаимоисключающие.