LINUX.ORG.RU

Ответ на: комментарий от dmitry-vm

я имел ввиду что-нить типа "-msoft-float", etc. Из «ARM options» мануала gcc...

metawishmaster ★★★★★
()

Поищи по базгилле uclibc похожие проблемы, почитай чейнжлоги на последующие версии.

fpu нет, есть эмулятор в ядре.

Там кажется один медленный стабильный, а второй со статусом experemental, может у тебя второй? Можно ещё попробовать эмулировать плавучку на уровне gcc, а не ядра.

gogi
()
Ответ на: комментарий от gogi

пробовал -msoft-float и -mhard-float - ничего
Еще раз говорю - считаются float и double нормально.
Отображаются через ж. Дело в printf (и sprintf)

dmitry-vm
() автор топика
Ответ на: комментарий от dmitry-vm

>Отображаются через ж. Дело в printf (и sprintf)

Потому что руки у тебя оттуда растут :)

[code]
# ./a.out
0.010000 1.200000 -2.500000
0.01 1.2 -2.5
[/code]

Target: arm-unknown-linux-uclibcgnueabi
gcc version 4.3.5 (Buildroot 2010.11)

anonymous
()
Ответ на: комментарий от anonymous

Если у тебя растут оттуда, то обьясни в чем дело. У меня все те версии. Никакких дополнительных настроек не делал.

dmitry-vm
() автор топика

Проверь ABI библиотек и твоего приложения.

Проверь корректность установленных локалей.

Попробуй добавить вызов setlocale() в начало программы и посмотреть на вывод printf() с разными локалями.

anonymous
()
Ответ на: комментарий от anonymous

>Проверь ABI библиотек и твоего приложения.

Если abi не совпадает то приложение вообще не запустится (естественно кроме случая когда все собрано статически и ядро поддерживает abi - хинт см oabi compat)

Проверь корректность установленных локалей.


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

anonymous
()
Ответ на: комментарий от Deleted

Похоже дело действительно в локалях. Я поставил в конфиге buildroot опцию «Purge unwanted locales», чтобы сэкономить место. Оставил только en_US и С. В результате исчезла точка в отображении float. Когда убрал эту опцию, вместо точки отображается квадратик, означающий отсутствие нужного знака. Еще до конца не разобрался, не хватает каких-то файлов локалей. Напишу, когда узнаю

dmitry-vm
() автор топика
Ответ на: комментарий от dmitry-vm

> fpu нет, есть эмулятор в ядре. все считается правильно. Gdb показывает верные числа. А printf врет

Немного оффтопа: Эмулятор плавающей точки в ядре - это достаточно медленный вариант. Для каждой операции с плавающей точкой происходит выброс исключения (процессор не знает таких инструкций), после чего управление получает ядро, корректно отрабатывает операцию и возвращает результат в программу. Лучше все же использовать (скачать/собрать) toolchain с soft-float.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Спасибо за информацию. Проверю на быстродействие оба варианта

dmitry-vm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.