Fix binary mismatch for MSVC plperl vs gcc built perl libs
authorAndrew Dunstan <andrew@dunslane.net>
Sun, 27 Nov 2022 14:03:22 +0000 (09:03 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Sun, 27 Nov 2022 14:03:22 +0000 (09:03 -0500)
When loading plperl built against Strawberry perl or the msys2 ucrt perl
that have been built with gcc, a binary mismatch has been encountered
which looks like this:

loadable library and perl binaries are mismatched (got handshake key 0000000012800080, needed 0000000012900080)

To cure this we bring the handshake keys into sync by adding
NO_THREAD_SAFE_LOCALE to the defines used to build plperl.

Discussion: https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
Discussion: https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.net

Backpatch to all live branches.

src/tools/msvc/Mkvcbuild.pm

index 83a3e404254cbfaeba2ee1ef06a14a8ddf8bc41d..7e52e9ad0ae83c639bdb7ffbea6e3161910eb416 100644 (file)
@@ -585,6 +585,9 @@ sub mkvcbuild
 
        # hack to prevent duplicate definitions of uid_t/gid_t
        push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
+       # prevent binary mismatch between MSVC built plperl and
+       # Strawberry or msys ucrt perl libraries
+       push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE');
 
        # Windows offers several 32-bit ABIs.  Perl is sensitive to
        # sizeof(time_t), one of the ABI dimensions.  To get 32-bit time_t,