From cabeea52a72a20a2c286cdae5598c191da7bb25e Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Sun, 10 Nov 2013 12:47:18 +0100 Subject: [PATCH] cygming-crtbegin.c (__gcc_register_frame): Increment load-count on use of LIBGCC_SONAME DLL. 2013-11-10 Kai Tietz * 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 --- libgcc/ChangeLog | 9 +++++++++ libgcc/config/i386/cygming-crtbegin.c | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 0bfba64..4f7d304 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,12 @@ +2013-11-10 Kai Tietz + + * 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 * 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 } -- 2.7.4