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

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

У японца в его тулчейне тоже нет libnosys : https://github.com/YuzukiHD/FreeRTOS-HIFI4-DSP/releases/tag/Toolchains :biggrin:

Конфиг использовал такой:

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 тоже нет

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

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


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

On 10/9/2023 at 1:21 PM, repstosw said:

С ABI call0 ?

ABI на сборку не влияет - вы там свой оверлей просто укажете и всё. В espressif ctng с их конфигом собирается два варианта newlib - nano и обычный, у них разные опции для printf, так что потом достаточно указать нужный вариант через spec и не ломать голову где взять отладочный printf для double

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


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

Решил написать как самому собрать кросскомпилятор для 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

 

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

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


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

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 - облом.

Куда копать дальше?

image.thumb.png.9012ae8bf714e3274873635aef2ad83c.png

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


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

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

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

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


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

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 .

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


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

В общем собрал я тулчейн с этим 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, а только создаёт проблемы.

image.thumb.png.9b1124682d214c162dafcaebb9f56b98.png

 

С указанием spec  nosys и nano предупреждений меньше:

image.thumb.png.c380bb38be4ebccf8777a30228c0f6f2.png

 

Про предупреждения и способ их устранения здесь:

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

 

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

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


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

libc_nano порадовал.  При указанном флаге -u_printf_float - печатает float.  Всё как в arm-none-eabi !:dance4:

А вот через specs не хочет нормально линковаться.  Кучу ботвы вылазит: про eh-фреймы, про литералы.  Я не люблю, когда кто-то лезет в распределение памяти всесте со мной...

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

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


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

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

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

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


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

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

Должно работать.

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

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


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

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 там нет, это просто часть текста

Мусор есть в секциях литералов, в секциях комментариев. И просто в данных.

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

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


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

Ранее обсуждалось, что у меня нет желания видеть ворнинги при линковке, которые говорят о дефолтной реализации функций в libnosys. И предлагал пересобрать эту либу.

Есть способ проще - удалить секцию через objcopy или strip.

Но objcopy не работает правильно. Делаю команду удаления всех секций по шаблону .gnu.warning.* :

objcopy --remove-section=.gnu.warning.* libnosys.a

В итоге, секции остаются и выдаёт следующее :

image.png.e313927eb6e7ce5563b000b7c5f751ed.png

При этом через 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-секции.

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

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


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

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

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


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

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 удаляет не только то, что надо.  Вариант перекомпиляции с  убраным макросом уже был.

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

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


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

3 hours ago, repstosw said:

С objcopy не  вышло. А strip удаляет не только то, что надо.  Вариант перекомпиляции с  убраным макросом уже был.

Вот так работает:

objcopy --strip-debug libnosys.a
objcopy --remove-section=.gnu.warning.* libnosys.a

По-другому удаляться эти противные секции (.gnu.warning.*) из либы не хотят.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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