Merge branch 'js/mingw-gcc-stack-protect'
authorJunio C Hamano <gitster@pobox.com>
Thu, 11 Jul 2019 22:16:47 +0000 (15:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 11 Jul 2019 22:16:47 +0000 (15:16 -0700)
Windows update.

* js/mingw-gcc-stack-protect:
mingw: enable stack smashing protector

1  2 
config.mak.uname
diff --combined config.mak.uname
index 3fde48c64da61c6964ea5584aa5c27ec5dcbc389,2400e7879c4e2050fcc2a95091b77fbc4613928b..48a6723222dfb7c4cedb49d4523faa6c3003a803
@@@ -1,9 -1,5 +1,9 @@@
  # Platform specific Makefile tweaks based on uname detection
  
 +# Define NO_SAFESEH if you need MSVC/Visual Studio to ignore the lack of
 +# Microsoft's Safe Exception Handling in libraries (such as zlib).
 +# Typically required for VS2013+/32-bit compilation on Vista+ versions.
 +
  uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
  uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
  uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not')
@@@ -15,19 -11,6 +15,19 @@@ ifdef MSV
        # avoid the MingW and Cygwin configuration sections
        uname_S := Windows
        uname_O := Windows
 +
 +      # Generate and include makefile variables that point to the
 +      # currently installed set of MSVC command line tools.
 +compat/vcbuild/MSVC-DEFS-GEN: compat/vcbuild/find_vs_env.bat
 +      @"$<" | tr '\\' / >"$@"
 +include compat/vcbuild/MSVC-DEFS-GEN
 +
 +      # See if vcpkg and the vcpkg-build versions of the third-party
 +      # libraries that we use are installed.  We include the result
 +      # to get $(vcpkg_*) variables defined for the Makefile.
 +compat/vcbuild/VCPKG-DEFS: compat/vcbuild/vcpkg_install.bat
 +      @"$<"
 +include compat/vcbuild/VCPKG-DEFS
  endif
  
  # We choose to avoid "if .. else if .. else .. endif endif"
@@@ -373,19 -356,6 +373,19 @@@ endi
  ifeq ($(uname_S),Windows)
        GIT_VERSION := $(GIT_VERSION).MSVC
        pathsep = ;
 +      # Assume that this is built in Git for Windows' SDK
 +      ifeq (MINGW32,$(MSYSTEM))
 +              prefix = /mingw32
 +      else
 +              prefix = /mingw64
 +      endif
 +      # Prepend MSVC 64-bit tool-chain to PATH.
 +      #
 +      # A regular Git Bash *does not* have cl.exe in its $PATH. As there is a
 +      # link.exe next to, and required by, cl.exe, we have to prepend this
 +      # onto the existing $PATH.
 +      #
 +      SANE_TOOL_PATH ?= $(msvc_bin_dir_msys)
        HAVE_ALLOCA_H = YesPlease
        NO_PREAD = YesPlease
        NEEDS_CRYPTO_WITH_SSL = YesPlease
        NO_STRCASESTR = YesPlease
        NO_STRLCPY = YesPlease
        NO_MEMMEM = YesPlease
 -      # NEEDS_LIBICONV = YesPlease
 -      NO_ICONV = YesPlease
 +      NEEDS_LIBICONV = YesPlease
        NO_STRTOUMAX = YesPlease
        NO_MKDTEMP = YesPlease
 -      SNPRINTF_RETURNS_BOGUS = YesPlease
 +      NO_INTTYPES_H = YesPlease
 +      # VS2015 with UCRT claims that snprintf and friends are C99 compliant,
 +      # so we don't need this:
 +      #
 +      #   SNPRINTF_RETURNS_BOGUS = YesPlease
        NO_SVN_TESTS = YesPlease
        RUNTIME_PREFIX = YesPlease
        HAVE_WPGMPTR = YesWeDo
        NO_REGEX = YesPlease
        NO_GETTEXT = YesPlease
        NO_PYTHON = YesPlease
 -      BLK_SHA1 = YesPlease
        ETAGS_TARGET = ETAGS
        NO_POSIX_GOODIES = UnfortunatelyYes
        NATIVE_CRLF = YesPlease
        CC = compat/vcbuild/scripts/clink.pl
        AR = compat/vcbuild/scripts/lib.pl
        CFLAGS =
 -      BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
 +      BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
        COMPAT_OBJS = compat/msvc.o compat/winansi.o \
                compat/win32/path-utils.o \
                compat/win32/pthread.o compat/win32/syslog.o \
                compat/win32/trace2_win32_process_info.o \
                compat/win32/dirent.o
 -      COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
 -      BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE
 -      EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib invalidcontinue.obj
 +      COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
 +      BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
 +      # invalidcontinue.obj allows Git's source code to close the same file
 +      # handle twice, or to access the osfhandle of an already-closed stdout
 +      # See https://msdn.microsoft.com/en-us/library/ms235330.aspx
 +      EXTLIBS = user32.lib advapi32.lib shell32.lib wininet.lib ws2_32.lib invalidcontinue.obj kernel32.lib ntdll.lib
        PTHREAD_LIBS =
        lib =
 +      BASIC_CFLAGS += $(vcpkg_inc) $(sdk_includes) $(msvc_includes)
 +ifndef DEBUG
 +      BASIC_CFLAGS += $(vcpkg_rel_lib)
 +else
 +      BASIC_CFLAGS += $(vcpkg_dbg_lib)
 +endif
 +      BASIC_CFLAGS += $(sdk_libs) $(msvc_libs)
 +
 +ifneq ($(USE_MSVC_CRTDBG),)
 +      # Optionally enable memory leak reporting.
 +      BASIC_CFLAGS += -DUSE_MSVC_CRTDBG
 +endif
        BASIC_CFLAGS += -DPROTECT_NTFS_DEFAULT=1
 +      # Always give "-Zi" to the compiler and "-debug" to linker (even in
 +      # release mode) to force a PDB to be generated (like RelWithDebInfo).
 +      BASIC_CFLAGS += -Zi
 +      BASIC_LDFLAGS += -debug -Zf
 +
 +ifdef NO_SAFESEH
 +      LDFLAGS += -SAFESEH:NO
 +endif
 +
  ifndef DEBUG
 -      BASIC_CFLAGS += -GL -Os -MD
 -      BASIC_LDFLAGS += -LTCG
 +      BASIC_CFLAGS += -GL -Gy -O2 -Oy- -MD -DNDEBUG
 +      BASIC_LDFLAGS += -release -LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:CV,FIXUP
        AR += -LTCG
  else
 -      BASIC_CFLAGS += -Zi -MDd
 +      BASIC_CFLAGS += -MDd -DDEBUG -D_DEBUG
  endif
        X = .exe
 +
 +compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS
  endif
  ifeq ($(uname_S),Interix)
        NO_INITGROUPS = YesPlease
@@@ -606,7 -548,6 +606,7 @@@ ifneq (,$(findstring MINGW,$(uname_S))
        ETAGS_TARGET = ETAGS
        NO_POSIX_GOODIES = UnfortunatelyYes
        DEFAULT_HELP_FORMAT = html
 +      BASIC_LDFLAGS += -municode
        COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
        COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
        COMPAT_OBJS += compat/mingw.o compat/winansi.o \
@@@ -630,7 -571,7 +630,7 @@@ ifneq (,$(wildcard ../THIS_IS_MSYSGIT)
        INTERNAL_QSORT = YesPlease
        HAVE_LIBCHARSET_H = YesPlease
        NO_GETTEXT = YesPlease
 -      COMPAT_CLFAGS += -D__USE_MINGW_ACCESS
 +      COMPAT_CFLAGS += -D__USE_MINGW_ACCESS
  else
        ifneq ($(shell expr "$(uname_R)" : '1\.'),2)
                # MSys2
                        BASIC_LDFLAGS += -Wl,--large-address-aware
                endif
                CC = gcc
-               COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY
+               COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY \
+                       -fstack-protector-strong
                EXTLIBS += -lntdll
                INSTALL = /bin/install
                NO_R_TO_GCC_LINKER = YesPlease