GenaSPB 11 23 августа, 2009 Опубликовано 23 августа, 2009 (изменено) · Жалоба Перешёл на новый yagarto с gcc 4.4.1 - как и предупреждал автор, в выходных файлах (ил в библиотечных модулях) появилась эта секция (.eh_frame). Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена: К сегменту text (инициализированные данные, при работе не модифицируются) К сегменту data (инициализированные данные, модифицируемые при работе программы) К сегменту bss (неинициализированная область данных) И ещё - если в start-up не подготавливается ничего для обработки ексепшинов - можно ли (какой синтаксис ld script) может "вынести совсем" эти секции из результирующего образа программы (и не отводить ни ПЗУ ни ОЗУ)? Я видел запись { что-то тут } >ram = 0 Это оно? Изменено 23 августа, 2009 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 23 августа, 2009 Опубликовано 23 августа, 2009 · Жалоба Кто-нибудь знает точно - эта секция должна быть к чему при линковке отнесена В text. И ещё - если в start-up не подготавливается ничего для обработки ексепшинов - можно ли (какой синтаксис ld script) может "вынести совсем" эти секции из результирующего образа программы Есть DISCARD : DISCARD : { *(.eh_frame_hdr) *(.eh_frame) } Можно сделать по аналогии с отладочными секциями: .eh_cection 0 : { *(.eh_frame_hdr) *(.eh_frame) } Но я бы не стал это выкидывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Сделал так: 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 15 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Сделал так: Ну и как? Работает без этих eh_ ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Старый проект, перекомпилирванный с 4.4.1 и линкованный приведённым скриптом, работает (решюшки щёлкают, индикатор показывает...). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Это хорошо:) Но я бы всё же не стал выбрасывать эти секции. Во-первых, мало ли что:) Во-вторых, их размер скорее всего нулевой или около того. А в третьих, я уже столкнулся с тем, что при определённых условиях обработка исключений таки подключается. ЗЫ. Тему бы перенести в "GNU/OpenSource средства разработки для avr/arm/mips"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять). Должен ли стартап знать что-то про обработчики? В указанной теме ничего относящегося к теме обработки ексепшинов не увидел. Вылет по вызову pure virtual это не из этой оперы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Размер не нулевой, около полкилобайта в 24-хклобайтном проекте набралось (видно, если не в discard направлять). Это если с -fno-exceptions? Должен ли стартап знать что-то про обработчики? Вряд ли. В указанной теме ничего относящегося к теме обработки ексепшинов не увидел. Вылет по вызову pure virtual это не из этой оперы. Дело не в pure virtual как таковых, а в том, что при их применении компилятор подтягивает код обработки исключений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 24 августа, 2009 Опубликовано 24 августа, 2009 · Жалоба Это если с -fno-exceptions? Не применял этой опции. Но из libc подтягивается тоже - а перекомпилировать не собирался. Да, код у меня - чистый C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться