aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <ktietz@redhat.com>2013-11-10 12:47:18 +0100
committerKai Tietz <ktietz@gcc.gnu.org>2013-11-10 12:47:18 +0100
commitcabeea52a72a20a2c286cdae5598c191da7bb25e (patch)
treea54baa5ade29c6e9e4f3b9065b74451eaca5e482
parent6fbf987777752819895fc9083c5e3c1f4781399d (diff)
downloadgcc-cabeea52a72a20a2c286cdae5598c191da7bb25e.zip
gcc-cabeea52a72a20a2c286cdae5598c191da7bb25e.tar.gz
gcc-cabeea52a72a20a2c286cdae5598c191da7bb25e.tar.bz2
cygming-crtbegin.c (__gcc_register_frame): Increment load-count on use of LIBGCC_SONAME DLL.
2013-11-10 Kai Tietz <ktietz@redhat.com> * config/i386/cygming-crtbegin.c (__gcc_register_frame): Increment load-count on use of LIBGCC_SONAME DLL. (hmod_libgcc): New static variable to hold handle of LIBGCC_SONAME DLL. (__gcc_deregister_frame): Decrement load-count of LIBGCC_SONAME DLL. From-SVN: r204635
-rw-r--r--libgcc/ChangeLog9
-rw-r--r--libgcc/config/i386/cygming-crtbegin.c14
2 files changed, 21 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 0bfba640..4f7d304 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,12 @@
+2013-11-10 Kai Tietz <ktietz@redhat.com>
+
+ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
+ Increment load-count on use of LIBGCC_SONAME DLL.
+ (hmod_libgcc): New static variable to hold handle of
+ LIBGCC_SONAME DLL.
+ (__gcc_deregister_frame): Decrement load-count of
+ LIBGCC_SONAME DLL.
+
2013-11-08 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
* configure.ac (libgcc_cv_dfp): Extend check to probe fenv.h
diff --git a/libgcc/config/i386/cygming-crtbegin.c b/libgcc/config/i386/cygming-crtbegin.c
index c341787..53909d2 100644
--- a/libgcc/config/i386/cygming-crtbegin.c
+++ b/libgcc/config/i386/cygming-crtbegin.c
@@ -91,6 +91,9 @@ static EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[]
= { };
static struct object obj;
+
+/* Handle of libgcc's DLL reference. */
+HANDLE hmod_libgcc;
#endif
#if TARGET_USE_JCR_SECTION
@@ -115,9 +118,14 @@ __gcc_register_frame (void)
void (*register_frame_fn) (const void *, struct object *);
HANDLE h = GetModuleHandle (LIBGCC_SONAME);
+
if (h)
- register_frame_fn = (void (*) (const void *, struct object *))
- GetProcAddress (h, "__register_frame_info");
+ {
+ /* Increasing the load-count of LIBGCC_SONAME DLL. */
+ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
+ register_frame_fn = (void (*) (const void *, struct object *))
+ GetProcAddress (h, "__register_frame_info");
+ }
else
register_frame_fn = __register_frame_info;
if (register_frame_fn)
@@ -154,5 +162,7 @@ __gcc_deregister_frame (void)
deregister_frame_fn = __deregister_frame_info;
if (deregister_frame_fn)
deregister_frame_fn (__EH_FRAME_BEGIN__);
+ if (hmod_libgcc)
+ FreeLibrary (hmod_libgcc);
#endif
}