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

секция .eh_frame

Перешёл на новый yagarto с gcc 4.4.1 - как и предупреждал автор, в выходных файлах (ил в библиотечных модулях) появилась эта секция (.eh_frame).

 

Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена:

К сегменту text (инициализированные данные, при работе не модифицируются)

К сегменту data (инициализированные данные, модифицируемые при работе программы)

К сегменту bss (неинициализированная область данных)

 

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

 

Я видел запись

{

что-то тут

} >ram = 0

Это оно?

Изменено пользователем Genadi Zawidowski

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


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

Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена

 

В text.

 

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

 

Есть DISCARD :

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

 

Можно сделать по аналогии с отладочными секциями:

.eh_cection  0 : 
{ 
        *(.eh_frame_hdr)
        *(.eh_frame)
}

 

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

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


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

Сделал так:

 

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)
    }

}

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


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

Старый проект, перекомпилирванный с 4.4.1 и линкованный приведённым скриптом, работает (решюшки щёлкают, индикатор показывает...).

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


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

Это хорошо:)

Но я бы всё же не стал выбрасывать эти секции. Во-первых, мало ли что:) Во-вторых, их размер скорее всего нулевой или около того. А в третьих, я уже столкнулся с тем, что при определённых условиях обработка исключений таки подключается.

 

ЗЫ. Тему бы перенести в "GNU/OpenSource средства разработки для avr/arm/mips"...

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


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

Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять). Должен ли стартап знать что-то про обработчики?

 

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

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


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

Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять).

 

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

 

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

 

Вряд ли.

 

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

 

Дело не в pure virtual как таковых, а в том, что при их применении компилятор подтягивает код обработки исключений.

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


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

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

Не применял этой опции. Но из libc подтягивается тоже - а перекомпилировать не собирался.

Да, код у меня - чистый C.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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