Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: секция .eh_frame
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Genadi Zawidowski
Перешёл на новый yagarto с gcc 4.4.1 - как и предупреждал автор, в выходных файлах (ил в библиотечных модулях) появилась эта секция (.eh_frame).

Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена:
К сегменту text (инициализированные данные, при работе не модифицируются)
К сегменту data (инициализированные данные, модифицируемые при работе программы)
К сегменту bss (неинициализированная область данных)

И ещё - если в start-up не подготавливается ничего для обработки ексепшинов - можно ли (какой синтаксис ld script) может "вынести совсем" эти секции из результирующего образа программы (и не отводить ни ПЗУ ни ОЗУ)?

Я видел запись
Цитата
{
что-то тут
} >ram = 0

Это оно?
AHTOXA
Цитата(Genadi Zawidowski @ Aug 24 2009, 02:59) *
Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена


В text.

Цитата
И ещё - если в start-up не подготавливается ничего для обработки ексепшинов - можно ли (какой синтаксис ld script) может "вынести совсем" эти секции из результирующего образа программы


Есть DISCARD :
Код
DISCARD :
    {
        *(.eh_frame_hdr)
        *(.eh_frame)
    }


Можно сделать по аналогии с отладочными секциями:
Код
.eh_cection  0 :
{
        *(.eh_frame_hdr)
        *(.eh_frame)
}


Но я бы не стал это выкидывать.
Genadi Zawidowski
Сделал так:

Код
ENTRY(ResetHandler)
SEARCH_DIR(.)

/*
* Define stack size here
*/
FIQ_STACK_SIZE = 0x0100;
IRQ_STACK_SIZE = 0x0100;
ABT_STACK_SIZE = 0x0100;
UND_STACK_SIZE = 0x0100;
SVC_STACK_SIZE = 0x0400;


MEMORY
{
  rom : org = 0x00100000, len = 64k
  ram : org = 0x00200000, len = 16k
}

/*
* Do not change the next code
*/
SECTIONS
{
  .text :
  {
    *(.vectors);
    . = ALIGN(4);
    *(.init);
    . = ALIGN(4);
    *(.text);
    . = ALIGN(4);
    *(.rodata);
    . = ALIGN(4);
    *(.rodata*);
    . = ALIGN(4);
    *(.glue_7t);
    . = ALIGN(4);
    *(.glue_7);
/*
    . = ALIGN(4);
     KEEP (*(.eh_frame))
*/
    . = ALIGN(4);
    etext = .;
  } > rom

  .data : AT (ADDR (.text) + SIZEOF (.text))
  {
    PROVIDE (__data_start = .);
    *(.ramfunc)
    . = ALIGN(4);
    *(.data)
    . = ALIGN(4);
    edata = .;
    _edata = .;
    PROVIDE (__data_end = .);
  } > ram

  .bss :
  {
    PROVIDE (__bss_start = .);
    *(.bss)
    *(COMMON)
    . = ALIGN(4);
    PROVIDE (__bss_end = .);
    
    . = ALIGN(256);
    
    PROVIDE (__stack_start = .);
    
    PROVIDE (__stack_fiq_start = .);
    . += FIQ_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_fiq_end = .);

    PROVIDE (__stack_irq_start = .);
    . += IRQ_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_irq_end = .);

    PROVIDE (__stack_abt_start = .);
    . += ABT_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_abt_end = .);

    PROVIDE (__stack_und_start = .);
    . += UND_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_und_end = .);

    PROVIDE (__stack_svc_start = .);
    . += SVC_STACK_SIZE;
    . = ALIGN(4);
    PROVIDE (__stack_svc_end = .);
    PROVIDE (__stack_end = .);
    PROVIDE (__heap_start = .);  
  } > ram

/DISCARD/ :
    {
        *(.eh_frame_hdr)
        *(.eh_frame)
    }

}
AHTOXA
Цитата(Genadi Zawidowski @ Aug 24 2009, 13:22) *
Сделал так:


Ну и как? Работает без этих eh_ ?
Genadi Zawidowski
Старый проект, перекомпилирванный с 4.4.1 и линкованный приведённым скриптом, работает (решюшки щёлкают, индикатор показывает...).
AHTOXA
Это хорошоsmile.gif
Но я бы всё же не стал выбрасывать эти секции. Во-первых, мало ли чтоsmile.gif Во-вторых, их размер скорее всего нулевой или около того. А в третьих, я уже столкнулся с тем, что при определённых условиях обработка исключений таки подключается.

ЗЫ. Тему бы перенести в "GNU/OpenSource средства разработки для avr/arm/mips"...
Genadi Zawidowski
Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять). Должен ли стартап знать что-то про обработчики?

В указанной теме ничего относящегося к теме обработки ексепшинов не увидел. Вылет по вызову pure virtual это не из этой оперы.
AHTOXA
Цитата(Genadi Zawidowski @ Aug 24 2009, 14:58) *
Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять).


Это если с -fno-exceptions?

Цитата
Должен ли стартап знать что-то про обработчики?


Вряд ли.

Цитата
В указанной теме ничего относящегося к теме обработки ексепшинов не увидел. Вылет по вызову pure virtual это не из этой оперы.


Дело не в pure virtual как таковых, а в том, что при их применении компилятор подтягивает код обработки исключений.
Genadi Zawidowski
Цитата
Это если с -fno-exceptions?

Не применял этой опции. Но из libc подтягивается тоже - а перекомпилировать не собирался.
Да, код у меня - чистый C.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.