Not all 32-bit MSVC platforms use a leading underscore in symbol names in
object files. Only the old x86 ABI does:

$ dumpbin /exports 'C:\Program Files (x86)\Windows 
Kits\10\Lib\10.0.10240.0\ucrt\x86\ucrt.lib' | grep labs
                  _labs
                  _llabs

$ dumpbin /exports 'C:\Program Files (x86)\Windows 
Kits\10\Lib\10.0.10240.0\ucrt\x64\ucrt.lib' | grep labs
                  labs
                  llabs

$ dumpbin /exports 'C:\Program Files (x86)\Windows 
Kits\10\Lib\10.0.10240.0\ucrt\arm\ucrt.lib' | grep labs
                  labs
                  llabs

$ dumpbin /exports 'C:\Program Files (x86)\Windows 
Kits\10\Lib\10.0.10240.0\ucrt\arm64\ucrt.lib' | grep labs
                  labs
                  llabs

This patch fixes the 'at-init' module accordingly.


2026-10-19  Bruno Haible  <[email protected]>

        at-init: Fix for MSVC/arm.
        * lib/at-init.h (GL_MSVC_SYMBOL_PREFIX): Test _M_IX86, not _WIN64.

diff --git a/lib/at-init.h b/lib/at-init.h
index 13dd824ea8..acc6eaecff 100644
--- a/lib/at-init.h
+++ b/lib/at-init.h
@@ -72,10 +72,10 @@
 /* Avoid an error in the pragma below.  */
 # undef read
 
-# ifdef _WIN64
-#  define GL_MSVC_SYMBOL_PREFIX ""
-# else
+# ifdef _M_IX86 /* x86 */
 #  define GL_MSVC_SYMBOL_PREFIX "_"
+# else /* x86_64, arm, arm64 */
+#  define GL_MSVC_SYMBOL_PREFIX ""
 # endif
 
 # define AT_INIT(function) GL_MSVC_CTOR (function, GL_MSVC_SYMBOL_PREFIX)




Reply via email to