The new compile flags for 32bit Glibc-2.40 cause crashes when starting games in native Steam.
by iive from LinuxQuestions.org on (#6PWMM)
I hope Patrick sees this...
In short, "--march=i686" should be used to compile 32bit Glibc, instead of "pentium4".
It's also good idea to add "--enable-multi-arch" to the Glibc `configure`.
Enabling "--march=pentium4" enables SSE, but also assumes that the ABI is SSE compatible, aka that the stack is always aligned to 16 bytes. This however is NOT always true with legacy x86 code.
As result regular C code generates SSE instruction to store a value in the stack, causing unaligned memory access and segmentation fault.
In my case the crashes were happening when starting games in native Steam.
Specifically the crash happaned in the glibc-2.40/dlfcn/dlvsym.c:50:___dlvsym() after been called by 'gameoverlayrenderer.so' .
The first i686 CPU is Pentium Pro and it had no SSE.
Using that architecture does not introduce new assumptions and preserves full compatibility. The compiler however won't generate accelerated SIMD code.
To use faster SIMD code set the "--multi-arch" option. This enables the use of Glibc hand-written assembly based on CPUID results. It requires i686 as minimum, despite CPUID been available in earlier CPUs.
Everybody uses it.
In short, "--march=i686" should be used to compile 32bit Glibc, instead of "pentium4".
It's also good idea to add "--enable-multi-arch" to the Glibc `configure`.
Enabling "--march=pentium4" enables SSE, but also assumes that the ABI is SSE compatible, aka that the stack is always aligned to 16 bytes. This however is NOT always true with legacy x86 code.
As result regular C code generates SSE instruction to store a value in the stack, causing unaligned memory access and segmentation fault.
In my case the crashes were happening when starting games in native Steam.
Specifically the crash happaned in the glibc-2.40/dlfcn/dlvsym.c:50:___dlvsym() after been called by 'gameoverlayrenderer.so' .
The first i686 CPU is Pentium Pro and it had no SSE.
Using that architecture does not introduce new assumptions and preserves full compatibility. The compiler however won't generate accelerated SIMD code.
To use faster SIMD code set the "--multi-arch" option. This enables the use of Glibc hand-written assembly based on CPUID results. It requires i686 as minimum, despite CPUID been available in earlier CPUs.
Everybody uses it.