repstosw 18 9 октября, 2023 Опубликовано 9 октября, 2023 (изменено) · Жалоба У японца в его тулчейне тоже нет libnosys : https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/releases/tag/Toolchains Конфиг использовал такой: CT_CONFIG_VERSION="3" CT_ARCH_XTENSA=y CT_XTENSA_CUSTOM=y CT_OVERLAY_NAME="hifi4" CT_OVERLAY_LOCATION="/home/tux" CT_TARGET_VENDOR="hifi4" CT_NEWLIB_SRC_DEVEL=y CT_NEWLIB_DEVEL_URL="https://github.com/espressif/newlib-esp32/" CT_GCC_V_10=y CT_CC_LANG_CXX=y CT_LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS=y CT_CANADIAN=y CT_TOOLCHAIN_TYPE="canadian" CT_BUILD="" CT_HOST="x86_64-w64-mingw32" Опции для newlib использовал такие: ./configure \ --with-newlib \ --enable-newlib-reent-small \ --enable-newlib-nano-formatted-io \ --enable-target-optspace \ --disable-newlib-supplied-syscalls \ --disable-newlib-io-pos-args \ --disable-newlib-io-c99-formats \ --disable-newlib-io-long-long \ --disable-newlib-io-long-double \ --disable-newlib-io-float \ --disable-multilib \ --disable-newlib-multithread \ --disable-newlib-reent-check-verify \ --disable-newlib-mb \ --disable-newlib-register-fini \ --disable-newlib-wide-orient \ --disable-newlib-fvwrite-in-streamio \ --disable-newlib-fseek-optimization \ --disable-newlib-unbuf-stream-opt \ --disable-newlib-atexit-dynamic-alloc \ --disable-option-checking \ --program-transform-name="s&^&xtensa-hifi4-elf-&" \ --with-target-subdir=xtensa-hifi4-elf \ --target=xtensa-hifi4-elf 8 minutes ago, sasamy said: нет, там как раз 13 есть. Конфиг я китайский больше не использую - беру их, у них опции с понимаем включены и исходники из форков для xtensa, но оверлей указываю от т113. Попробую собрать для венды и написать пошагово. С ABI call0 ? 12 minutes ago, sasamy said: я то смотрел, вы удивляйтесь libc_nano.a тоже нет Изменено 9 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 9 октября, 2023 Опубликовано 9 октября, 2023 · Жалоба On 10/9/2023 at 1:21 PM, repstosw said: С ABI call0 ? ABI на сборку не влияет - вы там свой оверлей просто укажете и всё. В espressif ctng с их конфигом собирается два варианта newlib - nano и обычный, у них разные опции для printf, так что потом достаточно указать нужный вариант через spec и не ломать голову где взять отладочный printf для double Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 9 октября, 2023 Опубликовано 9 октября, 2023 (изменено) · Жалоба Решил написать как самому собрать кросскомпилятор для xtensa применительно к t113. Система на которой все собралось Quote $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS" Не смогу сейчас сказать какие пакеты доустанавливал в системе для сборки но помоему bootstrap сам скажет что ему не хватает, только это будет медленно потому что он завершает работу сразу как обнаруживает что не хватает, пакетов будет несколько и надо снова запускать bootstrap после доустановки очередного пакета. Склонировать и перейти в директории с исходниками Quote git clone https://github.com/espressif/crosstool-NG.git cd ./crosstool-NG Настройка для сборки без установки ct-ng в систему, собираться будет в текущей директоии Quote ./bootstrap ./configure --enable-local make Дефолтный конфиг универсальный для разных систем, в нем gcc 13 и вообще последние версии всех компонентов поэтому взял его, потом сконфигурирую под конкретный процессор Quote ./ct-ng xtensa-esp-elf Запуск конфигуратора для установки нужных параметров сборки Quote ./ct-ng menuconfig По умолчанию архивы будут скачиваться в директорию /home/user/src Основные параметры котрые нужно поменять Quote Target options ---> тут указать что собираться будет для определенного процессора и указать его оверлей Quote Target Architecture Variant (Custom Xtensa processor configuration) ---> (hifi4) Custom processor configuration name (${CT_TOP_DIR}/overlays) Full path to custom configuration (overlay) Опция статической сборки тулзов полезна при сборке для Linux хоста, готовый кросскомпилятор можно просто копировать на разные дистрибутивы Quote Toolchain options ---> [*] Build Static Toolchain Quote *** Tuple completion and aliasing *** тут указать вендора - на усмотрение, ни на что не влияет кроме того чтобы не путать с другими компиляторами в системе Quote (t113) Tuple's vendor string Для венды канадский вариант компилятора - это когда собирается на линукс, работать будет на венде а код генерировать для xtensa (build != host != target) Quote Type (Canadian) ---> для линуксового хоста оставить Type Cross и ничего больше не указывать Для вендового 64-битного хоста с канадской сборкой Quote *** Host system *** (x86_64-w64-mingw32) | Tuple (READ HELP!) Для 32 битной венды i686-w64-mingw32 Выйти с сохранением конфига, скопировать xtensa_hifi4.tar.gz в ./overlays и собрать Quote ./ct-ng build Сконвертированный оверлей с штатным оконным ABI (xtensa_hifi4.tar.gz) в приложении, несконвертированный тут https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/releases/download/Toolchains/xtensa-config-overlay.tar.gz Как сконвертировать оверлей пригодный для crosstool-ng из сгенерированного https://wiki.linux-xtensa.org/index.php?title=Toolchain_Overlay_File xtensa_hifi4.tar.gz Собранный для 64 битной венды с оконным ABI https://drive.google.com/file/d/1em156tFzxri9SyCLpqV2ko7ER-yTjOou/view?usp=sharing Конфиг с которым собрано для тех кому много букв win64.config Исходники от сборки https://drive.google.com/file/d/1Rat3Jsbi_Y7f4056RrlECOxtH6xPwZMR/view?usp=sharing Коммит на момент сборки https://github.com/espressif/crosstool-NG/commit/38c107b62ded8609f78603ec41a70cc42c2ece25 Изменено 9 октября, 2023 пользователем sasamy 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 9 октября, 2023 Опубликовано 9 октября, 2023 · Жалоба 3 hours ago, sasamy said: Решил написать как самому собрать кросскомпилятор для xtensa применительно к t113. В принципе я всё так и делал, за исключением того, что брал конфиг японца, а не штатный ESP32. Удалось построить тулчейн для Линукса. Но с виндой проблемы - не линкуется ZLIB для Host. И штатный путь для ZLIB - обламывается. Сделал так: Source of ZLIB: Vendor/Custom repository VCS: Git https://github.com/madler/zlib.git ZlibPatches: none Version of zlib: newer than anything below Для Build такое проходит, но для Host - облом. Куда копать дальше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 9 октября, 2023 Опубликовано 9 октября, 2023 (изменено) · Жалоба On 10/9/2023 at 6:17 PM, repstosw said: И штатный путь для ZLIB - обламывается. Сделал так: непонятно зачем, я скинул архив с исходниками - достаточно распаковать в свой /home/$USER/src On 10/9/2023 at 6:17 PM, repstosw said: Куда копать дальше? я бы лучше установил убунту 22.04 в виртуалке - на ней точно собирается, с повторяемостью сборок всегда проблемы бывают - самый быстрый путь тот который знаешь (собирать на том что проверено), у вас по картинке кажется 16 или 18. Пишут доустановить в системе для ctng надо Quote sudo apt install build-essential autoconf bison flex texinfo \ help2man gawk libtool libtool-bin libtool-doc libncurses5-dev python3-dev \ python3-distutils git unzip https://gist.github.com/ghawkgu/213c726fc087ec9f2306c9b023a3658a Quote Но с виндой проблемы - не линкуется ZLIB для Host. попробуйте ещё доустановить у себя mingw - вообще он не нужен, но у меня установлен на убунте, может поэтому не возникает проблема sudo apt install mingw-w64 Изменено 9 октября, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 9 октября, 2023 Опубликовано 9 октября, 2023 · Жалоба 1 hour ago, sasamy said: непонятно зачем, я скинул архив с исходниками - достаточно распаковать в свой /home/$USER/src Пост был написан вами 5 часов назад, а последние ссылки добавлены 4 часа назад. 1 hour ago, sasamy said: я бы лучше установил убунту 22.04 в виртуалке - на ней точно собирается, с повторяемостью сборок всегда проблемы бывают - самый быстрый путь тот который знаешь (собирать на том что проверено), у вас по картинке кажется 16 или 18. Пишут доустановить в системе для ctng надо У меня 15-я убунта. Начиная с 18-й ПК безбожно тормозит и убунта назойливо ставит видеорежим, не поддерживаемый моим монитором (максимум 1366x768 x 60). Дело не в убунте. А в том, что я указал кастомные пути к исходикам, не распаковав исходники. Нужно было распаковать каждый архив и указать ещё папку для каждого пакета. Остальное по вашей инструкции. Под линукс собралось. Сейчас потестирую сборку для винды. Действительно - появились libnosys, libc-nano и много чего ещё. Спасибо, ваша инструкция и исходники помогли и ускорили билды! Сейчас пробую поставить ABI call0 и для винды. 1 hour ago, sasamy said: попробуйте ещё доустановить у себя mingw - вообще он не нужен, но у меня установлен на убунте, может поэтому не возникает проблема Я его ещё установил, когда делал bootstrap для старого ct-ng . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 октября, 2023 Опубликовано 10 октября, 2023 (изменено) · Жалоба В общем собрал я тулчейн с этим ct-ng и конфигом для Win32 с ABI=call0. Для host=Win32 пришлось снять галочку "build local zlib", иначе не может слинковать zlib под host (под build билд проходит). В итоге программа валится в эксепшен, даже до первого printf() не доходит. Удалось заставить программу работать работать. С такими ключами линковки: %TOOLCHAIN%gcc -nostartfiles -nostdlib -nodefaultlibs -ffreestanding -Llibhal -T hifi4.lds ^ ^ -Wl,-Map=main.map,--cref -Wl,--defsym,cache=1 -Wl,--gc-sections -Wl,--static -Wl,--strip-all ^ ^ startup_s.o ^ ^ ... ^ main.o ^ ^ -lc_nano -lnosys -lhal -o main.elf Какой порядок следования при линковке с помощью GCC (не LD) ? Кроме того, как я и ранее говорил, использование libnosys.a или -spec=nosys.spec приводит к появлению назойливых предупреждений. Так что пилить и пилить. Никаких "испадкаробки" не получается. Треды, реентабельность, файловый ввод-вывод - выкосить в первую очередь. Ибо оно не нужно в Baremetal, а только создаёт проблемы. С указанием spec nosys и nano предупреждений меньше: Про предупреждения и способ их устранения здесь: https://electronix.ru/forum/index.php?/topic/157083-allwinner-t113-s3-уделал-hifi4-dsp-смеяться-или-плакать/&do=findComment&comment=1880341 P.S. Есть и хороший момент: GCC v.13, на тестах показал увеличение производительности на +6 % по сравнению с GCC v.10 Изменено 10 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 10 октября, 2023 Опубликовано 10 октября, 2023 (изменено) · Жалоба libc_nano порадовал. При указанном флаге -u_printf_float - печатает float. Всё как в arm-none-eabi ! А вот через specs не хочет нормально линковаться. Кучу ботвы вылазит: про eh-фреймы, про литералы. Я не люблю, когда кто-то лезет в распределение памяти всесте со мной... Изменено 10 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 10 октября, 2023 Опубликовано 10 октября, 2023 (изменено) · Жалоба On 10/9/2023 at 3:04 PM, sasamy said: Выйти с сохранением конфига, скопировать xtensa_hifi4.tar.gz в ./overlays и собрать Если нужен ABI call0 по умолчанию вместо штатного windowed теоретически элементарно перед сборкой Quote cd ./overlays mkdir xtensa_hifi4 tar -xf xtensa_hifi4.tar.gz -C xtensa_hifi4 find ./xtensa_hifi4 -type f -print0 | xargs -0 sed -i '/#define XSHAL_ABI/c\#define XSHAL_ABI XTHAL_ABI_CALL0' после этого собирать. Но это не точно - сам кросскомпилятор собирается, правильно ли компилирует не проверял, objdump показывает что используется только callx0 так что похоже на правду. PS не похоже на правду 🙂 чего-то ещё надо править, в библиотеках есть call4,8,12 Изменено 10 октября, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 10 октября, 2023 Опубликовано 10 октября, 2023 (изменено) · Жалоба On 10/10/2023 at 6:18 PM, sasamy said: PS не похоже на правду 🙂 чего-то ещё надо править, в библиотеках есть call4,8,12 все же похоже на правду - просто мусор словил дизассемблером. Проверил скриптом после сборки Quote $ cd builds/xtensa-t113-elf/bin $ for call in call4 callx4 call8 callx8 call12 callx12; do \ for file in $(ls ../xtensa-t113-elf/lib/*.a); do \ printf "%s %s %s\n" $file $call $(./xtensa-t113-elf-objdump -d $file | grep $call | wc -l); \ done; \ done результаты по нулям у всех оконных вызовов, кроме libstdc++ но он не нужен 🙂 Quote ../xtensa-t113-elf/lib/libc.a call4 0 ../xtensa-t113-elf/lib/libc_nano.a call4 0 ../xtensa-t113-elf/lib/libg.a call4 0 ../xtensa-t113-elf/lib/libgloss.a call4 0 ../xtensa-t113-elf/lib/libg_nano.a call4 0 ../xtensa-t113-elf/lib/libm.a call4 0 ../xtensa-t113-elf/lib/libm_nano.a call4 0 ../xtensa-t113-elf/lib/libnosys.a call4 0 ../xtensa-t113-elf/lib/libpthread_stubs.a call4 0 ../xtensa-t113-elf/lib/libstdc++.a call4 5 ../xtensa-t113-elf/lib/libstdc++exp.a call4 0 ../xtensa-t113-elf/lib/libsupc++.a call4 0 ../xtensa-t113-elf/lib/libc.a callx4 0 ../xtensa-t113-elf/lib/libc_nano.a callx4 0 ../xtensa-t113-elf/lib/libg.a callx4 0 ../xtensa-t113-elf/lib/libgloss.a callx4 0 ../xtensa-t113-elf/lib/libg_nano.a callx4 0 ../xtensa-t113-elf/lib/libm.a callx4 0 ../xtensa-t113-elf/lib/libm_nano.a callx4 0 ../xtensa-t113-elf/lib/libnosys.a callx4 0 ../xtensa-t113-elf/lib/libpthread_stubs.a callx4 0 ../xtensa-t113-elf/lib/libstdc++.a callx4 0 ../xtensa-t113-elf/lib/libstdc++exp.a callx4 0 ../xtensa-t113-elf/lib/libsupc++.a callx4 0 ../xtensa-t113-elf/lib/libc.a call8 0 ../xtensa-t113-elf/lib/libc_nano.a call8 0 ../xtensa-t113-elf/lib/libg.a call8 0 ../xtensa-t113-elf/lib/libgloss.a call8 0 ../xtensa-t113-elf/lib/libg_nano.a call8 0 ../xtensa-t113-elf/lib/libm.a call8 0 ../xtensa-t113-elf/lib/libm_nano.a call8 0 ../xtensa-t113-elf/lib/libnosys.a call8 0 ../xtensa-t113-elf/lib/libpthread_stubs.a call8 0 ../xtensa-t113-elf/lib/libstdc++.a call8 0 ../xtensa-t113-elf/lib/libstdc++exp.a call8 0 ../xtensa-t113-elf/lib/libsupc++.a call8 0 ../xtensa-t113-elf/lib/libc.a callx8 0 ../xtensa-t113-elf/lib/libc_nano.a callx8 0 ../xtensa-t113-elf/lib/libg.a callx8 0 ../xtensa-t113-elf/lib/libgloss.a callx8 0 ../xtensa-t113-elf/lib/libg_nano.a callx8 0 ../xtensa-t113-elf/lib/libm.a callx8 0 ../xtensa-t113-elf/lib/libm_nano.a callx8 0 ../xtensa-t113-elf/lib/libnosys.a callx8 0 ../xtensa-t113-elf/lib/libpthread_stubs.a callx8 0 ../xtensa-t113-elf/lib/libstdc++.a callx8 0 ../xtensa-t113-elf/lib/libstdc++exp.a callx8 0 ../xtensa-t113-elf/lib/libsupc++.a callx8 0 ../xtensa-t113-elf/lib/libc.a call12 0 ../xtensa-t113-elf/lib/libc_nano.a call12 0 ../xtensa-t113-elf/lib/libg.a call12 0 ../xtensa-t113-elf/lib/libgloss.a call12 0 ../xtensa-t113-elf/lib/libg_nano.a call12 0 ../xtensa-t113-elf/lib/libm.a call12 0 ../xtensa-t113-elf/lib/libm_nano.a call12 0 ../xtensa-t113-elf/lib/libnosys.a call12 0 ../xtensa-t113-elf/lib/libpthread_stubs.a call12 0 ../xtensa-t113-elf/lib/libstdc++.a call12 0 ../xtensa-t113-elf/lib/libstdc++exp.a call12 0 ../xtensa-t113-elf/lib/libsupc++.a call12 0 ../xtensa-t113-elf/lib/libc.a callx12 0 ../xtensa-t113-elf/lib/libc_nano.a callx12 0 ../xtensa-t113-elf/lib/libg.a callx12 0 ../xtensa-t113-elf/lib/libgloss.a callx12 0 ../xtensa-t113-elf/lib/libg_nano.a callx12 0 ../xtensa-t113-elf/lib/libm.a callx12 0 ../xtensa-t113-elf/lib/libm_nano.a callx12 0 ../xtensa-t113-elf/lib/libnosys.a callx12 0 ../xtensa-t113-elf/lib/libpthread_stubs.a callx12 0 ../xtensa-t113-elf/lib/libstdc++.a callx12 0 ../xtensa-t113-elf/lib/libstdc++exp.a callx12 0 ../xtensa-t113-elf/lib/libsupc++.a callx12 0 мусор словился в libstdc++, на самомо деле вызово call4 там нет, это просто часть текста Quote $ ./xtensa-t113-elf-objdump -S ../xtensa-t113-elf/lib/libstdc++.a | grep call4 Disassembly of section .literal._ZNKSt17bad_function_call4whatEv: 00000000 <.literal._ZNKSt17bad_function_call4whatEv>: Disassembly of section .text._ZNKSt17bad_function_call4whatEv: 00000000 <_ZNKSt17bad_function_call4whatEv>: 0: 000021 l32r a2, fffc0000 <_ZNKSt17bad_function_call4whatEv+0xfffc0000> call0/callx0 вызовы для сравнения Quote $ for call in call0 callx0; do \ for file in $(ls ../xtensa-t113-elf/lib/*.a); do \ printf "%s %s %s\n" $file $call $(./xtensa-t113-elf-objdump -d $file | grep $call | wc -l); \ done; \ done результат Quote ../xtensa-t113-elf/lib/libc.a call0 743 ../xtensa-t113-elf/lib/libc_nano.a call0 304 ../xtensa-t113-elf/lib/libg.a call0 743 ../xtensa-t113-elf/lib/libgloss.a call0 0 ../xtensa-t113-elf/lib/libg_nano.a call0 304 ../xtensa-t113-elf/lib/libm.a call0 23 ../xtensa-t113-elf/lib/libm_nano.a call0 23 ../xtensa-t113-elf/lib/libnosys.a call0 0 ../xtensa-t113-elf/lib/libpthread_stubs.a call0 0 ../xtensa-t113-elf/lib/libstdc++.a call0 493 ../xtensa-t113-elf/lib/libstdc++exp.a call0 0 ../xtensa-t113-elf/lib/libsupc++.a call0 473 ../xtensa-t113-elf/lib/libc.a callx0 3192 ../xtensa-t113-elf/lib/libc_nano.a callx0 2548 ../xtensa-t113-elf/lib/libg.a callx0 3192 ../xtensa-t113-elf/lib/libgloss.a callx0 0 ../xtensa-t113-elf/lib/libg_nano.a callx0 2548 ../xtensa-t113-elf/lib/libm.a callx0 4875 ../xtensa-t113-elf/lib/libm_nano.a callx0 4876 ../xtensa-t113-elf/lib/libnosys.a callx0 0 ../xtensa-t113-elf/lib/libpthread_stubs.a callx0 0 ../xtensa-t113-elf/lib/libstdc++.a callx0 17409 ../xtensa-t113-elf/lib/libstdc++exp.a callx0 0 ../xtensa-t113-elf/lib/libsupc++.a callx0 532 Должно работать. Изменено 10 октября, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 октября, 2023 Опубликовано 11 октября, 2023 (изменено) · Жалоба 4 hours ago, sasamy said: результаты по нулям у всех оконных вызовов, кроме libstdc++ но он не нужен 🙂 Нужен. Когда программа написана на C++ и использует его возможности. Те же new, delete. C этой тройкой библиотек мои проекты работают (смешанные C++/C/ASM): -lstdc++ -lc_nano -lnosys specs у меня не заработал почему-то. Да оно мне ине нужно. При этом для lc_nano для printf() нужна фукция _write( ) : int _write(int fd,char *ptr,int len) //for printf { (void)fd; int i=0; while(ptr[i]&&(i<len)) { UART_putc(ptr[i]); if(ptr[i]=='\n')UART_putc('\r'); i++; } return len; } Делал оверлей под call0 по-другому: 1. Скачал несконвертированный оверлей: https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/releases/download/Toolchains/xtensa-config-overlay.tar.gz 2. Разжал его. 3. В винде с помощью программы Folder Find Text нашёл все файлы с подстроками: call0 , windowed - их не так много. 4. Подправил везде во всех файлах: XCHAL_HAVE_WINDOWED - выставил в 0 XSHAL_ABI - выставил в XTHAL_ABI_CALL0 5. Сохранил файлы и пожал их обратно tar.gz (при этом важно сжать все файлы не одной папкой, а в текущей папке). 6. Полученный архив сконвертировал для ct-ng sh-скриптом: https://wiki.linux-xtensa.org/index.php?title=Toolchain_Overlay_File 7. Положил архив оверлея в папку overlays ct-ng. 8. Собрал тулчейн. 9. Проверил, что ABI CALL0 задефайнен: echo | xtensa-hifi4-elf-gcc -dM -E - > o.txt sudo nano o.txt 10. должно быть: #define __XSHAL_ABI 1 #define __XCHAL_HAVE_WINDOWED 0 #define __XTENSA_CALL0_ABI__ 1 #define __XTHAL_ABI_WINDOWED 0 #define __XTHAL_ABI_CALL0 1 Эсли дефайны другие, тогда увы 🙂 4 hours ago, sasamy said: мусор словился в libstdc++, на самомо деле вызово call4 там нет, это просто часть текста Мусор есть в секциях литералов, в секциях комментариев. И просто в данных. Изменено 11 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 октября, 2023 Опубликовано 11 октября, 2023 (изменено) · Жалоба Ранее обсуждалось, что у меня нет желания видеть ворнинги при линковке, которые говорят о дефолтной реализации функций в libnosys. И предлагал пересобрать эту либу. Есть способ проще - удалить секцию через objcopy или strip. Но objcopy не работает правильно. Делаю команду удаления всех секций по шаблону .gnu.warning.* : objcopy --remove-section=.gnu.warning.* libnosys.a В итоге, секции остаются и выдаёт следующее : При этом через objdump делаю вывод секций- для проверки (.gnu.warning.* остались) : objdump -h libnosys.a > sections.txt Секции: In archive libnosys.a: chown.o: file format elf32-xtensa-le Sections: Idx Name Size VMA LMA File off Algn 0 .literal 00000004 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .text 0000000b 00000000 00000000 00000038 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 2 .data 00000000 00000000 00000000 00000043 2**0 CONTENTS, ALLOC, LOAD, DATA 3 .bss 00000000 00000000 00000000 00000043 2**0 ALLOC 4 .gnu.warning._chown 0000002f 00000000 00000000 00000043 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .debug_frame 00000020 00000000 00000000 00000074 2**2 CONTENTS, RELOC, READONLY, DEBUGGING, OCTETS Почему секции не подлежат сносу ? Если сделать strip: strip -w -R .gnu.warning.* libnosys.a То секции с шаблоном .gnu.warning.* сносятся (что и нужно), но кроме этого отладочные секции тоже сносятся (не нужно). Почему так всё бажно? Стрип значит сносит, а обжкопи - нет. И ещё теперь надо добавлять к линкеру ключ: -Wl,--no-warn-rwx-segment А то при линковке орёт про permissions RWX в elf-секции. Изменено 11 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 11 октября, 2023 Опубликовано 11 октября, 2023 · Жалоба On 10/11/2023 at 4:14 AM, repstosw said: Нужен. Когда программа написана на C++ и использует его возможности. это была шутка On 10/11/2023 at 4:14 AM, repstosw said: 3. В винде с помощью программы Folder Find Text нашёл все файлы с подстроками: call0 , windowed - их не так много. 4. Подправил везде во всех файлах: венда убога как ОС, счас говорят powershell какой-то есть ? On 10/11/2023 at 4:14 AM, repstosw said: XCHAL_HAVE_WINDOWED - выставил в 0 эта замена в принципе не нужна - она совсем отключит windowed abi и нельзя будет переключить его через -mabi=windowed. В шелле если это нужно элементарно сделать однострочником Quote find ./xtensa_hifi4 -type f -print0 | xargs -0 sed -i '/#define XCHAL_HAVE_WINDOWED/c\#define XCHAL_HAVE_WINDOWED 0' On 10/11/2023 at 4:14 AM, repstosw said: 10. должно быть: из этого главное что должно быть Quote #define __XTENSA_CALL0_ABI__ 1 переменная препроцессора укзывающая компилятору что текущий ABI call0 On 10/11/2023 at 7:00 AM, repstosw said: А то при линковке орёт про permissions RWX в elf-секции. он просто так не будет орать https://github.com/raspberrypi/pico-sdk/issues/1029#issuecomment-1324889474 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 октября, 2023 Опубликовано 11 октября, 2023 (изменено) · Жалоба 35 minutes ago, sasamy said: венда убога как ОС, счас говорят powershell какой-то есть ? На счёт этого не знаю, но подозреваю, что есть. Кроме того, можно портировать вод винду то, что есть в линуксе. Мало того, есть Notepad++, с его мощными регулярными выражениями. Но их надо курить. Но в текстовых файлах исправить менее 10 дефайнов несложно 🙂 35 minutes ago, sasamy said: эта замена в принципе не нужна - она совсем отключит windowed abi и нельзя будет переключить его через -mabi=windowed На счёт переключений видел такой вариант, но слинковать вроде как не позволит. Надо попробовать сделать, как вы написали и проверить на предмет переключаемости в линковке. 35 minutes ago, sasamy said: он просто так не будет орать https://github.com/raspberrypi/pico-sdk/issues/1029#issuecomment-1324889474 Согласен. Но у меня фон-неймановский расклад памяти, это когда можно RWX во всех регионах. Даже в коде. Потому что нету флеша, а есть DDR. Данный ворнинг меня несколько раздражал, и я решил его убрать. Меня сейчас интересует как удалить секции, которые начинаются с .gnu.warning. в libnosys, при этом сохранить всё остальное. С objcopy не вышло. А strip удаляет не только то, что надо. Вариант перекомпиляции с убраным макросом уже был. Изменено 11 октября, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 октября, 2023 Опубликовано 11 октября, 2023 · Жалоба 3 hours ago, repstosw said: С objcopy не вышло. А strip удаляет не только то, что надо. Вариант перекомпиляции с убраным макросом уже был. Вот так работает: objcopy --strip-debug libnosys.a objcopy --remove-section=.gnu.warning.* libnosys.a По-другому удаляться эти противные секции (.gnu.warning.*) из либы не хотят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться