LINUX.ORG.RU

Ликбез по сборке для AT91SAM7S

 ,


0

2

Есть прошивка для AT91SAM7S, собиралась под вендой arm-uclibc-cpp (GCC) 3.2.2 (cygwin)
Необходимо внести изменения, но т.к. под вендой жизни нет, потому собрал старый arm-linux-gcc 4.3.4 и им собираю
Все собирается, но итоговый бинарь содержит лишний мусор, иные смещения данных в прошивке, что помешает ему быть «нормально понятым» далее.

Например, если посмотреть старый вендовый файл одного объектника:

objdump -t ./utils.o 

./utils.o:     file format elf32-little

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 utils.cpp
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .comment       00000000 .comment
00000000 g     F .text  00000054 _Z16inc_dec_ring_posji
00000054 g     F .text  0000002c _Z12memcpy_shortPtPsi
00000080 g     F .text  00000020 _Z14clear_recflagsv
00000000         *UND*  00000000 memset
000000a0 g     F .text  0000001c _Z12set_recflagsj
000000bc g     F .text  00000020 _Z11set_recflagj
000000dc g     F .text  00000040 _Z11get_recflagj

и новый:
objdump -t ./utils.o 

./utils.o:     file format elf32-little

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 utils.cpp
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l       .text  00000000 $a
00000098 l       .text  00000000 $d
000000a0 l       .text  00000000 $a
000000e8 l       .text  00000000 $d
000000ec l       .text  00000000 $a
000000fc l       .text  00000000 $d
00000100 l       .text  00000000 $a
00000000 l    d  .note.GNU-stack        00000000 .note.GNU-stack
00000000 l    d  .comment       00000000 .comment
00000000 l    d  .ARM.attributes        00000000 .ARM.attributes
00000000 g     F .text  0000004c _Z16inc_dec_ring_posji
0000004c g     F .text  00000034 _Z12memcpy_shortPtPsi
00000080 g     F .text  00000020 _Z11set_recflagj
000000a0 g     F .text  0000004c _Z11get_recflagj
000000ec g     F .text  00000014 _Z12set_recflagsj
00000000         *UND*  00000000 memset
00000100 g     F .text  00000020 _Z14clear_recflagsv


то видно наличие неких «$d» и «$a»
как от них избавится ?
команда сборки одинакова: $CC -c -mcpu=arm7tdmi -Wall -O2 -mno-apcs-frame -o utils.o utils.cpp

★★★★★

Ключик -O2 как бы намекает, что включены оптимизации и код от версии к версии может сильно различаться. + ABI не совместимы.

anonymous
()
Ответ на: комментарий от anonymous

ABI не совместимы

наверно да, но и gcc 4.3.4 я собирал с трудом, не все пакеты уже есть для buildroot который 2010 года попался

придется страдать под вендой с имеющимся там компилятором, пока или не найду старый компилятор или уже не надо будет )

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

Попробуй убунту старую поднять на виртуалке и там все собрать старым gcc

anonymous
()

$a/$d скорее всего не являются проблемными. Это символы начала секций. Предлагаю сравнить 'objdump -d -r' для работающего и неработающего файла.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.