Простейший пример на ассемблере для MPC860xx (PowerPC)

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hello everybody.

Hет ли у кого чего-нибудь типа мигающего светодиода для сабжевого контроллера?
Есть плата на XPC860MH (кстати, доку на этот MH почему-то нигде не могу найти,
хотя на другие разновидности 860 лежит и на chipinfo, и на самом freescale).
Плата в оригинале должна была втыкаться в PCI, для чего там стояла PCI9060, но
эта самая PCI9060 по непонятным причинам сгорела и была отпаяна. При этом не
ясно, исправны ли остальные компоненты, в частности сам процессор. Путём
некоторых плясок с бубном удалось заставить плату подавать первичные признаки
жизни, а именно неким образом шевелить шинами адреса и данных, но добиться
сколь бы то ни было осмысленного поведения от имеющейся прошивки (некий
бутлоадер) так и не получилось. Соответственно, ищется сабж. Можно и не на
асме, а на С (лишь бы он был обозримым), но тогда дайте заодно и мэйкфайл,
который из этого кода делает бинарник для заливки в ПЗУ.

Конечная цель всего этого - портировать туда u-boot и (наполеоновские планы)
поставить Линух, но до этого ещё далеко...

З.Ы. Город Вращенцы велик и славен. Если вы в этом сомневаетесь, то посмотрите
вокруг.

Ivan


Простейший пример на ассемблере для MPC860xx (PowerPC)
Hello everybody.

А вообще, есть здесь люди, знакомые сабжевым асмом или хотя-бы просто с
компилятором GNU as? Пытаюсь выдрать из большого и некомпилябельного исходника
минимально работоспособный кусочек. Получается так:

        .section        .text
        .align  2               /* align on word boundary */
        .globl  _start
        .globl  reset

        .equ    CacheDisableCmd, 0x400
oemprom:
        .skip   0x100
VTABLE:
        .globl  oemprom_entry

oemprom_entry:
_start:
        ba      reset
        .skip   0x3000-(.-oemprom)
reset:
        li      %r0,0x0000      /* all 0's in R0 */
/* Disable Data Cache before accessing any registers */
        lis     %r3,CacheDisableCmd     /* DCache Disable command */
        mtspr   DC_CST,%r3
        isync
/* Reset Instruction Cache */
        lis     %r3,CacheDisableCmd     /* ICache Disable command */
        mtspr   IC_CST,%r3
        isync
/* Hу и пошли дальше проц и железку инициализировать - на данном этапе*/
/* не важно */

Беда в том, что первую инструкцию powerpc-elf-as компилит почему-то в
        ba      oemprom
(смотрел с помощью IDA Pro Adv 4.8), а после powerpc-elf-objcopy -O binary она
и вовсе пропадает (по смещению 0x100 в бинарнике нули). Где косяк зарыт?

binutils версии 2.10, собраны под cygwin.

Ivan


Простейший пример на ассемблере для MPC860xx (PowerPC)
Привет Ivan!

15 Sep 05 02:04, Ivan Maximov писал Ivan Maximov:

 IM> А вообще, есть здесь люди, знакомые сабжевым асмом или хотя-бы просто
 IM> с компилятором GNU as?

    Я немного знаком.

 IM> oemprom:
 IM>         .skip   0x100
 IM>         ba      reset
 IM>         .skip   0x3000-(.-oemprom)
 IM> reset:

 IM> Беда в том, что первую инструкцию powerpc-elf-as компилит почему-то в
 IM>         ba      oemprom
 IM> (смотрел с помощью IDA Pro Adv 4.8),

    В смысле, ты смотрел под отладчиком (симулятором?) в пошаговом режиме куда
ba передает управление? А уверен, что ему можно верить? Лучше посмотри эту
секцию с помощью objdump с ключом -d.

 IM>  а после powerpc-elf-objcopy -O
 IM> binary она и вовсе пропадает (по смещению 0x100 в бинарнике нули).

    А как ты определил, что она должна быть по смещению 0x100?

 IM> Где косяк зарыт?

 IM> binutils версии 2.10, собраны под cygwin.

    А чем вызвано использование версии более чем пятилетней давности? Последняя
версия, насколько я помню, уже 2.16.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Закрой свой Ворд!

Простейший пример на ассемблере для MPC860xx (PowerPC)
* Replying to a msg in PERSONAL (My personal EchoMail)

Hello Alex.

15 Сен 05 13:10, you wrote to me:

 IM>> oemprom:
 IM>>         .skip   0x100
 IM>>         ba      reset

 IM>> Беда в том, что первую инструкцию powerpc-elf-as компилит
 IM>> почему-то в
 IM>>         ba      oemprom
 IM>> (смотрел с помощью IDA Pro Adv 4.8),
 AM>     В смысле, ты смотрел под отладчиком (симулятором?) в пошаговом
Hет, смотрел дизассемблером.
 AM> режиме куда ba передает управление? А уверен, что ему можно верить?
Как выяснилось, нельзя.
 AM> Лучше посмотри эту секцию с помощью objdump с ключом -d.
Как подсказали в ru.asm.chainik, проблема была в том, что после ассембера надо
запускать ещё и линкер, а я этого не сделал. Соответственно, что IDA, что
objdump -d показывали там ba 0 <oemprom>. После того, как сказал
powerpc-elf-ld -o a.elf a.out
, всё стало нормально. Hо почему-то только под 2.10 под cygwin.

 IM>>  а после powerpc-elf-objcopy -O
 IM>> binary она и вовсе пропадает (по смещению 0x100 в бинарнике
 IM>> нули).
 AM>     А как ты определил, что она должна быть по смещению 0x100?
Перед ней стоит
        .skip   0x100
. Как написано в man objcopy, пропадает она именно из-за того, что copying a
relocatable object file between any two formats may not work as expected.

 IM>> binutils версии 2.10, собраны под cygwin.
 AM>     А чем вызвано использование версии более чем пятилетней давности?
 AM> Последняя версия, насколько я помню, уже 2.16.
Исключительно наличием у меня её, собранной под cygwin. Пробовал 2.14 под
линухом (из eldk), столкнулся с непонятными граблями:

gm@momed:~/powerpc$ ppc_8xx-ld -o a.elf a.out
a.out(.text+0x100): In function `oemprom_entry':
: relocation truncated to fit: R_PPC_ADDR24 reset

При этом
gm@momed:~/powerpc$ ppc_8xx-ld -r -o a.elf a.out
работает, но relocation не удаляет (как я понял, на то оно и -r).

Ivan


Простейший пример на ассемблере для MPC860xx (PowerPC)
Привет Ivan!

15 Sep 05 18:28, Ivan Maximov писал Alex Mogilnikov:

 AM>>     А как ты определил, что она должна быть по смещению 0x100?
 IM> Перед ней стоит
 IM>         .skip   0x100

    Это не говорит абсолютно ни о чем. .skip 0x100 помещает 256 нулевых байт по
текущему адресу в текущей секции. Как эта секция потом будет размещена, из
приведенного тобой текста неизвестно. Смотри еще раз ассемблерный мануал.

 IM> . Как написано в man objcopy, пропадает она именно из-за того, что
 IM> copying a relocatable object file between any two formats may not work
 IM> as expected.

    Кто пропадает? Hикто у тебя не пропадал. Просто у тебя адреса были не
настроены. Именно потому что ассемблер не знает, на каком адресе окажется
reset. Это может знать только линкер.

 AM>>     А чем вызвано использование версии более чем пятилетней
 AM>> давности? Последняя версия, насколько я помню, уже 2.16.
 IM> Исключительно наличием у меня её, собранной под cygwin.

    Hу, дело твое, конечно.

 IM>  Пробовал 2.14
 IM> под линухом (из eldk), столкнулся с непонятными граблями:

 IM> gm@momed:~/powerpc$ ppc_8xx-ld -o a.elf a.out
 IM> a.out(.text+0x100): In function `oemprom_entry':
 IM> : relocation truncated to fit: R_PPC_ADDR24 reset

    Есть подозрение, что грабли не в линкере, а в программе. А старая версия
просто на них не напарывается (вероятно, как раз ошибочно).

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Синяки рождаются в споре куда чаще, чем истина...

Site Timeline