OldUnreal / Unreal-testing

OU 227 testing
Other
41 stars 0 forks source link

Linux 64bit build crashes with an "illegal instruction" #128

Closed uralets closed 1 year ago

uralets commented 3 years ago

As reported here (back in April) https://www.oldunreal.com/phpBB3/viewtopic.php?p=97979#p97979

Trying to run on Ubuntu 20.04 results in an "Illegal instruction" immediately on launch.

Smirftsch commented 2 years ago

illegal instruction sounds different, I'd rather assume this to be a problem with CPU optimizations not supported by your hardware. Whats your CPU?

uralets commented 2 years ago

illegal instruction sounds different, I'd rather assume this to be a problem with CPU optimizations not supported by your hardware. Whats your CPU?

It's AMD FX (bulldozer). So by no means an ancient one. Sorry I haven't checked the latest builds. Been waiting for the UT 64 bit to meterialise which hasn't transpired. I'll try to give the latest one a run sometime this week.

uralets commented 2 years ago

No dice. Still Illegal instruction.

dmesg shows: traps: UnrealLinux.bin[8563] trap invalid opcode ip:7fe7e6e104ba sp:7ffcc32c40f0 error:0 in Core.so[7fe7e6d8f000+cc000]

a quick (and useless) gdb
(gdb) run
Starting program: /home/user/games/unreal/System64/UnrealLinux.bin 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x00007ffff75ee4ba in appInit(wchar_t const*, wchar_t const*, FMalloc*, FOutputDevice*, FOutputDeviceError*, FFeedbackContext*, FFileManager*, FConfigCache* (*)(), int) () from ./Core.so
lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   48 bits physical, 48 bits virtual
CPU(s):                          6
On-line CPU(s) list:             0-5
Thread(s) per core:              2
Core(s) per socket:              3
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       AuthenticAMD
CPU family:                      21
Model:                           1
Model name:                      AMD FX(tm)-6100 Six-Core Processor
Stepping:                        2
Frequency boost:                 enabled
CPU MHz:                         1400.000
CPU max MHz:                     4500.0000
CPU min MHz:                     1400.0000
BogoMIPS:                        9060.54
Virtualization:                  AMD-V
L1d cache:                       48 KiB
L1i cache:                       192 KiB
L2 cache:                        6 MiB
L3 cache:                        8 MiB
NUMA node0 CPU(s):               0-5
<...>
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_ts
                                 c rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm cmp_legacy svm extapic c
                                 r8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt fma4 nodeid_msr topoext perfctr_core perfctr_nb cpb hw_pstate ssbd ibpb vmmcall arat np
                                 t lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
uralets commented 2 years ago

So any news on this? Been more than a year now and it's not some minor bug the stuff doesn't even work on the most popular arch for Linux? Maybe make the repo public after all so more ppl could test this out? Presently we don't even know if it's widespread or what, I mean I could ask other ppl on a Linux amd64 to test this but wouldn't it be easier to make this public instead? Really looking forward to it working on Linux amd64

death-ncn commented 1 year ago

This should be a problem with your CPU (instruction set) and the feature set of the compiled binary. Had an invalid opcode triggered on a VM without AVX in x86-64 (amd64) mode. As AVX is listed as a flag this shouldn't be the culprit.

Searching for the needle in the haystack. One option could be: The engine.so of the current version (2023-08-08) is using the CPU opcode "vbroadcastss" from the AVX2 feature set. So AMD Bulldozer CPUs prior to the Excavator architecture (4th generation Bulldozer) are out of luck running Unreal in x86-64 mode. Your FX 6100 is 1st gen Bulldozer. Intel CPUs prior to Haswell (maybe some cut down Atoms/Pentiums) are also out.

uralets commented 1 year ago

Erm.. guess we should've closed this because we've long since figured it out.

AVX2 is indeed needed for the 64b binary and my old FX6100 lacked that.

Since it doesn't seem this will be worked on (circumventing the instruction dependency for the CPUs that lack it) I'm closing this.