uhulinux / ub-ubk5

0 stars 0 forks source link

SDL2 :Illegális utasítás #2

Open attuska opened 10 months ago

attuska commented 10 months ago

AMD processzorral nem tudom újrafordítani az sdl2-t.

CC build/SDL_assert.lo In file included from include/SDL_video.h:33, from include/SDL_events.h:33, from include/SDL.h:41, from /var/uhubuild/work/compile/src/SDL.c:46: include/SDL_rect.h: In function ‘SDL_FRectEquals’: include/SDL_rect.h:269:5: internal compiler error: Érvénytelen utasítás 269 | return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); | ^~ 0x181d9b4 internal_error(char const*, ...) ???:0 0x7f0a8a45bbe9 __gmpn_sqr_basecase ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See https://gcc.gnu.org/bugs/ for instructions.

attuska commented 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.

attuska commented 10 months ago

UBK4-en az ott adott verzió simán lefordítható.

attuska commented 10 months ago

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.

rezso commented 10 months ago

Ez érdekes, mert a gcc verzió is ugyanaz. Próbáld meg llvm-mel fordítani.

attuska commented 10 months ago

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.

rezso commented 10 months ago

Érdekes, hogy az -fcolor-diagnostics hibát okoz, mert az létező opció a gcc-nél, de akkor patcheld ki.

attuska commented 10 months ago

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); | ^~

rezso commented 5 months ago

Az "internal compiler error" gcc belső gondra utal.

attuska commented 5 months ago

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.