aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAaron W. LaFramboise <aaronavay62@aaronwl.com>2008-08-31 12:14:25 -0600
committerAaron W. LaFramboise <aaronwl@gcc.gnu.org>2008-08-31 12:14:25 -0600
commitd89f0ad6225ed957153f92edf50f06890193c32f (patch)
tree349007eb9608d2d70057524bcd0d030010875820 /gcc
parent3e196fa9b9e3d7ce3b23e11f6517a6439506a2bc (diff)
downloadgcc-d89f0ad6225ed957153f92edf50f06890193c32f.zip
gcc-d89f0ad6225ed957153f92edf50f06890193c32f.tar.gz
gcc-d89f0ad6225ed957153f92edf50f06890193c32f.tar.bz2
configure.ac (RPATH_ENVVAR): Use PATH on Windows.
2008-08-31 Aaron W. LaFramboise <aaronavay62@aaronwl.com> <toplevel> * configure.ac (RPATH_ENVVAR): Use PATH on Windows. (GCC_SHLIB_SUBDIR): New. * Makefile.tpl (HOST_LIB_PATH_gcc): Use GCC_SHLIB_SUBDIR. * configure: Regenerate. * Makefile.in: Regenerate. <gcc> * mkmap-flat.awk: Add option pe_dll. * config/i386/t-cygming (SHLIB_LINK): Support building libgcc_s. * gcc/config/i386/t-cygwin (SHLIB_LC): Add. * gcc/config/i386/t-mingw32 (SHLIB_LC): Add. * config/i386/mingw32.h (SHARED_LIBGCC_UNDEFS_SPEC): New. (SUBTARGET_EXTRA_SPECS): Use SHARED_LIBGCC_UNDEFS_SPEC. (LINK_SPEC): Support libgcc_s. (LIBGCC_SPEC): Support libgcc_s. (LIBGCC_SONAME): New. <libstdc++-v3> * acinclude.m4 <enable_symvers>: Don't use symvers on Windows. * configure: Regenerated. * Makefile.in: Regenerated. * src/Makefile.in: Regenerated. * doc/makefile.in: Regenerated. * po/Makefile.in: Regenerated. * libmath/Makefile.in: Regenerated. * include/Makefile.in: Regenerated. * libsupc++/Makefile.in: Regenerated. * testsuite/makefile.in: Regenerated. From-SVN: r139837
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/i386/mingw32.h25
-rw-r--r--gcc/config/i386/t-cygming48
-rw-r--r--gcc/config/i386/t-cygwin2
-rw-r--r--gcc/config/i386/t-mingw323
-rw-r--r--gcc/mkmap-flat.awk14
6 files changed, 99 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c74589c..7b14a2c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2008-08-31 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
+
+ * mkmap-flat.awk: Add option pe_dll.
+ * config/i386/t-cygming (SHLIB_LINK): Support building libgcc_s.
+ * config/i386/t-cygwin (SHLIB_LC): Add.
+ * config/i386/t-mingw32 (SHLIB_LC): Add.
+ * config/i386/mingw32.h (SHARED_LIBGCC_UNDEFS_SPEC): New.
+ (SUBTARGET_EXTRA_SPECS): Use SHARED_LIBGCC_UNDEFS_SPEC.
+ (LINK_SPEC): Support libgcc_s.
+ (LIBGCC_SPEC): Support libgcc_s.
+ (LIBGCC_SONAME): New.
+
2008-08-31 Jan Hubicka <jh@suse.cz>
* predict.c (maybe_hot_bb_p, maybe_hot_edge_p): Previous commit
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index f5abe78..bb5fd7f 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -67,19 +67,33 @@ along with GCC; see the file COPYING3. If not see
#define LIB_SPEC "%{pg:-lgmon} %{mwindows:-lgdi32 -lcomdlg32} \
-luser32 -lkernel32 -ladvapi32 -lshell32"
-/* Include in the mingw32 libraries with libgcc */
-#undef LINK_SPEC
+/* Weak symbols do not get resolved if using a Windows dll import lib.
+ Make the unwind registration references strong undefs. */
+#if DWARF2_UNWIND_INFO
+#define SHARED_LIBGCC_UNDEFS_SPEC \
+ "%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}"
+#else
+#define SHARED_LIBGCC_UNDEFS_SPEC ""
+#endif
+
+#undef SUBTARGET_EXTRA_SPECS
+#define SUBTARGET_EXTRA_SPECS \
+ { "shared_libgcc_undefs", SHARED_LIBGCC_UNDEFS_SPEC }
+
#define LINK_SPEC "%{mwindows:--subsystem windows} \
%{mconsole:--subsystem console} \
%{shared: %{mdll: %eshared and mdll are not compatible}} \
%{shared: --shared} %{mdll:--dll} \
%{static:-Bstatic} %{!static:-Bdynamic} \
- %{shared|mdll: -e _DllMainCRTStartup@12}"
+ %{shared|mdll: -e _DllMainCRTStartup@12 --enable-auto-image-base} \
+ %(shared_libgcc_undefs)"
/* Include in the mingw32 libraries with libgcc */
#undef LIBGCC_SPEC
#define LIBGCC_SPEC \
- "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt"
+ "-lmingw32 \
+ %{shared-libgcc:-lgcc_s} -lgcc \
+ -lmoldname -lmingwex -lmsvcrt"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \
@@ -186,3 +200,6 @@ __enable_execute_stack (void *addr) \
#if !TARGET_64BIT
#define MD_UNWIND_SUPPORT "config/i386/w32-unwind.h"
#endif
+
+/* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygming. */
+#define LIBGCC_SONAME "libgcc_s_1.dll"
diff --git a/gcc/config/i386/t-cygming b/gcc/config/i386/t-cygming
index b2c50df..c6e6cac 100644
--- a/gcc/config/i386/t-cygming
+++ b/gcc/config/i386/t-cygming
@@ -36,3 +36,51 @@ msformat-c.o: $(srcdir)/config/i386/msformat-c.c $(CONFIG_H) $(SYSTEM_H) coretyp
$(srcdir)/config/i386/msformat-c.c
STMP_FIXINC=stmp-fixinc
+
+# Build a shared libgcc library for PECOFF with a DEF file
+# with the GNU linker.
+#
+# mkmap-flat.awk is used with the pe_dll option to produce a DEF instead
+# of an ELF map file.
+#
+# Warning: If SHLIB_SOVERSION or SHLIB_SONAME is updated, LIBGCC_SONAME
+# in mingw32.h must be updated also.
+
+SHLIB_EXT = .dll
+SHLIB_IMPLIB = @shlib_base_name@.a
+SHLIB_SOVERSION = 1
+SHLIB_SONAME = @shlib_base_name@_$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@/shlib
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+SHLIB_LC = -luser32 -lkernel32 -ladvapi32 -lshell32
+
+SHLIB_LINK = $(LN_S) $(SHLIB_MAP) $(SHLIB_MAP).def && \
+ if [ ! -d $(SHLIB_DIR) ]; then \
+ mkdir $(SHLIB_DIR) \
+ else true; fi && \
+ $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ $(SHLIB_MAP).def \
+ -Wl,--out-implib,$(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp \
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ $(SHLIB_OBJS) $(SHLIB_LC) && \
+ $(AR_FOR_TARGET) -r $(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp \
+ _chkstk.o _ctors.o gthr-win32.o && \
+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
+ else true; fi && \
+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
+ mv $(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp $(SHLIB_DIR)/$(SHLIB_IMPLIB)
+# $(slibdir) double quoted to protect it from expansion while building
+# libgcc.mk. We want this delayed until actual install time.
+SHLIB_INSTALL = \
+ $$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL_PROGRAM) $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $$(DESTDIR)$$(bindir)/$(SHLIB_SONAME); \
+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_IMPLIB) \
+ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_IMPLIB)
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+SHLIB_MKMAP_OPTS = -v pe_dll=1
+SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
diff --git a/gcc/config/i386/t-cygwin b/gcc/config/i386/t-cygwin
index c6e7773..3715c0b 100644
--- a/gcc/config/i386/t-cygwin
+++ b/gcc/config/i386/t-cygwin
@@ -14,3 +14,5 @@ cygwin2.o: $(srcdir)/config/i386/cygwin2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/i386/cygwin2.c
+# Cygwin-specific parts of LIB_SPEC
+SHLIB_LC += -lcygwin
diff --git a/gcc/config/i386/t-mingw32 b/gcc/config/i386/t-mingw32
index 6d043a3..79554e7 100644
--- a/gcc/config/i386/t-mingw32
+++ b/gcc/config/i386/t-mingw32
@@ -1,2 +1,5 @@
# Match SYSTEM_INCLUDE_DIR
NATIVE_SYSTEM_HEADER_DIR = /mingw/include
+
+# MinGW-specific parts of LIB_SPEC
+SHLIB_LC += -lmingw32 -lmingwex -lmoldname -lmsvcrt
diff --git a/gcc/mkmap-flat.awk b/gcc/mkmap-flat.awk
index 377731a..4a9a993 100644
--- a/gcc/mkmap-flat.awk
+++ b/gcc/mkmap-flat.awk
@@ -18,6 +18,11 @@
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
+# Options:
+# "-v leading_underscore=1" : Symbols in map need leading underscore.
+# "-v pe_dll=1" : Create .DEF file for Windows PECOFF
+# DLL link instead of map file.
+
BEGIN {
state = "nm";
excluding = 0;
@@ -86,7 +91,14 @@ $1 == "}" {
}
END {
+
+ if (pe_dll) {
+ # This matches SHLIB_SONAME in config/i386/t-cygming.
+ print "LIBRARY libgcc_s_1.dll";
+ print "EXPORTS";
+ }
+
for (sym in export)
- if (def[sym])
+ if (def[sym] || (pe_dll && def["_" sym]))
print sym;
}