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

Yagarto Eclipse+GCC4.2.1/4.2.2 - в хидерах компилятся все функции!

Выходные файлы пусты, а объектные созданы правильно.
Люкс! Теперь осталось в вашем скрипте сделать KEEP() для сегмента, в котором располагаются вектора. Т.е. надо вектора (в crt.s) поместить в отдельную секцию, обозвав ее, скажем, vectors:
/* GNU assembler controls  */
.vectors                                    /* all assembler code that follows will go into .vectors section     */
.arm                                    /* compile for 32-bit ARM instruction set                         */
.align                                    /* align section on 32-bit boundary                                 */

/* ============================================================ */
/*                         VECTOR TABLE                              */
/*                                                                */
/*    Must be located in FLASH at address 0x00000000                */
/*                                                                */
/*    Easy to do if this file crt.s is first in the list             */
/*    for the linker step in the makefile, e.g.                    */
/*                                                                */
/*        $(LD) $(LFLAGS) -o main.out  crt.o main.o                */
/*                                                                */
/* ============================================================ */

_vec_reset:        b           _init_reset                /* RESET vector - must be at 0x00000000    */
_vec_undef:        b           AT91F_Undef_Handler        /* Undefined Instruction vector            */
_vec_swi:        b           _vec_swi                /* Software Interrupt vector            */
_vec_pabt:        b           AT91F_Pabt_Handler        /* Prefetch abort vector                */
_vec_dabt:        b           AT91F_Dabt_Handler        /* Data abort vector                    */
_vec_rsv:        nop                                 /* Reserved vector                        */
_vec_irq:        b           AT91F_Irq_Handler        /* Interrupt Request (IRQ) vector        */
_vec_fiq:        b            AT91F_Default_FIQ_handler    /*Fast interrupt request (FIQ) vector    */

.text     /* place remaining code to .text section */

и в скрипте линкера сделать

SECTIONS 
{
    . = 0;                                /* set location counter to address zero  */
    
    .text :                                /* collect all sections that should go into FLASH after startup  */ 
    {
        KEEP(*(.vectors))
        *(.text)                        /* all .text sections (code)  */

 

 

Вобще-то, насколько я понял из документации (в школе учил французский :biggrin: ), -Wl, - означает "передать следующий флаг линкеру".
Да, вы поняли правильно. Так линкер должен эту -Wl получить, т.е. она должна быть передана gcc при линковке (в цели main.out), а у вас ее получал компилятор в целях *.o

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


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

Добавил:

. = 0x0000000;
         .text : { KEEP(*crt.o (.text)) }>CODE =0
         .text :
         ...

(скрипт уже не тот, что в представленном проэкте)

О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! :08:

Даже из созданной библиотеки libicpsr.a линкуется только используемая функция, хотя я ее (библиотеку) сделал из одного файла!

Истина восторжествовала!

Огромное спасибо zltigo, но особенное вам, Сергей!

ЗЫ: был бы в Риге - поставил бы пиво и, возможно даже, расцеловал бы от счастья! :biggrin:

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


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

О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! :08:
ЗдОрово. Когда будете переходить на С++, не забудьте сделать KEEP() для секций конструкторов и деструкторов статических объектов *(ctors.*) и *(dtors.*). Вы можете уже сейчас добавить эти строчки в скрипт линкера - пока конструкторов и деструкторов нет, они ни на что влиять не будут. Зато потом можно будет избежать лишней головной боли.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...