Jump to content

    
Sign in to follow this  
QuadMan

LEON3 компиляция NO FPU

Recommended Posts

Подскажите, кто знает. Пытаюсь запустить LEON3, бесплатную версию, которая без поддержки FPU.

Как при компиляции простейшей программы в Eclipse указать, чтобы она собралась без поддержки FPU.

Флаги -msoft-float для компилятора и линкера выставил.

Подозреваю, что проблем в стандартной библиотеке, которая по-умолчанию с FPU... но как получить библитеку без FPU? 

Share this post


Link to post
Share on other sites

если gcc + newlib от Гейслера, то они собраны для разных вариантов soft-float, flat, v8 и т.д. можно посмотреть там где установлен компилер в lib

то есть должно выбирать нужные crt файлы и либу в зависимости от ключей (-msoft-float). когда я собирал (давно еще без llvm), то по умолчанию было soft-float

почему думаете, что hard-float используется? попробуйте простую (без printf) программу

 

Share this post


Link to post
Share on other sites

Программа самая простая:

int main(void) {
	volatile char i = 0;
	while (1) {
		i++;
	}

	return 0;
}

Опции компилятора: -c -fmessage-length=0 -qbsp=leon3 -qnano -msoft-float
Опции линковщика: -qbsp=leon3 -qnano -msoft-float

Подключаю библиотеки gcc, bcc из директории \lib\gcc\sparc-gaisler-elf\7.2.0\leon3\soft.

Из других тоже пробовал, где soft прописано. Ничего не получается.

Может нужно какие-то из флагов -nostartfiles, -nodefaultlibs, -nostdlib использовать?

При попытке запуска отладки такой программы GRMON пишет ERROR! FPU not found

Share this post


Link to post
Share on other sites

посмотрите objdump-ом, где fpu используется. тут вообще, без всяких флагов должно быть без FPU

скорее всего в старт файлах crt*.o (не тот файл берет gcc)

у Гейслера должны быть примеры простого crt* - скорее всего в тестах железа (да и в исходниках libc/gcc они наверняка есть - ассемблер *.S) - слинкуйте с  -nostartfiles  -nostdlib с понятным crt*)

без инициализации (crt) C код не будет работать, но попробуйте добиться понятного вывода objdump-а, что там нет лишнего/непонятного

еще раз обращу внимания - посмотрите на тесты железа в grlib - там все было (с makefile и правильными ключами)

 

upd: а пускаете без симуляции, сразу в железке? по-моему, не лучший подход.

посмотрите ключи GRMON-a - может что-то типа -ni или про FPU. сейчас у него GRMON2|3 я еще GRMON просто использовал

 

Share this post


Link to post
Share on other sites

В итоге немного разобрался.

Программа, действительно, компилируется корректно и без FPU. Никаких дополнительных библиотек не требует.

Через grmon удалось загрузить elf-файл и запустить его - все работает.

Ошибка возникает только при попытке начать отладку через eclipse.

Отлаживаемся через UART пока.

Не подскажете, в чем здесь может быть проблема? И вообще, через что проще программу отлаживать?

Share this post


Link to post
Share on other sites

grmon весьма удобный тул.

что делает эклипс - не знаю, разбирайтесь. по-моему он должен запустить тот же самый grmon в режиме gdb сервера и работать с ним. может какой-нибудь антивирус гадит на межпроцесное взаимодействие? у меня вчера пол дня ушло на понимание, что avast убивает отладку в латисовском ревиале

у Гейслера также был grmon с gui - попробуйте его запустить

-------------------

по поводу хардварных отладочных интерфейсов - какой используете jtag, uart? проверьте, что эклипс правильные ключи использует / выбирает интерфейс правильно

мне удавалось запускать отладку и из эклипса, но как-то всегда это вызывало некоторые трудности и особого преимущества перед grmon-ом из командной строки не видел

 

 

Share this post


Link to post
Share on other sites

Продолжаю разбираться... может поможете.

Итак, запускаю GRMON с опцией GDB, все нормально - Started GDB service on port 2222.

Далее запускаю вручную sparc-gaisler-elf-gdb:
выдаю команды:
1. file t4.elf - загружаю программу

2. dir C:/opt/bcc-2.1.1/src/libbcc/shared/trap - добавляю правильной путь для поиска файла trap_table_mvt.S (иначе он его ищет по /opt/bcc-2.1.1-gcc/src/libbcc/shared/trap/trap_table_mvt.S: No such file or directory - и естественно не находит)

3. target extended-remote localhost:2222 - при выдаче этой команды на подключение к GRMON - в окне GRMON выдается сообщение ERROR! FPU not found.

C:\opt\bcc-2.1.1\bin>sparc-gaisler-elf-gdb
GNU gdb (GDB) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-w64-mingw32 --target=sparc-gaisler-elf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) file t4.elf
Reading symbols from t4.elf...done.
(gdb) dir C:/opt/bcc-2.1.1/src/libbcc/shared/trap
Source directories searched: C:/opt/bcc-2.1.1/src/libbcc/shared/trap;$cdir;$cwd
(gdb) target extended-remote localhost:2222
Remote debugging using localhost:2222
__bcc_entry_point () at /opt/bcc-2.1.1-gcc/src/libbcc/shared/trap/trap_table_mvt.S:82
82              RESET_TRAP(__bcc_trap_reset_mvt);       ! 00 reset
(gdb)
  GRMON debug monitor v3.2.2 64-bit eval version

  Copyright (C) 2020 Cobham Gaisler - All rights reserved.
  For latest updates, go to http://www.gaisler.com/
  Comments or bug-reports to support@gaisler.com

  This eval version will expire on 28/09/2020

Started GDB service on port 2222.
  GRLIB build version: 4251
  Detected frequency:  24.0 MHz

  Component                            Vendor
  LEON3 SPARC V8 Processor             Cobham Gaisler
  AHB Debug UART                       Cobham Gaisler
  JTAG Debug Link                      Cobham Gaisler
  AHB/APB Bridge                       Cobham Gaisler
  LEON3 Debug Support Unit             Cobham Gaisler
  LEON2 Memory Controller              European Space Agency
  Single-port AHB SRAM module          Cobham Gaisler
  Generic UART                         Cobham Gaisler
  Multi-processor Interrupt Ctrl.      Cobham Gaisler
  Modular Timer Unit                   Cobham Gaisler
  General Purpose I/O port             Cobham Gaisler

  Use command 'info sys' to print a detailed report of attached cores

ERROR! FPU not found

Вот из-за чего в момент выдачи команды target ... может вылетать такая ошибка в GRMON?

Share this post


Link to post
Share on other sites

мне удобнее было grmon с его родным интерфейсом, без gdb запускать - больше возможностей

вот попробуйте в родном интерфейсе info sys сказать (как выше написано). может сконфигурено неправильно - то есть подписано в pnp пзу-шке, что есть FPU (не должно собраться, но вдруг)

если уж такие проблемы с FPU - сделайте с FPU - для Альтеры/Ксайлинса Гейслер дает нетлист, когда разберетесь, уберете.

но у меня никаких проблем с NO FPU конфигурацией не возникало

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this