[PATCH] msvcrt: Don't include MSVC 8.0+ C++ functions in SOs for older DLLs

Alex Henrie alexhenrie24 at gmail.com
Wed Jan 3 22:32:58 CST 2018


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 dlls/msvcrt/cpp.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c
index 2e17f62b43..07cde75c98 100644
--- a/dlls/msvcrt/cpp.c
+++ b/dlls/msvcrt/cpp.c
@@ -650,6 +650,7 @@ void * __thiscall MSVCRT_type_info_vector_dtor(type_info * _this, unsigned int f
 }
 
 #if _MSVCR_VER >= 80
+
 typedef exception bad_alloc;
 extern const vtable_ptr MSVCRT_bad_alloc_vtable;
 
@@ -675,9 +676,11 @@ void __thiscall MSVCRT_bad_alloc_dtor(bad_alloc * _this)
     TRACE("(%p)\n", _this);
     MSVCRT_exception_dtor(_this);
 }
-#endif
+
+#endif /* _MSVCR_VER >= 80 */
 
 #if _MSVCR_VER >= 100
+
 typedef struct {
     exception e;
     HRESULT hr;
@@ -985,7 +988,8 @@ void __thiscall MSVCRT_improper_scheduler_detach_dtor(
     TRACE("(%p)\n", _this);
     MSVCRT_exception_dtor(_this);
 }
-#endif
+
+#endif /* _MSVCR_VER >= 100 */
 
 #ifndef __GNUC__
 void __asm_dummy_vtables(void) {
@@ -1583,6 +1587,8 @@ void WINAPI _CxxThrowException( exception *object, const cxx_exception_type *typ
 }
 #endif
 
+#if _MSVCR_VER >= 80
+
 /*********************************************************************
  * ?_is_exception_typeof@@YAHABVtype_info@@PAU_EXCEPTION_POINTERS@@@Z
  * ?_is_exception_typeof@@YAHAEBVtype_info@@PEAU_EXCEPTION_POINTERS@@@Z
@@ -1669,7 +1675,7 @@ int __cdecl _is_exception_typeof(const type_info *ti, EXCEPTION_POINTERS *ep)
 #endif
 
 /*********************************************************************
- * __clean_type_info_names_internal (MSVCR100.@)
+ * __clean_type_info_names_internal (MSVCR80.@)
  */
 void CDECL __clean_type_info_names_internal(void *p)
 {
@@ -1688,6 +1694,8 @@ const char * __thiscall type_info_name_internal_method(type_info * _this, struct
     return MSVCRT_type_info_name(_this);
 }
 
+#endif /* _MSVCR_VER >= 80 */
+
 /* std::exception_ptr class helpers */
 typedef struct
 {
@@ -1695,6 +1703,8 @@ typedef struct
     int *ref; /* not binary compatible with native msvcr100 */
 } exception_ptr;
 
+#if _MSVCR_VER >= 100
+
 /*********************************************************************
  * ?__ExceptionPtrCreate@@YAXPAX at Z
  * ?__ExceptionPtrCreate@@YAXPEAX at Z
@@ -1781,6 +1791,8 @@ void __cdecl __ExceptionPtrAssign(exception_ptr *ep, const exception_ptr *assign
         InterlockedIncrement(ep->ref);
 }
 
+#endif /* _MSVCR_VER >= 100 */
+
 /*********************************************************************
  * ?__ExceptionPtrRethrow@@YAXPBX at Z
  * ?__ExceptionPtrRethrow@@YAXPEBX at Z
@@ -1803,6 +1815,8 @@ void __cdecl __ExceptionPtrRethrow(const exception_ptr *ep)
             ep->rec->NumberParameters, ep->rec->ExceptionInformation);
 }
 
+#if _MSVCR_VER >= 100
+
 #ifdef __i386__
 static inline void call_copy_ctor( void *func, void *this, void *src, int has_vbase )
 {
@@ -1925,6 +1939,9 @@ void __cdecl __ExceptionPtrCurrentException(exception_ptr *ep)
 }
 #endif
 
+#endif /* _MSVCR_VER >= 100 */
+
+#if _MSVCR_VER >= 110
 /*********************************************************************
  * ?__ExceptionPtrToBool@@YA_NPBX at Z
  * ?__ExceptionPtrToBool@@YA_NPEBX at Z
@@ -1933,6 +1950,9 @@ MSVCRT_bool __cdecl __ExceptionPtrToBool(exception_ptr *ep)
 {
     return !!ep->rec;
 }
+#endif
+
+#if _MSVCR_VER >= 100
 
 /*********************************************************************
  * ?__ExceptionPtrCopyException@@YAXPAXPBX1 at Z
@@ -2020,12 +2040,17 @@ MSVCRT_bool __cdecl __ExceptionPtrCompare(const exception_ptr *ep1, const except
     return ep1->rec == ep2->rec;
 }
 
+#endif /* _MSVCR_VER >= 100 */
+
+#if _MSVCR_VER >= 80
 void* __cdecl __AdjustPointer(void *obj, const this_ptr_offsets *off)
 {
     return get_this_pointer(off, obj);
 }
+#endif
 
 #if _MSVCR_VER >= 140
+
 typedef struct
 {
     char *name;
@@ -2139,9 +2164,11 @@ MSVCRT_size_t CDECL MSVCRT_type_info_hash(const type_info140 *ti)
 
     return hash;
 }
-#endif
+
+#endif /* _MSVCR_VER >= 140 */
 
 #if _MSVCR_VER >= 100
+
 enum ConcRT_EventType
 {
     CONCRT_EVENT_GENERIC,
@@ -2160,4 +2187,5 @@ void __cdecl Concurrency__Trace_ppl_function(const GUID *guid, unsigned char lev
 {
     FIXME("(%s %u %i) stub\n", debugstr_guid(guid), level, type);
 }
-#endif
+
+#endif /* _MSVCR_VER >= 100 */
-- 
2.15.1




More information about the wine-devel mailing list