|
|
  |
свежак KGP win32/arm/avr/mips/m68k, GNU tools chain |
|
|
|
Feb 2 2010, 09:44
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(AHTOXA @ Feb 2 2010, 12:38)  Сдаётся мне, что нет  Моё предположение .... Наверное достоверно на этот вопрос только klen сможет.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Feb 2 2010, 17:22
|

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

|
2_AHTOXA Вы правы, под мелкоармами я понимаю то что называют "микроконтроллеры" - тоесть то где нет MMU, из того что я знаю это микрухи с флеш и озу в нутрях на arm7tdmi и cortex-m3. нада сказать что дело не вкомпиллере - он под любой cpu сможет генерить, дело в библиотеках и ld который нужный формат бинаря выдает. 2_inco Вы совершенно правы - еще косяг выщемил. забыл еще одну библу в дистрибутиив положить. в атаче зажатая архиватором 7z библы libgcc_s_dw2-1.dll и libgfortran-3.dll киньте в bin, все должно заработать. у меня arm-kgp-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. -x assembler-with-cpp -D VECT_TAB_RAM -Wa,-adhlns=List/startup_stm32f10x_md.lst,--gdwarf-2 Startup/startup_stm32f10x_md.S -o obj/startup_stm32f10x_md.o нормально генерить асм. посмотрел filemon'ом - грузится libgcc_s_dw2-1.dll которую заюыл положить извиняюсь. издержки експеремента по переходу со статической на сборку с дллэлками - это должно снизить размер дистрибутива. не критично при современных скоростях интернета но давно хотел для красоты сделать. вот и вылазит что чтото забыл положить. во втором архиве еще libgfortran-3.dll, не проверял, пока допишите в bin если на фортране компиляееть собираетесь
|
|
|
|
|
Feb 2 2010, 17:44
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
За свовременно выложенную dll спасибо. А что делать вот с этим: Цитата c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: error: no memory region specified for loadable section `.ARM.exidx.text.__gnu_ldivmod_helper' В смысле, какой паттерн описать чтобы всё подобное попало куда надо? Мой скрипт выглядит так: CODE 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) }
}
Сообщение отредактировал Genadi Zawidowski - Feb 2 2010, 17:53
|
|
|
|
|
Feb 2 2010, 18:23
|

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

|
Цитата(Genadi Zawidowski @ Feb 2 2010, 22:44)  какой паттерн описать чтобы всё подобное попало куда надо? Вставьте Код __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom куда-нибудь после glue_7t, но до etext.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 2 2010, 18:38
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
А эту куда? .ARM.extab.text.unwind_phase2_forced Описывал всё подряд... получил Цитата c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: .text has both ordered [`.ARM.exidx.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0\libgcc.a(bpabi.o)] and unordered [`.ARM.extab.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/ gcc/arm-kgp-eabi/4.5.0\libgcc.a(bpabi.o)] sections c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: final link failed: Bad value collect2: ld returned 1 exit status Есть у компилятора ключи чтобы не клал все функции в отдельные сеции? Или в каком порядке и где должны быть .ARM.extab.text.* и .ARM.exidx.text.* И ещё - надо ли ставить точку перед звёздочкой (в смысле - включать ли точку в шаблон) всяких имён секций .bss.*, .data.* и .text.* - что ещё можно встретить? ps: до этого исользовал сборку yagarto - решл попробовать... зы2: в конце теперь так Цитата c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: .text has both ordered [`.ARM.exidx.text.__gnu_ldivmod_helper' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0\l ibgcc.a(bpabi.o)] and unordered [`.rodata._global_impure_ptr' in c:/kgp_arm_eabi/bin/../lib/gcc/arm-kg p-eabi/4.5.0/../../../../arm-kgp-eabi/lib\libc.a(lib_a-impure.o)] sections c:/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.5.0/../../../../arm-kgp-eabi/bin/ld.exe: final link fail ed: Bad value АНТОХА, можете свой скрипт работающий с KGP выложить?
Сообщение отредактировал Genadi Zawidowski - Feb 2 2010, 18:53
|
|
|
|
|
Feb 2 2010, 18:59
|

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

|
Цитата(Genadi Zawidowski @ Feb 2 2010, 23:38)  А эту куда? .ARM.extab.text.unwind_phase2_forced А эту просто в текст: Код .text : { __ctors_start__ = .; KEEP(SORT(*)(.ctors)) __ctors_end__ = .; __dtors_start__ = .; __dtors_end__ = .; . = ALIGN(4); *(.text) /* remaining code */ *(.text.*) /* remaining code */ *(.rodata) /* read-only data (constants) */ *(.rodata*)
*(.eh_frame_hdr) *(.eh_frame) *(.ARM.extab* .gnu.linkonce.armextab.*) *(.gcc_except_table) *(.eh_frame_hdr) *(.eh_frame)
*(.glue_7) *(.glue_7t) . = ALIGN(4); } >rom
__exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom
__exidx_end = .; .text.align : { . = ALIGN(8); _etext = .; _sidata = _etext; } >rom
.data : AT ( _sidata ) ... Цитата Есть у компилятора ключи чтобы не клал все функции в отдельные сеции? Для этих - вряд ли, это какие-то специальные секции. Цитата И ещё - надо ли ставить точку перед звёздочкой (в смысле - включать ли точку в шаблон) всяких имён секций .bss.*, .data.* и .text.* - что ещё можно встретить? Вот bss: Код .bss : { . = ALIGN(4); _sbss = .; /* Used by the startup in order to initialize the .bss section */ *(.bss) *(.bss.*) *(COMMON) . = ALIGN(4); _ebss = .; /* Used by the startup in order to initialize the .bss section */ _end = .; __end = .; } >RAM Цитата ps: до этого исользовал сборку yagarto - решл попробовать... Ягарто старое совсем. Лучше CodeSourcery Sourcery G++ Lite, а ещё лучше - сборки klen-а Рабочие варианты скриптов для этих двух сборок можно посмотреть здесь. Там для кортексов, но не суть.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 2 2010, 19:40
|

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

|
это у меня для кортекса работает Код /*ENTRY(Reset_Handler)*/ OUTPUT_FORMAT ("elf32-littlearm")
MEMORY { flash (rx) : ORIGIN = 0x08000000, LENGTH = 256K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K }
/* define a global symbol _stack_end */ _stack_end_ = 0x2000ffff;
/* now define the output sections */ SECTIONS { . = 0; /* set location counter to address zero */
.text : /* collect all sections that should go into FLASH after startup */ { . = ALIGN(4); KEEP(*(.flash_vec_table)) *(.text) *(.text*) /* all .text sections (code) */ *(.rodata) /* all .rodata sections (constants, strings, etc.) */ *(.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(4); _text_end_ = .; /* define a global symbol _etext just after the last code byte */ } >flash /* put all the above into FLASH */
_ram_vec_load_start_ = _text_end_; .ram_vec : { . = ALIGN(4); _ram_vec_start_ = .; KEEP(*(.ram_vec)) _ram_vec_end_ = ALIGN( . , 4); } >ram AT> flash _ram_vec_load_end_ = _ram_vec_load_start_ + SIZEOF(.ram_vec);
_data_load_start_ = _ram_vec_load_end_; .data : /* collect all initialized .data sections that go into RAM */ { . = ALIGN(4); _data_start_ = .; /* create a global symbol marking the start of the .data section */ *(.data) /* all .data sections */ *(.data*) _data_end_ = ALIGN( . , 4); /* 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); _fast_load_start_ = _data_load_end_; .fast : { . = ALIGN(4); _fast_start_ = .; *(.fast) *(.fast*) _fast_end_ = ALIGN( . , 4); } >ram AT >flash _fast_load_end_ = _fast_load_start_ + SIZEOF(.fast); _flash_end_ = _fast_load_end_; .bss : { . = ALIGN(4); _bss_start_ = .; *(.bss) *(.bss*) _bss_end_ = .; } >ram
DISCARD : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } /* 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) } } это у меня для arm7tdmi, подянял старый проект персобрал свежаком.. тут вообще примитивный скрипт. собирается. попробуйте ...мож получится, тока карту памяти измените под себя Код /* identify the Entry Point */ /*ENTRY(_vectors)*/
/* specify the LPC2148 memory areas */ MEMORY { flash : ORIGIN = 0, LENGTH = 512K /* FLASH ROM */ ram_vec : ORIGIN = 0x40000000, LENGTH = 64 /* vec table in RAM */ ram_isp_low(A) : ORIGIN = 0x40000120, LENGTH = 223 /* variables used by Philips ISP bootloader */ ram : ORIGIN = 0x40000200, LENGTH = 32513 /* free RAM area */ ram_isp_high(A) : ORIGIN = 0x40007FE0, LENGTH = 32 /* variables used by Philips ISP bootloader */ ram_usb_dma : ORIGIN = 0x7FD00000, LENGTH = 8192 /* on-chip USB DMA RAM area (not used) */ }
/* define a global symbol _stack_end */ _stack_end = 0x40007EDC;
/* now define the output sections */ SECTIONS { . = 0; /* set location counter to address zero */ _vec_load_start_ = .; .vec : { KEEP(*(.vec*)) } >flash /* the startup code goes into FLASH */ _vec_load_end_ = _vec_load_start_ + SIZEOF(.vec);
.text : /* collect all sections that should go into FLASH after startup */ { *(.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) */ _text_end = .; /* define a global symbol _etext just after the last code byte */ } >flash /* put all the above into FLASH */ .fast_vec : { _fast_vec_start_ = .; _fast_vec_end_ = _fast_vec_start_ + SIZEOF(.vec); } >ram_vec _fast_load_start_ = ALIGN ( _text_end , 4 ); .fast : { _fast_start_ = .; *(.fast) _fast_end_ = .; } >ram AT >flash _fast_load_end = _fast_load_start_ + SIZEOF(.fast); _data_load_start_ = ALIGN ( _fast_load_end , 4 ); .data : /* collect all initialized .data sections that go into RAM */ { _data_start_ = .; /* create a global symbol marking the start of the .data section */ *(.data) /* all .data sections */ _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);
.bss : /* collect all uninitialized .bss sections that go into RAM */ { _bss_start = .; /* define a global symbol marking the start of the .bss section */ *(.bss) /* all .bss sections */ } >ram /* put all the above in RAM (it will be cleared in the startup code */
. = ALIGN(4); /* advance location counter to the next 32-bit boundary */ _bss_end = .; /* define a global symbol marking the end of the .bss section */
} _end = .; /* define a global symbol marking the end of application RAM */
|
|
|
|
|
Feb 3 2010, 06:51
|

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

|
Цитата(Genadi Zawidowski @ Feb 3 2010, 04:47)  Кто-нибудь может понять, почему этот комплект не собирает? Потому что вы сделали не так, как я писал  Вот, поправил:
sam7x64_rom.zip ( 1.54 килобайт )
Кол-во скачиваний: 114(Обратите внимание, что откуда-то подтягивается вызов malloc.)
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 3 2010, 17:54
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(AHTOXA @ Feb 3 2010, 09:51)  Потому что вы сделали не так, как я писал  Вот, поправил:
sam7x64_rom.zip ( 1.54 килобайт )
Кол-во скачиваний: 114(Обратите внимание, что откуда-то подтягивается вызов malloc.) всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp. В моём я перевёл в discard eh_frame*, убралось десять килобайт.
|
|
|
|
|
Feb 3 2010, 18:19
|

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

|
Так заработало? С этими секциями да, много непонятного. И самое непонятное - где взять инфу о том, что это за секции  ЗЫ. Мои старые варианты линкерных скриптов для kgp перестали работать. Насколько я понял, конструкторы переехали из .ctors в .init_array. Цитата(Genadi Zawidowski @ Feb 3 2010, 22:54)  всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp. В моём я перевёл в discard eh_frame*, убралось десять килобайт. Есть более правильный вариант:
sys.zip ( 332 байт )
Кол-во скачиваний: 164Добавьте этот файл к проекту, и ничего не придётся дискардить
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|