Fix binary mismatch for MSVC plperl vs gcc built perl libs
authorAndrew Dunstan
Sun, 27 Nov 2022 14:03:22 +0000 (09:03 -0500)
committerAndrew Dunstan
Sun, 27 Nov 2022 14:18:20 +0000 (09:18 -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[email protected]
Discussion: https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.net

Backpatch to all live branches.

src/tools/msvc/Mkvcbuild.pm

index 05ff67e693b7fbd50ad1eb1e6af4d6f082abcbfc..9b6539fb15df9697ef0bd326bc9b0d90c0e38af2 100644 (file)
@@ -587,6 +587,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,