Open attuska opened 10 months ago
Intel processzorral is ez van. (Intel Core 2 Duo E4600) Az SDL2 újrafordításához a -O3 lecserélése -O2-re nem segít, az EXPORT CFLAGS='-O0' sem. Érvénytelen utasítás. Nem értelmezhető a processzor által a generált és neki átadott bináris kód ezen a gépen.
UBK4-en az ott adott verzió simán lefordítható.
UBK5-ön az UBK4 sdl2 ubéje is az issue indító hibába torkollik. Tehát az illegális utasítást nem a proci, nem az sdl2 forrása okozza, hanem egy más valami.
Ez érdekes, mert a gcc verzió is ugyanaz. Próbáld meg llvm-mel fordítani.
Megpróbáltam a Cmake-val. Így a compile:
ub_compile \ -DCMAKE_C_COMPILER_ID=Clang \ -DSDL_ARTS=0 \ -DSDL_ESD=0 \ -DSDL_NAS=0 \ -DSDL_ALSA=1 \ -DSDL_WAYLAND=1 \ -SSDL_RPATH=0
A hiba már beszédesebb:
[92/567] Building C object CMakeFiles/SDL2main.dir/src/main/dummy/SDL_dummy_main.c.o FAILED: CMakeFiles/SDL2main.dir/src/main/dummy/SDL_dummy_main.c.o /bin/ccache /bin/cc -I/var/uhubuild/work/compile/build/include-config-release/SDL2 -I/var/uhubuild/work/compile/build/include/SDL2 -I/var/uhubuild/work/compile/build/include -idirafter "/var/uhubuild/work/compile/src/video/khronos" -DHAVE_LINUX_VERSION_H -Wall -fno-strict-aliasing -Wdeclaration-after-statement -fvisibility=hidden -Wshadow -Wno-unused-local-typedefs -fcolor-diagnostics -mmmx -m3dnow -msse -msse2 -msse3 -D_REENTRANT -I/usr/include -DSDL_BUILD_MAJOR_VERSION=2 -DSDL_BUILD_MINOR_VERSION=28 -DSDL_BUILD_MICRO_VERSION=1 -O2 -DNDEBUG -MD -MT CMakeFiles/SDL2main.dir/src/main/dummy/SDL_dummy_main.c.o -MF CMakeFiles/SDL2main.dir/src/main/dummy/SDL_dummy_main.c.o.d -o CMakeFiles/SDL2main.dir/src/main/dummy/SDL_dummy_main.c.o -c /var/uhubuild/work/compile/src/main/dummy/SDL_dummy_main.c cc: error: unrecognized command-line option ‘-fcolor-diagnostics’
A -fcolor-diagnostics hiba eddig nem volt.
Érdekes, hogy az -fcolor-diagnostics hibát okoz, mert az létező opció a gcc-nél, de akkor patcheld ki.
Meglett patkolva, ez a hiba most nincs, de az érvénytelen utasítás újra megjelent a logban.
/var/uhubuild/work/compile/build/include/SDL2/SDL_rect.h: In function ‘SDL_FRectEquals’: /var/uhubuild/work/compile/build/include/SDL2/SDL_rect.h:269:5: internal compiler error: Érvénytelen utasítás 269 | return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); | ^
~
Az "internal compiler error" gcc belső gondra utal.
Vagy a linkelésben, mely az objektumokban található binárisokat a processzor számára átadandó folyamatos bitfolyammá fűzi össze. Érthetőbben és nagyon tömören egy assemblerben is jártatos szerint: A hibát az okozza, hogy a fordító által generált bináris sorozatban az éppen soronkövetkező utasítás az azt végrehajtani akaró processzor számára értelmezhetetlen. A processzor csak egy automata, a kódok hossza változó, paraméteresek, vagy anélküliek. A processzor eldönti a beléje hardverileg égetett, program alapján az éppen aktuális bájtról, hogy, ha az kód, akkor hány paraméter bájt követi azt. Minden eléje kerülő bájtot utasításként próbál értelmezni. Ha nincs ez az "utasítás" a beléje égetett utasításkészletben, akkor hiba! Arra hogy épp hol tart fenntart egy "mutatót", mely alapján ezt a mutatót megnöveli, hogy a mutató a következő utasításra mutasson. Hiba esetén előfordulhat, hogy ez a mutató egy adathalmaz része, melyet a processzor utasításként próbál meg értelmezni. Az egész "elszáll". A beléje égetett utasításkészlet teljesen processzor típus függő. Ezért is kell megadni a fordítónak helyesen a cél processzor típusát.
AMD processzorral nem tudom újrafordítani az sdl2-t.