Форумы|Эльфы
ELFPack 3.0 by Z.Vova & Ganster (Develop zone)

<<Пред. | След.>>
1,2,3...114,115,116


Стр.

Сообщения
STANOK[2880](Off)Цит
15 Июл 2011, 23:29
ELFPack 3.0 by Z.Vova & Ganster (Develop zone)
Та же информация находится тут в виде вики.
Подготовка тулчейнов:
!Примечание!
Если вы хотите чтоб работал режим __NO_DIRECT_SWI(использование комманды swi), вам понадобится патч(gcc 4.6.2)
написанный Barracuda для использования атрибута __attribute__((swi(NUM))).
Чтобы применить патч, распаковываем его в корень исходников гцц и
patch -p1 < ./Имя_патча.

Сборка gcc в UNIX системах:
1. Выкачиваем сорцы гцц http://mirrors-us.seosue.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.bz2
2. расспаковываем
3. Если нужно, ставим патч на сви ^
4. конфигурим и собираем

mkdir build && cd build
../configure --target=arm-eabi --prefix=/usr --enable-interwork --enable-languages=c,c++
make all-gcc -j3
make install-gcc


4. Выкачиваем binutils http://ftp.gnu.org/gnu/binutils/binutils-2.21.1.tar.bz2
5. расспаковываем
6. конфигурим и собираем

./configure --prefix=/usr --target=arm-eabi --enable-interwork --enable-multilib --with-float=soft --disable-werror
make -j3
make install


С компиляторами разобрались. Можете скачать devkitArm он тоже подходит.
gcc-4.6.3-swisupport-win32
gcc-4.6.2_swi_call-siemens2.patch.zip (2.28 KB)
Скачано 216 раз(а)
STANOK[2880](Off)Цит
15 Июл 2011, 23:29
как собственно конпилять эльфы?

Баш скрипт в котором вы можете узреть флаги и все опции.

CFLAGS="-msoft-float -fshort-wchar -marm -mlittle-endian -mcpu=arm926ej-s
-IПапка с инклудами -O2 -nostdlib -pipe -fno-exceptions -fdata-sections -ffunction-sections"

syms="--defsym __ex=0"
LIBS="libcrt.a"

arm-eabi-gcc $CFLAGS -c -DNEWSGOLD main.c
arm-eabi-ld -pie -s -gc-sections -zmax-page-size=1 $syms $LIBS -marmelf *.o -o test.elf
STANOK[2880](Off)Цит
15 Июл 2011, 23:29
Теперь перейдём к либам. Что куда и зачем.

include - папка с инклудами бибилотеки libc и прочих, а так же свилиба и прочие нужные файлы

libcrt.a - Статическая библиотека, которая должна линковаться __КО ВСЕМ ПРЕКТАМ__. В ней точка входа в эльф, инициализация переменной отвечающей за вызов сви и прочяя системная хрень. Забудете подключить - не удивляйтесь что пикает.

libsupc++.a - статическая библиотека которая должна линковатся к С++ проэктам. Допиленная

libgcc.a - статическая вспомогательная библиотека для gcc. Если вы хотите собирать эльф чисто на свилибе, без зависимости от либц, то нужно её линковать к проекту. В ней функции для работы с float, double, так же функции для работы стандарта EABI. Ну и прочих плюшек которые не умеет наш проц.

libc.so - Собственно сам libc

libm.so - Библиотека для математики(синусы, косинусы и т.п.)

libzlib.so - Ну тут понятно, злиба.

libjpeg.so - Жипег либа
(29.11.11)
ЮЗЕРАМ
Скачайте libs.zip c первой страницы, и распакуйте только сошки(*.so) в 0:\\ZBin\\lib или 4:\\ZBin\\lib Он понадобятся для работы новых эльфов.
include.zip (2.24 MB)
Скачано 113 раз(а)
libs.zip (1.05 MB)
Скачано 191 раз(а)
STANOK[2880](Off)Цит
15 Июл 2011, 23:29
Настройка среды Code::Blocks

1. Settings -> Compiler and debuger settings. Выбираете в списке "GNU ARM GCC Compiler"
Скрин http://upwap.ru/1610076

2. Вкладка Compiler settings, подвкладка Compiler Flags
----> Ставим галочки на -mlittle-endian и -msoft-float

2.1. Вкладка Other options
----> пишем
-mcpu=arm926ej-s -nostdlib -fshort-wchar
-fno-exceptions -fdata-sections -ffunction-sections

3. Следующая вкладка Linker settings
----> Other linker options:
-marmelf
-z max-page-size=1
-nostdlib
Скрин http://upwap.ru/1610082

4. Следующая вкладка Search directories
----> Компилеру прописываем путь к папке include, линкеру к папке libs

5. Следующая вкладка Toolchain executables
----> Compiler`s installation directory прописываем путь к папке с компиялторами
потом как на скрине http://upwap.ru/1610089

6. Пропускаем одну вкладку и идём на Other settings
----> Тут вы можете выставить прогресс бар сборки, число потоков и так далее, это сами.
Скрин моих настроек http://upwap.ru/1610091
----> Тут же на вкладке тыкаем на Advanced options
Вкладка Commands
-> Выбираем из списка Link object files to dynamic library и прписываем
$linker -shared -s -Bsymbolic -Bsymbolic-function -soname=$exe_name.$exe_ext $libdirs $link_objects $link_resobjects -o $exe_output $link_options $libs

-> Link object files (to executable && to console executable)
$linker -pie $libdirs -o $exe_output $link_objects $link_resobjects $link_options $libs


Скрины:
http://upwap.ru/1610095
http://upwap.ru/1610099
http://upwap.ru/1610101
STANOK[2880](Off)Цит
16 Июл 2011, 0:13
И рыбки для кодеблока
(05.08.11)

В архиве Си проект с конфигом.

Пример как компилировать "облегченные" эльфы на гцц.
templates.zip (7.54 KB)
Скачано 97 раз(а)
STANOK[2880](Off)Цит
16 Июл 2011, 0:20
Обьясню как распоряжатся с либами.

libcrt.a - всегда подключается если это эльф
libsupc++.a - линкуем её к С++ проэктам, в частности и к либам если собираем С++ либу
libgcc.so - иногда подключается если в проэкте используется деление или ещё чтото из разряда еаби стандарта, ака undefine reference `__aeabi*' или `__eabi'
libc.so - подключается если вы используете функции стандарта Си, либо чтото портируете и проект требует стандартные сишные функции. Тогда дефайн __NO_LIBC убираем и компилим, если наоборот не желаем юзать libc то ставим этот дефайн в настройках проекта.
libjpeg.so - либа для работы с жипегом, ну есенно подключаем если хотим чтонить делать с ним. Например в балете она юзается.
liblua.so - интерпретатор и стандартные библиотеки, вы можете юзать скрипты в качестве плугин к своим прогам. Как юзать все на офф сайте луа, инклуды я кинул в папку которая в архиве.
libm.so - если вам понадобилось считать косинусы аркосинусы тангенсы и прочую фигню из math.h то подключаем эту либу.
libpng.so - бибилиотека для работы с png файлами, возможно будет конфликтовать с функциями из свилибы.
libstdc++.so - полностью рабочая либа uclibc++, стандарта С++. std::string работает точно)
libzlib.so - библиотека для работы со сжатием

================
сорцы системных либ
dietlibc.tar.gz.mid (80.54 KB)
Скачано 74 раз(а)
uclibc++.tar.gz.mid (11.52 KB)
Скачано 62 раз(а)
libsupc++.tar.gz.mid (48.01 KB)
Скачано 57 раз(а)
libm.tar.gz.mid (138.51 KB)
Скачано 62 раз(а)
crt_helper.tar.gz.mid (6.08 KB)
Скачано 116 раз(а)
STANOK[2880](Off)Цит
16 Июл 2011, 0:24
Что поменялось и что нужно учитывать при сборке эльфа?

Самое главное отличие это отсутствие ненужной секции ELF_BEGIN по которой убивались эльфы. Убийство эльф в новой версии проивзодится по средствам новых функций свилибе и екстерна переменной void *__ex.

Эльфлоадер при парсинге эльфа находит импорт __ex и присваивает ему значение, а именно на данные по ктоторым новая функция в свилибе elfclose(void*) убивает эльф.

Я сделал функцию kill_elf(); которая сделает все за вас. Так что вызывайте её, либо
extern void *__ex;
elfclose(&__ex);
STANOK[2880](Off)Цит
16 Июл 2011, 0:35
набор компиляторов для linux x86_64
arm-eabi

набор компиляторов для linux i386(пакеты для ubuntu)
arm-eabi-ubuntu

для rpm-based систем(openSUSE)
arm-eabi-binutils-2.20-1.x86_64
arm-eabi-gcc-4.6.1-1.x86_64

набор компиляторов для windows x86
arm-eabi-win

з.ы. В обоих версиях ос, линкер пропатчен чтоб помечал эльфы как Executable, а не Shared. Это не страшно, но раздражает
STANOK[2880](Off)Цит
17 Июл 2011, 3:16
Обновил либы и хедеры.
Twitch[638](Off)Цит
17 Июл 2011, 20:19
Смотрите здесь:

Скомпилированые бинарники для Linux, для архитектуры i686.

<<Пред. | След.>>
1,2,3...114,115,116


Стр.

Ответить на тему
Сохранить в txt