Перейти к содержанию
    

вопрос по скриптам линкера для MIPS

Как сделать так, чтобы мипсовская программа запускалась с некоторого адреса таким кодом:

void foo(void) __attribute__((section(".foo")))
asm("bal main"::);
asm("nop"::);

Затем должно идти на данный момент пустое пространство(в дальнейшем здесь будет находится переход на обработку прерывания), равное 300 байтам, затем след. код:

void main()
foo_1();
foo_2();

 

Я знаю, как указать начало входа программы, но как добиться перехода на строго определенный другой адрес, чтобы зарезервированные адреса не перекрывались ничем другим, не могу вкурить. Буду рад вашей помощи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я знаю, как указать начало входа программы, но как добиться перехода на строго определенный другой адрес, чтобы зарезервированные адреса не перекрывались ничем другим, не могу вкурить. Буду рад вашей помощи.

Зарезервировать области памяти можно примерно так:

  .text :
  {
    *(.foo)
    _reserved = .;
    . = . + 300;    /* здесь будет пропущено 300 байт */
    *(.text)
  }  > text

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зарезервировать области памяти можно примерно так:

 

Вот :rolleyes: Спасибо, не знал. Хотя вчера добился задачи другим способом: каждую функцию в отдельный файл, далее линковку:

.text:
{
       foo1.o(.text)
       . = . +300;
       foo2.o(.text)
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...