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

Я могу выслать вам .lss своего загрузчика собранного разными версиями.

 

LTO не использую. Ниодна версия "свежака" с включенным lto, мои проекты собрать не может.

Включение LTO на "рабочей" версии заканчивается примерно так же, падает с внутренней ошибкой.

 

кто падает? компиллер при линковке проекта?

как включаете и выключаете LTO?

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


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

кто падает? компиллер при линковке проекта?

ага

как включаете и выключаете LTO?

Как было написано в этой ветке выше.

 

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


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

Попробовал arm-kgp-eabi-mingw64-20130224-PROCYON.7z

 

Не собирается(

compile.  main.o
d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os  -I . -I d:/gcc/lib/stm32/inc -gdwarf-2 -c main.c -o main.o

linker..
d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--gc-sections,-Map=test_fp_v1.ite2.elf.map,-cref,-u,Reset_Handler -I . -I d:/gcc/lib/stm32/inc -L . -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f -T STM32F407VG.ld  main.o --output test_fp_v1.ite2.elf

d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not
d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: failed to merge target specific data of file main.o

 

Не подскажите, что мы обычно делаем в таком случае?

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


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

Попробовал arm-kgp-eabi-mingw64-20130224-PROCYON.7z

 

Не собирается(

 

Не подскажите, что мы обычно делаем в таком случае?

 

давайте начнем с того что линеру не будем передавать опцию с путем до системных либ - это не нужно и вредно поскольку комбинация ключей позволяет ему самому решить где брать libc libm libgcc и тд.

 

удалите в опциях линкера -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f

 

косяг в том что происходит попытка слинковать объектники и либы собранные под разные fpu, осталось понять как у линкера возникло такое желание

 

еще гипотеза - если я при сборке архива накасячил то возможно папка -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f пуста и в током случае линкер вынужден брать либы из корня d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib а там либы собранные бе поддержки фпу.

 

в понедельник решим эту беду. подождите сутки.

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


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

давайте начнем с того что линеру не будем передавать опцию с путем до системных либ - это не нужно и вредно поскольку комбинация ключей позволяет ему самому решить где брать libc libm libgcc и тд.

 

удалите в опциях линкера -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f

 

косяг в том что происходит попытка слинковать объектники и либы собранные под разные fpu, осталось понять как у линкера возникло такое желание

 

еще гипотеза - если я при сборке архива накасячил то возможно папка -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f пуста и в током случае линкер вынужден брать либы из корня d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib а там либы собранные бе поддержки фпу.

 

в понедельник решим эту беду. подождите сутки.

Пути убрал - ничего не поменялось.

Меня больше напрягает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not".

Это как понимать: "*.elf не использует"?

Видно, что до библиотек дело не доходит. Там бало бы что-то типа "failed to merge target specific data of file d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o)".

 

Вот еще пример, с одной из предыдущих версий умышленно линкуемых с либами для М3: "error: test_fp_v1.ite2.elf uses VFP register arguments, d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o) does not".

Теперь *.elf использует, а либа правильно не использует. У меня же наооборот)

 

Думаю, не хватает чего-то, что заставит линкер ипользовать fpu-шные регистры при сборке. Я могу ошибаться, но может линкер "нерабочий", а не библиотеки? Ради эксперимента подсунул новые либы старому компилятору - вроде скомпилировался проект и даже работает.

 

Со старым (рабочим) компилятором я получаю аналогичную ошибку, если указываю -mcpu=cortex-m3 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb. Странно, что компилируется все без ошибок, но линкер выдает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not". Причем, можно компилятору указать M3, а линкеру М4 - все собирется и будет работать.

 

До понедельника доживу. Я бы и не стал переходить на новую сборку, если бы не обнаружил, что в старых при записи, например, USART1->DR = x вместо операции "запись" происходит "чтение-запись". Причем, это самое чтение сбрасывает флаги в регистре статуса (у STM32).

DR объявлен как vu16, если заменить на vu8, то лишнего "чтения" не происходит. В новой версии поведение правильное, поэтому и решился.

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


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

До понедельника доживу. Я бы и не стал переходить на новую сборку, если бы не обнаружил, что в старых при записи, например, USART1->DR = x вместо операции "запись" происходит "чтение-запись". Причем, это самое чтение сбрасывает флаги в регистре статуса (у STM32).

DR объявлен как vu16, если заменить на vu8, то лишнего "чтения" не происходит. В новой версии поведение правильное, поэтому и решился.

 

жесть какая то

я не тестирую сборки для масдая - это адь. мож на линух перескочите, забудите про кучи гиммароев?

 

нешел масдай - проверил сборку.

пробывал на своем текущем проекте:

компиляция и линковка

arm-kgp-eabi-g++ -std=c++11 -D__CORTEX_M4F__ -D__STM32F405RGT6__ -D__STM32F4XX__ -DARM_MATH_CM4 -D__FPU_USED=1 -DSTM32F405xx -DSTM32F40_41xxx -D__VOLKOV_STM32F405_V2__ -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -mthumb -Os -fomit-frame-pointer -finline-functions -ffunction-sections -fdata-sections -fgraphite -funroll-loops -Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.dep -W -Wall -Wno-unused-parameter -ggdb3 -I.././../../SDK_embedded/libs/common -fno-exceptions -fno-rtti -I./ -I.././include -I.././../../SDK_embedded/libs/st/stm32/f4xx/StdPeriph_Driver -I.././../../SDK_embedded/libs/st/stm32/f4xx/crt -I.././../../SDK_embedded/libs/st/stm32/f4xx/../CMSIS -I.././../../SDK_embedded/libs/st/stm32/f4xx/CMSIS -I.././../../SDK_embedded/libs/tlsf-2.4.6 -I.././../../SDK_embedded/libs/readline -I.././../../SDK_embedded/libs/utils -I.././../../SDK_embedded/libs/console -I.././../../SDK_embedded/libs/FreeRTOS/Source/include -I.././../../SDK_embedded/libs/FreeRTOS/Source/portable/GCC/ARM_CM4F -I.././../../SDK_embedded/libs/mmgr -I.././../../SDK_embedded/libs/vmath -DUSE_STDPERIPH_DRIVER -D__USE_FREERTOS__ -DF_OCS=8000000 -DRAM_VEC_TABLE=0 -DUSE_USB_OTG_FS -DUSE_EMBEDDED_PHY -DUSE_OTG_MODE -DF_OSC=8000000 -DOSC_TYPE=1 -DTICK_RATE_HZ_DEFAULT=1000UL -DMAX_PRIORITIES=4UL -DMINIMAL_STACK_SIZE=64UL -DMAX_TASK_NAME_LEN=16UL -c -o main.o main.cc

 

 

arm-kgp-eabi-g++ -T .././../scripts/matrix3d_demo.ld -fuse-linker-plugin -nostartfiles -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -mthumb -Os -fomit-frame-pointer -finline-functions -ffunction-sections -fdata-sections -fgraphite -funroll-loops -ggdb3 -L.././../lib -Wl,-gc-sections -Wl,--start-group debug_led.o main.o -lmmgr -ltlsf -lfreertos_kernel -lfreertos_portable -lutils -lcrt -lcmsis -lhardware -lvmath -Wl,--end-group -o .././../out/image.elf -Wl,-Map,.././../out/image.map

 

собираеццо и не ругается. я покане понял в чем у Вас проблема.

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


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

adnega@NEWSRV:~/temp/test_nand$ ~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc --version
arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << PROCYON >>) 4.9.0 20140224 (experimental)
Copyright © 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

adnega@NEWSRV:~/temp/test_nand$ make all
compile  main.o
~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os  -I . -I ./inc -gdwarf-2 -c main.c -o main.o
main.c: In function ‘main’:
main.c:174:2: internal compiler error: Недопустимая инструкция
 volatile float     x = 3.14f;
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make: *** [main.o] Ошибка 1

Под

Distributor ID: Ubuntu

Description: Ubuntu 13.10

Release: 13.10

Codename: saucy

 

На той же системе с другой версией собирается.

root@NEWSRV:/home/adnega/temp/test_nand# /home/adnega/temp/arm-kgp-eabi-20130623/bin/arm-kgp-eabi-gcc --version

arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << Fedor Konyukhov / Antarctica Cup Race Track 2008 >> ) 4.9.0 20130622 (experimental)

Copyright © 2013 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

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


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

пересоберу еще... посмотрим что получттся

 

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


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

Попробовал в виртуалке (ubuntu 12.10) - с последней версий все собирается. На железном сервере (ubuntu 13.10) - уже писал, что нет (internal compiler error).

Могу дать удаленный доступ к "плохой" ubunte, но к сожалению, по личным причинам сейчас не до экспериментов (жена и дочка в больницу попали).

Сам второй-третий год собираюсь с windows "спрыгнуть". Уже все компы, включая нетбук и десктоп жены, перевел на linux - остался последний ноутбук-кормилец (нужен для работы). Нашел HDD для ноутбука - попробую временно на нем развернуть все необходимые инструменты.

 

Итого: если у меня одного проблемы, то беру таймаут на их разрешение + сделаю тестовый проект.

Если, klen, есть желание и возможность поразбираться с internal compiler error, то могу дать учетку для удаленного подключения (ssh).

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


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

давайте аккаунт, хоца посмотреть в чем косяг.. по идее падать не должно статически собираю....

 

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


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

давайте аккаунт, хоца посмотреть в чем косяг.. по идее падать не должно статически собираю....

Отправил в личку

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


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

Про lto.

Проект на sam7. Чтобы всё впихнуть компилирую всё, что можно в thumb. С включением lto вылазит ошибка:

.../cpu/Devices/adcISR.cpp: In function 'adcirq':
.../cpu/Devices/adcISR.cpp:73:2: error: interrupt Service Routines cannot be coded in Thumb mode

 

Что-нибудь сделать можно?

 

P. S. это не на последнем "свежаке", но такой сообщение было и на какой-то версии "свежака", просто забыл написать.

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


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

У sam7 обработчики прерываний только в ARM режиме.

а без смешивания thumb и arm может даже немного компактнее получиться, если от interoperability отказаться в ключах.

а LTO здорово помогало... Не забываете линкеру ключи передать? Может, тогда и влезет?

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

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


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

Выключил thumb. Пришлось пропатчить макросы freertos (возникла ошибка Error: invalid literal constant: pool needs to be closer, патч на сайте).

Результат получился интересный:

.../arm-none-eabi/bin/ld: cpu.elf section `.text' will not fit in region `MAINPROG'
.../arm-none-eabi/bin/ld: region `MAINPROG' overflowed by 427461 bytes

 

:wacko:

 

Для смеха поправил скрипт линкера, компилилось нормально, только размер в 4-ре раза больше чем без lto. Проверить на работоспособность не могу, в контроллере всего 256к флеша :biggrin:

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

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


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

-Os -flto должны идти и линкеру. Я говорил не про убирание -flto, а про убирание -mthumb-interwork

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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