реклама на сайте
подробности

 
 
> ld script, for dummy
Idle
сообщение Nov 19 2007, 13:04
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Пишу код для ROM. Два файла на ассемблере: первый выполняется по одним виртуальным адресам, инициализирует кэш и в конце его следует jump в начало второго файла, который должен выполняться по другим виртуальным адресам(другой сегмент, кэширование для него используется). (Это у MIPS kseg1 и kseg0). Физически во flash код расположен непрерывно, понятно.

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

Ссылки на "написание скриптов для полных идиотов" приветствуются. smile.gif
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
e-yes
сообщение Nov 19 2007, 15:56
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 16-06-07
Пользователь №: 28 483



Видел кучу ссылок такого плана
тут - http://www.google.com/search?client=opera&...=GNU+LD+scripts

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

Еще вариант использовать собственно секции, указывая в коде куда линковать что-то...
Код
    .text
    .arm
    .section .arminit, "ax"
Go to the top of the page
 
+Quote Post
Idle
сообщение Nov 20 2007, 09:09
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Код
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
Go to the top of the page
 
+Quote Post
e-yes
сообщение Nov 20 2007, 15:23
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 16-06-07
Пользователь №: 28 483



Там, кстати, имеет смысл определять переменные, указывающие на начало и конец секции. Типа как в 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__ = .;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 13:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01347 секунд с 7
ELECTRONIX ©2004-2016