Я пытаюсь создать cross-gcc для семьи arm.
Весь многоступенчатый процесс, который я использую для сборки 9.3gcc cross-gcc, работает нормально и создает рабочую систему для: i386, x86_64, aarch64 и ARM - но не работает в ARM для случая THUMB.
Кросс-компилятор gcc9.3.0, который я использую для сборки glibc, построен с использованием мульти-библиотек и предоставляет следующие мульти-библиотеки:
arm/v5te/hard;@marm@march=armv5te+fp@mfloat-abi=hard
thumb/nofp;@mthumb@mfloat-abi=soft
thumb/v7/nofp;@mthumb@march=armv7@mfloat-abi=soft
thumb/v7+fp/softfp;@mthumb@march=armv7+fp@mfloat-abi=softfp
thumb/v7+fp/hard;@mthumb@march=armv7+fp@mfloat-abi=hard
thumb/v7-r+fp.sp/softfp;@mthumb@march=armv7-r+fp.sp@mfloat-abi=softfp
thumb/v7-r+fp.sp/hard;@mthumb@march=armv7-r+fp.sp@mfloat-abi=hard
thumb/v7-a/nofp;@mthumb@march=armv7-a@mfloat-abi=soft
thumb/v7-a+fp/softfp;@mthumb@march=armv7-a+fp@mfloat-abi=softfp
thumb/v7-a+fp/hard;@mthumb@march=armv7-a+fp@mfloat-abi=hard
thumb/v7-a+simd/softfp;@mthumb@march=armv7-a+simd@mfloat-abi=softfp
thumb/v7-a+simd/hard;@mthumb@march=armv7-a+simd@mfloat-abi=hard
thumb/v7ve+simd/softfp;@mthumb@march=armv7ve+simd@mfloat-abi=softfp
thumb/v7ve+simd/hard;@mthumb@march=armv7ve+simd@mfloat-abi=hard
thumb/v8-a/nofp;@mthumb@march=armv8-a@mfloat-abi=soft
thumb/v8-a+simd/softfp;@mthumb@march=armv8-a+simd@mfloat-abi=softfp
thumb/v8-a+simd/hard;@mthumb@march=armv8-a+simd@mfloat-abi=hard
Сборка glibc 2.31 для ARM работает нормально для цели:
-marm -march = armv5te + fp -mfloat-abi = softfp
Однако сборка не выполняется (с той же ошибкой) для любой цели ARM с THUMB, т. Е .:
-mthumb -march = armv7 -mfloat-abi = soft
ошибка связывания с THUMB следующая:
-Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs -Wl,-z,now \
/home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os -Wl,--version-script=/home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/ld.map \
-Wl,-soname=ld-linux.so.3 \
-Wl,-defsym=_begin=0
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os: in function `init_tls':
rtld.c:(.text+0x520): undefined reference to `__libc_do_syscall'
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os: in function `dl_main':
rtld.c:(.text+0x2426): undefined reference to `__libc_do_syscall'
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os: in function `_dl_lookup_symbol_x':
(.text+0x798c): undefined reference to `__libc_do_syscall'
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os: in function `_dl_relocate_object':
(.text+0x913e): undefined reference to `__libc_do_syscall'
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os: in function `_dl_fixup':
(.text+0xabac): undefined reference to `__libc_do_syscall'
/home/piotro/minimyth-dev/images/build/usr/lib/gcc/arm-minimyth-linux-gnueabi/9.3.0/../../../../arm-minimyth-linux-gnueabi/bin/ld: /home/piotro/minimyth-dev/script/devel/glibc/work/main.d/glibc-2.31_build/elf/librtld.os:(.text+0xafc0): more undefined references to `__libc_do_syscall' follow
collect2: error: ld returned 1 exit status
В целом (точно такая же процедура сборки с точно такими же источниками + скрипты) работает нормально для: i386, x86_64, aarch64 и целей ARM, не относящихся к THUMB - неудачные сборки ARM для целей с THUMB, которые я рассматриваю как ошибку в glibc.
Единственное, что может вызвать сбой, - это изменить флаги компилятора с -marm на -mthumb.
Я уже заполнил отчет об ошибке glibc для этого (# 25920) - но решил спросить здесь, поскольку разговор об отслеживании ошибок glibc кажется немного неэффективным ...
Может кто-нибудь знает, как с этим двигаться дальше?