Subject: bug#37852: Build failure on MSYS2 (undefined reference to _chk functions)

From: Richard Copley <[email-masked]>
Date: Mon, 21 Oct 2019 13:28:29 +0100

Linking auxiliary executables fails with undefined references to
(FORTIFY_SOURCE?) functions  __memcpy_chk and __memmove_chk. This is
apparently caused by some change in MSYS2, because previously buildable
commits now fail. Transcript below.

+ make V=1 -k
make -C nt all
make[1]: Entering directory '/c/projects/emacs/nt'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/c/projects/emacs/nt'
make -C lib all
make[1]: Entering directory '/c/projects/emacs/lib'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/c/projects/emacs/lib'
make -C lib-src all
make[1]: Entering directory '/c/projects/emacs/lib-src'
gcc  -mtune=generic  -fno-common -W[...]  -I. -I../src -I../lib -I.
-I./../src -I./../lib   -mtune=generic   -DUSE_CRT_DLL=1 -I
/c/projects/emacs/nt/inc -O2 emacsclient.c \
   ntlib.o ../lib/libgnu.a  \
   -lwsock32  -lcomctl32 -o emacsclient.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
C:\Users\buster\AppData\Local\Temp\ccVJXdYZ.o:emacsclient.c:(.text+0xb4d):
undefined reference to `__memmove_chk'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [Makefile:395: emacsclient.exe] Error 1
gcc  -mtune=generic  -fno-common -W[...]  -I. -I../src -I../lib -I.
-I./../src -I./../lib   -mtune=generic   -DUSE_CRT_DLL=1 -I
/c/projects/emacs/nt/inc -O2 emacsclient.res -mwindows emacsclient.c \
   ../lib/libgnu.a  \
   -lwsock32  -lcomctl32 -o emacsclientw.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
C:\Users\buster\AppData\Local\Temp\ccSZs6xf.o:emacsclient.c:(.text+0xb4d):
undefined reference to `__memmove_chk'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [Makefile:400: emacsclientw.exe] Error 1
gcc  -mtune=generic  -fno-common -W[...]  -I. -I../src -I../lib -I.
-I./../src -I./../lib   -mtune=generic   -DUSE_CRT_DLL=1 -I
/c/projects/emacs/nt/inc -O2 make-docfile.c ntlib.o ../lib/libgnu.a  -o
make-docfile.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
C:\Users\buster\AppData\Local\Temp\ccHhbMkg.o:make-docfile.c:(.text+0x166a):
undefined reference to `__memcpy_chk'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [Makefile:382: make-docfile.exe] Error 1
make[1]: Target 'all' not remade because of errors.
make[1]: Leaving directory '/c/projects/emacs/lib-src'
make: *** [Makefile:411: lib-src] Error 2
make info-real info-dir
make[1]: Entering directory '/c/projects/emacs'
make -C doc/lispref info
make[2]: Entering directory '/c/projects/emacs/doc/lispref'
make[2]: Nothing to be done for 'info'.
make[2]: Leaving directory '/c/projects/emacs/doc/lispref'
make -C doc/lispintro info
make[2]: Entering directory '/c/projects/emacs/doc/lispintro'
make[2]: Nothing to be done for 'info'.
make[2]: Leaving directory '/c/projects/emacs/doc/lispintro'
make -C doc/emacs info
make[2]: Entering directory '/c/projects/emacs/doc/emacs'
make[2]: Nothing to be done for 'info'.
make[2]: Leaving directory '/c/projects/emacs/doc/emacs'
make -C doc/misc info
make[2]: Entering directory '/c/projects/emacs/doc/misc'
make[2]: Nothing to be done for 'info'.
make[2]: Leaving directory '/c/projects/emacs/doc/misc'
make[1]: Nothing to be done for 'info-dir'.
make[1]: Leaving directory '/c/projects/emacs'
make: Target 'all' not remade because of errors.