Так давать нечего стандартный startup_stm32f10x_hd.S из библиотек STM32 а вот как ругается уже не помню. После того как выяснил что не работает вернулся на предыдущую версию.
свежая сборка для мелкоармов
http://www.klen.org/Files/DevTools/kgp_arm_eabi_20100201.7zвроде теперь все "дээллэлки" положил

openocd собран "ширше и глубже":
--enable-ft2232_ftd2xx
--enable-ep93xx
--enable-at91rm9200
--enable-presto_ftd2xx
--enable-parport-giveio
--enable-amtjtagaccel
--enable-jlink
--enable-rlink
--enable-arm-jtag-ew
должны работать не только прикрутки на ftdi. проверьте у кого есть RLink и JLink.
проверил на своих проекта на stm32f107 и lpc2103, девайсы работают исправно.
2_inco асм компиляет и для того и для другого.
dimka76
Feb 2 2010, 05:34
Цитата(klen @ Feb 2 2010, 01:56)

свежая сборка для мелкоармов
Что означает термин
"мелкоармы" ?
Сергей Борщ
Feb 2 2010, 09:30
Цитата(dimka76 @ Feb 2 2010, 07:34)

Что означает термин "мелкоармы" ?
Рискну предположить, что это Little-endian ARM. Правильно догадался?
Цитата(Сергей Борщ @ Feb 2 2010, 14:30)

Рискну предположить, что это Little-endian ARM. Правильно догадался?
Сдаётся мне, что нет

Моё предположение - это голые армы (без оси), первая строчка в
табличке от CS.
dimka76
Feb 2 2010, 09:44
Цитата(AHTOXA @ Feb 2 2010, 12:38)

Сдаётся мне, что нет

Моё предположение ....
Наверное достоверно на этот вопрос только
klen сможет.
А у меня всё равно не работает ассемблер!
Вот что выдаёт:
Assembling: Startup/startup_stm32f10x_md.S
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
make: *** [Startup/startup_stm32f10x_md.o] Error 1
При этом версия kgp_arm_eabi_20091127 всё ест спокойно без возмущения
Assembling: Startup/startup_stm32f10x_md.S
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
Просто заменяю в директории WinARM файлы из одного или другого архива. С проектом и исходниками при этом ничего не делаю!
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 если на фортране компиляееть собираетесь
Genadi Zawidowski
Feb 2 2010, 17:44
За свовременно выложенную 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, 22:44)

какой паттерн описать чтобы всё подобное попало куда надо?
Вставьте
Код
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} >rom
куда-нибудь после
glue_7t, но до
etext.
Genadi Zawidowski
Feb 2 2010, 18:38
А эту куда?
.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, 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-а
Рабочие варианты скриптов для этих двух сборок можно посмотреть
здесь. Там для кортексов, но не суть.
это у меня для кортекса работает
Код
/*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 */
Genadi Zawidowski
Feb 2 2010, 19:53
Насчёт ягарто... обновлялся в декабре 2009-го года.
Цитата
C:\user\dds2\TC1\at91sam7s>arm-elf-gcc --version
arm-elf-gcc.EXE (GCC) 4.4.2
Ваш скрипт попробую применить - на работающем проекте (arm7tdmi, AT91SAM7Sxxx).
Спасибо! Теперь действительно работает!
Genadi Zawidowski
Feb 2 2010, 23:47
Похоже, я нарвался на какой-то старый баг:
http://www.mail-archive.com/bug-binutils@g...g/msg01065.htmlТолько сейчас, он конечно более детальную диагностику вызывает - но от этого не легче - имедж не собирается.
Проект в аттачменте, в каталоге at91sam7s находится Makefile. В нём прописан путь к месту, где находится "свежак KGP". Кто-нибудь может понять, почему этот комплект не собирает?
Цитата(Genadi Zawidowski @ Feb 3 2010, 04:47)

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

Вот, поправил:
Нажмите для просмотра прикрепленного файла(Обратите внимание, что откуда-то подтягивается вызов
malloc.)
Genadi Zawidowski
Feb 3 2010, 17:54
Цитата(AHTOXA @ Feb 3 2010, 09:51)

Потому что вы сделали не так, как я писал

Вот, поправил:
Нажмите для просмотра прикрепленного файла(Обратите внимание, что откуда-то подтягивается вызов
malloc.)
всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp.
В моём я перевёл в discard eh_frame*, убралось десять килобайт.
Так заработало?
С этими секциями да, много непонятного. И самое непонятное - где взять инфу о том, что это за секции

ЗЫ. Мои старые варианты линкерных скриптов для kgp перестали работать. Насколько я понял, конструкторы переехали из .ctors в .init_array.
Цитата(Genadi Zawidowski @ Feb 3 2010, 22:54)

всё начинается с откуда-то взявшегося unwind-arm.o. В варианте kgp.
В моём я перевёл в discard eh_frame*, убралось десять килобайт.
Есть более правильный вариант:
Нажмите для просмотра прикрепленного файлаДобавьте этот файл к проекту, и ничего не придётся дискардить
Genadi Zawidowski
Feb 3 2010, 18:34
Так заработало?
Собранное kgp при объёме 46 килобайт работает. С этимже скриптом yagarto даёт имедж размером 36 килобайт. Вернуть на место discard - опят 30.5 килобайт.
sys.zip - это заплата, спсибо, но я не стал бы её использовать. Я не хотел бы терять контроля над кодом, дабы избежать непредсказуемого поведения в embedded приложении.
Цитата(Genadi Zawidowski @ Feb 3 2010, 23:34)

sys.zip - это заплата, спсибо, но я не стал бы её использовать. Я не хотел бы терять контроля над кодом, дабы избежать непредсказуемого поведения в embedded приложении.
А в чём состоит контроль над кодом? Тем более, если он всё равно весь вылетает в discard?

Насколько я понимаю, заплата как раз позволяет не подлинковывать неиспользуемый код по обработке исключений.
Genadi Zawidowski
Feb 3 2010, 19:12
если в discard ушло что-то нужное, на что есть ссылки в остальном коде, получаем сообщение об ошибке. Так, весь код попавший в discard, все ссылки имел только внутри себя (примерно так, на абсолютную точность в логике и совершенное знание как транслируется сейчас код gcc для arm не претеную). Есть ещё экзотика типа обращение между адресами определёнными в скрипте линкера или стартапе, но на такое багогенерирующее усовершенствование ответственные програмисты идут неохотно.
В осовном анализ .map файла помогал понять, что можно удалять (откуда взялась секция).
ps: sys.c уменьшил или нет код, не присмотрелся 46 килобайт так и осталось (вместо 30 с копейками).
free/malloc, весь stdio и io присутствует, signal, memcpy, syscalls. Я не вызываю ничего из этого.
Цитата(Genadi Zawidowski @ Feb 4 2010, 00:12)

ps: sys.c уменьшил или нет код, не присмотрелся 46 килобайт так и осталось (вместо 30 с копейками).
free/malloc, весь stdio и io присутствует, signal, memcpy, syscalls. Я не вызываю ничего из этого.
Да, это мне категорически не нравится... Пока мне удаётся этого избегать, но хочется понять, откуда вообще подключается обработка исключений? Насколько я знаю, в режиме си она по умолчанию должна быть отключена.
2
klen, может ключик --disable-libunwind-exceptions при конфигурировании нас спасёт?
Genadi Zawidowski
Feb 4 2010, 05:14
библотека-то одна на всё. Просто выдачу сообщения в обработчике надо как-то перехватить. Или делать разные библиотеки.
можно собрать без обработки С++ эксепшенов.
а можно эту хрень в DISCARD
вдруг комуто захочется убедится что обработка исключений С++ на микроконтроллерах вопрос исключительно академический . насколько я смутно понмаю нужно памяти больше чем любому приложению + аллокатор памяти свой.
както этот вопрос обсуждался сдесь на форуме - тема С++ была, разобрались, пришли к какомуто продуктивному выводу (в том числе и по сборке gcc), помню что пришлоть мучится с тем чтоб конструкторы заработали и еще чето там,
после этого всем стало хорошо и я уже забыл суть

помойму на эксепшены былы уложены под большой каток
нада поиском порытся.
Цитата(klen @ Feb 4 2010, 13:31)

можно собрать без обработки С++ эксепшенов.
Эксепшены - это не обязательно C++. Вон, у
Genadi Zawidowski - чисто Си, и на тебе, эксепшены. Причём я так и не понял, откуда они прицепились. Судя по map, из какого-то банального __aeabi_uldivmod.
Кстати, arm-kgp-elf- от сентября прошлого года даёт на его проекте 31К вместо 47 нынешних. Сдаётся мне, что что-то всё же не так собралось

Цитата
както этот вопрос обсуждался сдесь на форуме - тема С++ была, разобрались, пришли к какомуто продуктивному выводу (в том числе и по сборке gcc), помню что пришлоть мучится с тем чтоб конструкторы заработали и еще чето там,
после этого всем стало хорошо и я уже забыл суть

помойму на эксепшены былы уложены под большой каток
Ну так это как раз у меня конструкторы и не работали

Потом заработали, да. А с эксепшенами тогда ничего не решили,
Terminator предложил заглушки, и на этом всё благополучно затихло.
Вот, кстати цитата оттуда:
Цитата(klen @ Sep 3 2009, 12:15)

я всетаки соберу две версии libctdc++ одну нормально а вторую с no-exception, no-rtti. а там сравним че получится.
Цитата(AHTOXA @ Feb 4 2010, 12:21)

Эксепшены - это не обязательно C++. Вон, у
Genadi Zawidowski - чисто Си, и на тебе, эксепшены. Причём я так и не понял, откуда они прицепились. Судя по map, из какого-то банального __aeabi_uldivmod.
Кстати, arm-kgp-elf- от сентября прошлого года даёт на его проекте 31К вместо 47 нынешних. Сдаётся мне, что что-то всё же не так собралось

Ну так это как раз у меня конструкторы и не работали

Потом заработали, да. А с эксепшенами тогда ничего не решили,
Terminator предложил заглушки, и на этом всё благополучно затихло.
Вот, кстати цитата оттуда:

ну теперь отглохнет, и точно пересоберем и посмотрим че выйдет.
demiurg_spb
Feb 5 2010, 12:18
Цитата(klen @ Dec 3 2009, 17:38)

свежак для avr
www.klen.org/Files/DevTools/kgp_avr_20091202_i686-pc-mingw32.7z
Что-то у меня не выходит каменный цветок.
avr-gcc.exe - Не удалось найти компонент "Приложению не удалось запуститься, поскольку libiconv-2.dll не был найден"
Я нашёл эту либу в Инете, но получил "Точка входа в процедуру libiconv не найдена в библиотеке DLL libiconv-2.dll"
Вас не затруднит написать пару строк по инсталляции Ваших сборок на "чистый" компьютер. Спасибо!
Цитата(demiurg_spb @ Feb 5 2010, 15:18)

Что-то у меня не выходит каменный цветок.
avr-gcc.exe - Не удалось найти компонент "Приложению не удалось запуститься, поскольку libiconv-2.dll не был найден"
Я нашёл эту либу в Инете, но получил "Точка входа в процедуру libiconv не найдена в библиотеке DLL libiconv-2.dll"
Вас не затруднит написать пару строк по инсталляции Ваших сборок на "чистый" компьютер. Спасибо!
эффект такойже как и со сборкой для армов - забыл додожить библу. устанавливать ничего не нада - просто копируем в удобное место и прописываем путь в bin. если сразу не заработало то это скорее всего мой косяг.
ibiconv-2.dll и вообще все дллки нужны моей сборки - я их собираю из свежих исходников, поэтому интерфейс функций может менятся, на что вы собственно и напоролись
вот либы, в следущей сборке все должно быть уже без этого гемора.
demiurg_spb
Feb 6 2010, 13:04
Спасибо! Заработало.
Код
-mmcu=atmega1281 -I. -gdwarf-2 -DF_CPU=14745600UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types -ffunction-sections -fdata-sections -fno-tree-scev-cprop -fno-move-loop-invariants -std=c99
Код
gcc-4.3.2(WinAVR) 65362 bytes 30 sec
gcc-4.3.3(WinAVR) 65066 bytes 35 sec
gcc-4.5.0(Klen) 64552 bytes 58 sec
А что так медленно?
Цитата(demiurg_spb @ Feb 6 2010, 16:04)

Спасибо! Заработало.
Код
-mmcu=atmega1281 -I. -gdwarf-2 -DF_CPU=14745600UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types -ffunction-sections -fdata-sections -fno-tree-scev-cprop -fno-move-loop-invariants -std=c99
Код
gcc-4.3.2(WinAVR) 65362 bytes 30 sec
gcc-4.3.3(WinAVR) 65066 bytes 35 sec
gcc-4.5.0(Klen) 64552 bytes 58 sec
А что так медленно?
а хрен его знает.
видимо оптимизатор хрустит извилинами, он же от версии к версии все навороченнее и навороченнее. попробуте -O2. если время не изменится то есть еще педальки при сборке попробывать это подтюнить.
Но сгенеренный код то хоть устраивает или я зря каллории трачу?
В соседней теме накат на открытый софт пошел такой что.... даже не знаю, отобъемся или в асфаль закатают
demiurg_spb
Feb 6 2010, 21:18
Цитата(klen @ Feb 6 2010, 22:15)

Но сгенеренный код то хоть устраивает или я зря каллории трачу?
На первый взгляд вполне!
Цитата
В соседней теме накат на открытый софт пошел такой что.... даже не знаю, отобъемся или в асфаль закатают

Всё бы Вам накатить!:-)

НГ праздники прошли, а 8 марта и 23 февраля еще не наступили:-)
Путь они пообсасывают эту тему - мне ничего не мешает пользоваться Gnu'тым ПО и получать, как минимум, моральное удовлетворение.
кому интересен сам процесс.
теперь будет прощще - в результате длительного тупления и лени, которая наконецто пересилила "трудолюбие", написал таки скрипты котрые в результате одной команды с консоли
делают update всех исходников тулсов, либ, ...
собирают по цепочке тулсы под linux-x64 для таргетов linux-x64 i686-pc-mingw32 avr arm mips
они собирают ихже но для хоста i686-pc-mingw32
пакуется в дистрибутивы. на этом заканчивается сборка KGP СВЕЖАКА. а я это время лежал на диване например.
итак. дошли руки до авыэрок.
все свежее сегодняшнее(исходники)
для того что собрать avr-libc из репозитория пришлось добавить поддержку девайсов binutils gcc:
attiny2313a
attiny24a
attiny25
attiny44a
attiny4312
attiny261a
attiny461a
attiny861a
attmega644pa
attmega48pa
attmega48a
attmega88a
attmega88pa
attmega16a
attmega164a
attmega165a
attmega168a
attmega169a
attmega169pa
attmega16hva2
attmega324a
attmega324pa
attmega238
attmega329pa
attmega644a
attmega645a
attmega645p
attmega64hve
attmega6450
attmega6490a
attmega5490p
attmega649a
attmega649p
архив www.klen.org/Files/DevTools/kgp_avr_20100208_i686-pc-mingw32.7z
просьба "модно одетых прарней" котрые имеет микросхемы их приведенного выше списка протестить и сообщить результаты.
если оно все нормально будет компилировать, добавлю измеения исходников в GCC trunk.
demiurg_spb
Feb 8 2010, 20:54
Цитата(klen @ Feb 8 2010, 19:04)

архив www.klen.org/Files/DevTools/kgp_avr_20100208_i686-pc-mingw32.7z
Спасибо!
Вы видимо собрали с новой версией msys-1.0.dll? Некоторые тулзы из WinAVR/utils/bin (например gawk) стали вываливаться с матами на стек.
Наверное надо свежий комплект утилей от msys качнуть.
2_demiurg_spb
msys-1.0.dll для компиллера не нужна. ее требуют sh make rm котрые я не собираю (но могу

) я их добавляю чтоб можно было без установки msys+mingw получить минимальный набор средств конандной строки для работы
если не хотите менть утилиты MSYSa на новые, грохните в моем дистрибутиве msys-1.0.dll sh.exe make.exe rm.exe и используйте установленне ранее. компиллеру эта хрень не нужна.
свежак для ARM
www.klen.org/Files/DevTools/kgp_arm_eabi_20100226.7z
Genadi Zawidowski
Feb 27 2010, 04:46
Цитата(klen @ Feb 27 2010, 00:44)

свежак для ARM
www.klen.org/Files/DevTools/kgp_arm_eabi_20100226.7z
Как и в предидущем случае, затаскивается весь stdio. Даже не сравнить.
Код
.text 0x001066f0 0x1b0 c:/kgp_arm_eabi_20100226/bin/../lib/gcc/arm-kgp-eabi/4.5.0\libgcc.a(libunwind.o)
0x001066f0 __restore_core_regs
0x001066f0 restore_core_regs
0x0010670c __gnu_Unwind_Restore_VFP
0x00106714 __gnu_Unwind_Save_VFP
0x0010671c __gnu_Unwind_Restore_VFP_D
0x00106724 __gnu_Unwind_Save_VFP_D
0x0010672c __gnu_Unwind_Restore_VFP_D_16_to_31
0x00106734 __gnu_Unwind_Save_VFP_D_16_to_31
0x0010673c __gnu_Unwind_Restore_WMMXD
0x00106780 __gnu_Unwind_Save_WMMXD
0x001067c4 __gnu_Unwind_Restore_WMMXC
0x001067d8 __gnu_Unwind_Save_WMMXC
После этого уже всё остальное.
это че? проблема то в чем?
Вы С++ код компиляете? в таком случае добавте -fno-rtti -fno-exceptions мусор должен кончится
Genadi Zawidowski
Feb 27 2010, 08:58
Цитата(klen @ Feb 27 2010, 10:05)

это че? проблема то в чем?
Вы С++ код компиляете? в таком случае добавте -fno-rtti -fno-exceptions мусор должен кончится
Нет, обычный C код. Проект выкладывал в этой теме. А проблема в лишних 20 килобайтах которые явно не могут работать - всё на голом железе без имитации или заглушек на io.
Вы собирались библиотеку перекомпилить для того, чтобы unwinding не использовался. В этой версии ещё нет?
Проект выложен здесь:
http://electronix.ru/forum/index.php?showt...st&p=712754
это чтото непонятное.
1. собираю проект С, никаких хвостов из libunwind в бинарнике нет. только содержательный код.
2. собираю проект С++, вижу содержательный код + код поддержки rtti exceptions.
3. собираю проект С++ -fno-rtti -fno-exceptions , вижу опять же содержательный код, выкинулось 35 килобайт кода.
компиллер и библиотеки у нас одинаковые, давайте искать различия.
ну по моему разумению ну никак из libunwind.o чтото попасть с бинарник C-проекта не должно.
и еще! а как это у вас собралось? раз уж libunwind запихнулась в проект то откуда линкер умудрился найти символы _exidx_start __exidx_end которые нужны в модуле unwind-arm.c?
может проблема проистекает из crt кода
Genadi Zawidowski
Feb 27 2010, 09:59
Цитата
1. собираю проект С, никаких хвостов из libunwind в бинарнике нет. только содержательный код.
Если библиотека собрана с поддержкой исключений - и вызывается такая функция (в моём случае, например, div или ldiv) - как с этим быть?
Символы я определил (ондин из коллег здесь в теме выложил исправленный) в линк-скрипте. Можете выкинуть - тогда вообще не соберётся.
Проекьт здесь в теме выложен - можете его "препарировать"? Я думаю, не только мне интересно. Или проблема только у меня?
Цитата(Genadi Zawidowski @ Feb 27 2010, 12:59)

Если библиотека собрана с поддержкой исключений - и вызывается такая функция (в моём случае, например, div или ldiv) - как с этим быть?
Символы я определил (ондин из коллег здесь в теме выложил исправленный) в линк-скрипте. Можете выкинуть - тогда вообще не соберётся.
Проекьт здесь в теме выложен - можете его "препарировать"? Я думаю, не только мне интересно. Или проблема только у меня?
с помощью грязных рук и такойто матери собрал Ваш проект. незнаю будет ли он работать, но то что выплюнул линкер имеет
text 38172
data 0
bss 2496
objdump -t говорит что в бинаре нет символов похожих на unwind
долго мучалчя пока собралось - правил makefile, ld скрипт, добавил один файл с затычками системных вызовов ( _kill _exit)
у Вас какой размер выдает?
libgcc в которой операции с численными типами и NEWLIB libc - это С библиотеки и собрать их с исключениями нельзя потому что их в С языке неиметсо!
вкладываю бинарник который получилсо
Genadi Zawidowski
Feb 27 2010, 11:50
Цитата(klen @ Feb 27 2010, 14:31)

с помощью грязных рук и такойто матери собрал Ваш проект. незнаю будет ли он работать, но то что выплюнул линкер имеет
text 38172
data 0
bss 2496
objdump -t говорит что в бинаре нет символов похожих на unwind
долго мучалчя пока собралось - правил makefile, ld скрипт, добавил один файл с затычками системных вызовов ( _kill _exit)
у Вас какой размер выдает?
libgcc в которой операции с численными типами и NEWLIB libc - это С библиотеки и собрать их с исключениями нельзя потому что их в С языке неиметсо!
вкладываю бинарник который получилсо
До модификаций с комплектом Вашей сборки было около 50 килобайт, с yagarto 31 килобайт. Попробую добавить затычки на упомянутые функции - соберу и проверю, вечером.
text 38172 - похожее значение было и с yagarto.
Прошить прямо ваш elf не могу, так как плата существует в нескольких слегка отличающихся конфигурайиях.
архив всего проекта который можете скомпилять и все проверить.
добавлять затычки Вам не нада они уже есть в libc
видимо дело всетаки в скрипте линкера, его я наиболе изменил по сравнеию с другим
деление всетаки нада проверить! зашейте проверьте и сообщите результат
результат в 38 kb устраивает?
нашел концы этого природного явления!
все дело в использовании деления значений целочисленного типа uint64_t или его производных.
факт на рыло, как это понимать я пока незнаю
если в С программе использовать встроенный целый тип 64 бита и есть деление то Unwind прилазит в код!
ну че? берем фонарь и спускаемся в подвал libgcc
__gnu_uldivmod_helper
__udivdi3
вот эти две вытягивают раскрутку стека.нашел концы этого природного явления!
все дело в использовании деления значений целочисленного типа uint64_t или его производных.
факт на рыло, как это понимать я пока незнаю
если в С программе использовать встроенный целый тип 64 бита и есть деление то Unwind прилазит в код!
ну че? берем фонарь и спускаемся в подвал libgcc
__gnu_uldivmod_helper
__udivdi3
вот эти две вытягивают раскрутку стека.
ФИСЕ. нашел где это пофиксить, но пока токо руками получаетсо собрать libgcc. В следующей сборке эта проблема будет решена
Konkere
Apr 14 2010, 03:38
to klen: А будет ли свежак для mips или уже не поддерживается данное направление?
Цитата(Konkere @ Apr 14 2010, 07:53)

to klen: А будет ли свежак для mips или уже не поддерживается данное направление?
будет.
а если еще ктонить на прокат даст платку с мипсом то наверно я еще и ошибки смогу выгребать (наверно

), я по этому поводу думаю гденибудь поднарезать отладочку на pic32 - на нем тренироватся. ктонить pic32 уже юзает?
kimstik
Apr 15 2010, 07:47
хех
надо свиснуть представителям микрочипа
они сами должны ради такого дела персонально домой к тебе приехать и вручить кит pic32!!
по крайней мере это в их интересах
_Pasha
Apr 15 2010, 16:45
Цитата(kimstik @ Apr 15 2010, 11:02)

по крайней мере это в их интересах

Некрочип, продающий гццшный С30 за бабло, кроме недоуменного пожатия плечами, более никаких эмоций не вызыват.
kimstik
Apr 16 2010, 07:23
Цитата(_Pasha @ Apr 15 2010, 20:00)

Некрочип, продающий гццшный С30 за бабло, кроме недоуменного пожатия плечами, более никаких эмоций не вызыват.
Ну и пусть себе продают. Значи есть те, кто покупает. Им отчитываться надо и саппорт...
А те кто с руками и у кого есть немного(или много) времени компилят сами.
klen: респект тебе. У тебя одна из самых толковых сборок. У меня нервов не хватает самому так собрать
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.