|
|
  |
свежак KGP win32/arm/avr/mips/m68k, GNU tools chain |
|
|
|
Apr 28 2012, 16:44
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
1. кроме Genadi Zawidowsy сборку тестил ктонить? желающих было пруд пруди. 2. у меня lto работает не отваливается, но с сингулярнностями - железобетонно выкидывает функцию FreeRTOS vTaskSwitchContex, корни такого поведения видимо в том что эта функция вызывается из асм вставки и lto анализатор туда незалазит не видит что эта функция откудата тянется. я решил эту задачу обявив так ее void __attribute__((used)) vTaskSwitchContext( void ) - таким образом запретив выкидывать ее вообще любому оптимизатору. Бывают проблемы с голыми функциями, но в целом при понимании как это работет можно заставить работать. эффект конечно изумляет - у меня в пределах 30-10% уменьшение объема кода (то что на выходе это страшно жеско пережеванное что совсем не похоже на на то что входило в оптимайзер) 3. про кактус. человек всегда понимает слова друго так как ему хочется. вот опять... перевожу на математический кактус == ( win32 == win64 == Mustdue ) != unix тождество верно! я никого ни вкоем случае не агитировал на win7/8/(и благодаря Вам их еще будет навернго много) по мне пусть микрософт ваще издохнет - я не замечу. я агитирую за то чтоб хотябы паралельно на ту машину на которой ведется разработка потавить хотябы ubuntu и ПОПРОБЫВАТЬ!!! подевелоперит на ней. ЗЫ. Всех поздравляю с началом Майских праздников. с сЁдня до 3 я телепортируюсь в глухие леса для ловли рыбы и фотаграфирования бабочек... компьторы и прочая для меня умерли как минимум на 4 дня! завидуте мне те кто давно стал наркоманом и не может без интерента и твиттера!! засим откланиваюсь. мой скрипт для линковки прилагается, только он сильно на CRT код завязан, тоесть у каждого оно может сильно различатся: CODE OUTPUT_FORMAT ("elf32-littlearm") ENTRY(flash_vec_table) MEMORY { flash (rx) : ORIGIN = 0x08000000, LENGTH = 512K - ALIGN( 0K , 4 ) eeprom (rw) : ORIGIN = 0x08000000 + LENGTH(flash), LENGTH = ALIGN( 0K , 4 ) ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K }
/* define a global symbol _stack_end */ _stack_end_ = ORIGIN(ram) + LENGTH(ram) - 1 - 0x00000000;
/* now define the output sections */ SECTIONS { . = 0; /* set location counter to address zero */ .text : { _image_start_ = .; _vec_start_ = .; KEEP(*(.flash_vec_table*)) _vec_end_ = .; _text_start_ = .; __preinit_array_start = .; KEEP(*(SORT(.preinit_array*))) __preinit_array_end = .; __init_array_start = .; KEEP(*(SORT(.init_array*))) __init_array_end = .; __fini_array_start = .; KEEP(*(SORT(.fini_array*))) __fini_array_end = .; . = ALIGN(4); *(.text*) /* all .text sections (code) */ *(.rodata*) /* all .rodata* sections (constants, strings, etc.) */ *(.glue_7) /* all .glue_7 sections (no idea what these are) */ *(.glue_7t) /* all .glue_7t sections (no idea what these are) */ *(.gnu*) *(.gcc*) . = ALIGN(16); _text_end_ = .; /* define a global symbol _etext just after the last code byte */ } >flash /* put all the above into FLASH */
.eeprom_emul : { _eeprom_start_ = .; *(.eeprom) *(.eeprom*) _eeprom_stop_ = .; } > eeprom
.bss (NOLOAD): { _ram_vec_start_ = .; *(.ram_vec_table*) _ram_vec_end_ = .; _bss_start_ = .; *(.bss*) *(COMMON) _bss_end_ = .; } >ram _data_load_start_ = _text_end_; .data : /* collect all initialized .data sections that go into RAM */ { . = ALIGN(4); _data_start_ = .; _ramfunc_start_ = .; *(.ramfunc*) _ramfunc_end_ = .; . = ALIGN(4); _data_statrt_ = .; *(.data*) /* all .data sections */ . = ALIGN(4); _data_end_ = .; /* define a global symbol marking the end of the .data section */ } >ram AT >flash /* put all the above into RAM (but load the LMA copy into FLASH) */ _data_load_end_ = _data_load_start_ + SIZEOF(.data); _ext_mem_bank0_data_load_end_ = _data_load_end_ ; _ext_mem_bank1_data_load_end_ = _ext_mem_bank0_data_load_end_ ; _ext_mem_bank2_data_load_end_ = _ext_mem_bank1_data_load_end_; _ext_mem_bank3_data_load_end_ = _ext_mem_bank2_data_load_end_;
_image_end_ = _image_start_ + SIZEOF(.text); /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) *(.ARM.exidx*) *(.ARM.extab*) }
.igot 0 : { *(.igot*) } .vfp11_veneer 0 : { *(.vfp11_veneer*) } .v4_bx 0 : { *(.v4_bx*) } .iplt 0 : { *(.iplt*) } .rel 0 : { *(.rel*) } /* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } }
Сообщение отредактировал IgorKossak - Apr 28 2012, 17:23
Причина редактирования: [codebox]
|
|
|
|
|
Apr 28 2012, 18:42
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Я немножко потестировал. Работает, размер тестового примера чуть подрос, с LTO не заработал. Сейчас добавил Код __attribute__ ((used)) перед таблицей векторов, и небольшой пример заработал с LTO! (Но это дома, на линуксовой сборке) 2 Genadi Zawidowski. Получается, что вот эти скрипты от scmRTOS нормально работают с LTO. 2 klen. Эту вашу агитацию за линукс мы все прекрасно поняли  Счастливо отдохнуть!
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 28 2012, 20:58
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
«Ну не знаю»™ Пакет старый довольно arm-kgp-eabi-g++ (Klen's GNU package (KGP) for ARM/elf platform) 4.7.0 20110924 (experimental) свежего не ставил ещё. Исходники примера CortexM3/GCC/LPC17XX/4-Debug из trunk с правкой в OS_Target_asm.S (ldr/blx -> bl). • атрибута used в startup.c для таблицы векторов нет• линкерный скрипт и makefile стянуты из примеров STM32F1XX с мелкими правками согласно используемого чипа. Для уверенности сделано такое: Код $ svn diff Index: src/debug/debug.cpp =================================================================== --- src/debug/debug.cpp (revision 530) +++ src/debug/debug.cpp (working copy) @@ -111,7 +111,7 @@ for(;;) { OS::sleep(1000); uart << "\x1B" "c" "\x1B[2J" // Reset terminal, clear screen and go home - "4-Debug scmRTOS sample\r\n" + "4-Debug scmRTOS sample (LTO=" LTO ")\r\n" "\x1B[1m\x1B[37;42m" // set color attributes (white on green) "Process\tStack\tCPU%\r\n" "\x1B[1m\x1B[37;40m" // set color attributes (white on black) Index: makefile =================================================================== --- makefile (revision 530) +++ makefile (working copy) @@ -119,6 +119,7 @@ FLAGS += -MD FLAGS += $(DEFS) FLAGS += -Wa,-adhlns=$(addprefix $(LSTDIR)/, $(notdir $(addsuffix .lst, $(basename $<)))) + FLAGS += -DLTO=\"$(USE_LTO)\" AFLAGS = $(FLAGS) Т.е. вместе с изменением режима сборки меняется сообщение в терминалке. И оно меняется, т.е. без атрибута used с LTO всё собирается нормально.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 29 2012, 17:37
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ReAl @ Apr 29 2012, 02:58)  «Ну не знаю»™ Аналогично™  У меня пакет новый (4.8.0 20120422). Собираю пример 1-Eventflag из примеров для STM32. Без LTO - 1776 байт, работает. С LTO - 1304 байта, не работает. Полностью отсутствует таблица векторов. Добавляю аттрибут used к таблице векторов - получаю размер 1784 байта (!), и всё начинает работать. Вполне возможно, что проскочила какая-то версия, которая сама сразу не выбрасывала таблицу векторов, но я её пропустил. Хорошо, что теперь есть примерный рецепт приготовления LTO. Смущает только, что работает он пока "с сингулярностями"  ЗЫ. А на проектах побольше LTO таки даёт приличный выигрыш по размеру, как и должна.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 1 2012, 10:30
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Что там с LTO в ветке avr-gcc? А то странная картина получается: LTO не доделали ещё, а -fwhole-program и --combine уже убрали
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 1 2012, 19:50
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(AHTOXA @ May 1 2012, 21:26)  У меня без проблем уживаются codesourcery, kgp, msp-gcc и winavr. Под windows? Что-то дополнительно ставите для codesourcery(к примеру)? Цитата(AHTOXA @ May 1 2012, 21:26)  В чём проблема, напишите поконкретнее. Сейчас пути прописал по новой к arm-kgp-eabi-x86_32\bin - заработало. Проблема самоликвидировалась.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|