Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ld script
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Idle
Пишу код для ROM. Два файла на ассемблере: первый выполняется по одним виртуальным адресам, инициализирует кэш и в конце его следует jump в начало второго файла, который должен выполняться по другим виртуальным адресам(другой сегмент, кэширование для него используется). (Это у MIPS kseg1 и kseg0). Физически во flash код расположен непрерывно, понятно.

Вопрос: скрипт для GNU ld как будет выглядеть?

Ссылки на "написание скриптов для полных идиотов" приветствуются. smile.gif
Спасибо.
e-yes
Видел кучу ссылок такого плана
тут - http://www.google.com/search?client=opera&...=GNU+LD+scripts

А разбить проект на два (лоадер и остальная часть), но сливать в один бинарник (cat) не решение?

Еще вариант использовать собственно секции, указывая в коде куда линковать что-то...
Код
    .text
    .arm
    .section .arminit, "ax"
Idle
Код
SECTIONS
{
    .txt1 0xbfc00000 :
        AT(0)
    {
        boot_kseg1.o(.text)
    }
    .txt2 0x9fc00000 :
        AT (SIZEOF(.txt1))
    {
        boot_kseg0.o(.text)
    }
}


Цитата(e-yes @ Nov 19 2007, 18:56) *
А разбить проект на два (лоадер и остальная часть), но сливать в один бинарник (cat) не решение?

Простых путей не ищем. smile.gif
e-yes
Там, кстати, имеет смысл определять переменные, указывающие на начало и конец секции. Типа как в BSS/SBSS:
Код
  __bss_start = .;
  __bss_start__ = .;
  .sbss      :
  {
    PROVIDE (__sbss_start = .);
    PROVIDE (___sbss_start = .);
    *(.dynsbss)
    *(.sbss)
    *(.sbss.*)
    *(.gnu.linkonce.sb.*)
    *(.scommon)
    PROVIDE (__sbss_end = .);
    PROVIDE (___sbss_end = .);
  }
  .bss ALIGN(0x10) :
  {
   *(.dynbss)
   *(.bss)
   *(.bss.*)
   *(.gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.  */
   . = ALIGN(32 / 8);
  }
  . = ALIGN(32 / 8);
  _end = .;
  _bss_end = .;
  __bss_end__ = .;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.