Commit 284590e4 authored by Noah Misch's avatar Noah Misch

MinGW: Use -static-libgcc when linking a DLL.

When commit 846e91e0 switched the linker
driver from dlltool/dllwrap to gcc, it became possible for linking to
choose shared libgcc.  Backends having loaded a module dynamically
linked to libgcc can exit abnormally, which the postmaster treats like a
crash.  Resume use of static libgcc exclusively, like 9.3 and earlier.
Back-patch to 9.4.
parent 53566fc0
...@@ -371,16 +371,22 @@ else ...@@ -371,16 +371,22 @@ else
$(stlib): $(shlib) ; $(stlib): $(shlib) ;
# XXX A backend that loads a module linked with libgcc_s_dw2-1.dll will exit
# uncleanly, hence -static-libgcc. (Last verified with MinGW-w64 compilers
# from i686-4.9.1-release-win32-dwarf-rt_v3-rev1.) Shared libgcc has better
# support for C++/Java exceptions; while core PostgreSQL does not use them, it
# would be nice to support shared libgcc for the benefit of extensions.
#
# If SHLIB_EXPORTS is set, the rules below will build a .def file from that. # If SHLIB_EXPORTS is set, the rules below will build a .def file from that.
# Else we just use --export-all-symbols. # Else we just use --export-all-symbols.
ifeq (,$(SHLIB_EXPORTS)) ifeq (,$(SHLIB_EXPORTS))
$(shlib): $(OBJS) | $(SHLIB_PREREQS) $(shlib): $(OBJS) | $(SHLIB_PREREQS)
$(CC) $(CFLAGS) -shared -o $@ $(OBJS) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK) $(LIBS) -Wl,--export-all-symbols -Wl,--out-implib=$(stlib) $(CC) $(CFLAGS) -shared -static-libgcc -o $@ $(OBJS) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK) $(LIBS) -Wl,--export-all-symbols -Wl,--out-implib=$(stlib)
else else
DLL_DEFFILE = lib$(NAME)dll.def DLL_DEFFILE = lib$(NAME)dll.def
$(shlib): $(OBJS) $(DLL_DEFFILE) | $(SHLIB_PREREQS) $(shlib): $(OBJS) $(DLL_DEFFILE) | $(SHLIB_PREREQS)
$(CC) $(CFLAGS) -shared -o $@ $(OBJS) $(DLL_DEFFILE) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK) $(LIBS) -Wl,--out-implib=$(stlib) $(CC) $(CFLAGS) -shared -static-libgcc -o $@ $(OBJS) $(DLL_DEFFILE) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK) $(LIBS) -Wl,--out-implib=$(stlib)
endif endif
endif # PORTNAME == cgywin endif # PORTNAME == cgywin
......
...@@ -76,4 +76,4 @@ win32ver.o: win32ver.rc ...@@ -76,4 +76,4 @@ win32ver.o: win32ver.rc
# Rule for building a shared library from a single .o file # Rule for building a shared library from a single .o file
%.dll: %.o $(WIN32RES) %.dll: %.o $(WIN32RES)
$(CC) $(CFLAGS) -shared -o $@ $^ -Wl,--export-all-symbols $(LDFLAGS) $(LDFLAGS_SL) $(BE_DLLLIBS) $(CC) $(CFLAGS) -shared -static-libgcc -o $@ $^ -Wl,--export-all-symbols $(LDFLAGS) $(LDFLAGS_SL) $(BE_DLLLIBS)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment