[PATCH 2/2] msvcp140_1: Implement the DLL.

Piotr Caban piotr at codeweavers.com
Tue Apr 6 06:11:15 CDT 2021


Hi Arek,

I'm attaching a patch generated on top of the patches you have sent to 
wine that adds DEFINE_RTTI_BASE helper and uses it in msvcp140_1. It 
also removes unused vtable definition.

Thanks,
Piotr
-------------- next part --------------
From 883ee2bc0572ff48a69a812c1632e5e72679d3fb Mon Sep 17 00:00:00 2001
From: Piotr Caban <piotr at codeweavers.com>
Date: Tue, 6 Apr 2021 13:01:24 +0200
Subject: [PATCH] rtti_cleanup
To: wine-devel <wine-devel at winehq.org>

---
 dlls/msvcp140_1/msvcp140_1.c | 22 +++++++++++++---------
 dlls/msvcp90/cxx.h           | 22 ++++++++++++++++++----
 2 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/dlls/msvcp140_1/msvcp140_1.c b/dlls/msvcp140_1/msvcp140_1.c
index 344fee3dc53..968fd66cef0 100644
--- a/dlls/msvcp140_1/msvcp140_1.c
+++ b/dlls/msvcp140_1/msvcp140_1.c
@@ -103,8 +103,6 @@ extern const vtable_ptr MSVCP_unaligned_resource_vtable;
 extern const vtable_ptr MSVCP_null_resource_vtable;
 
 __ASM_BLOCK_BEGIN(vtables)
-    __ASM_VTABLE(base_memory_resource,
-            VTABLE_ADD_FUNC(nop_dtor));
     __ASM_VTABLE(aligned_resource,
             VTABLE_ADD_FUNC(nop_dtor)
             VTABLE_ADD_FUNC(aligned_do_allocate)
@@ -122,10 +120,15 @@ __ASM_BLOCK_BEGIN(vtables)
             VTABLE_ADD_FUNC(do_is_equal));
 __ASM_BLOCK_END
 
-DEFINE_RTTI_DATA0(base_memory_resource, 0, ".?AVmemory_resource at pmr@std@@")
-DEFINE_RTTI_DATA1(aligned_resource, 0, &base_memory_resource_rtti_base_descriptor, ".?AV_Aligned_new_delete_resource at pmr@std@@")
-DEFINE_RTTI_DATA1(unaligned_resource, 0, &base_memory_resource_rtti_base_descriptor, ".?AV_Unligned_new_delete_resource at pmr@std@@")
-DEFINE_RTTI_DATA1(null_resource, 0, &base_memory_resource_rtti_base_descriptor, ".?AV_null_resource at pmr@std@@")
+DEFINE_RTTI_BASE(base_memory_resource, 0, ".?AVmemory_resource at pmr@std@@")
+DEFINE_RTTI_BASE(_Identity_equal_resource, 0, ".?AV_Identity_equal_resource at pmr@std@@")
+DEFINE_RTTI_DATA2(aligned_resource, 0, &_Identity_equal_resource_rtti_base_descriptor,
+        &base_memory_resource_rtti_base_descriptor, ".?AV_Aligned_new_delete_resource_impl at pmr@std@@")
+DEFINE_RTTI_DATA2(unaligned_resource, 0, &_Identity_equal_resource_rtti_base_descriptor,
+        &base_memory_resource_rtti_base_descriptor, ".?AV_Unaligned_new_delete_resource_impl at pmr@std@@")
+DEFINE_RTTI_DATA2(null_resource, 0, &_Identity_equal_resource_rtti_base_descriptor,
+        &base_memory_resource_rtti_base_descriptor,
+        ".?AV_Null_resource@?1??null_memory_resource@@YAPAVmemory_resource at pmr@std@@XZ")
 
 DEFINE_THISCALL_WRAPPER(nop_dtor, 4)
 void __thiscall nop_dtor(void *this)
@@ -242,10 +245,11 @@ static void init_cxx_funcs(void)
 static void init_memory_resource(void *base)
 {
 #ifdef __x86_64__
-       init_null_resource_rtti(base);
-       init_unaligned_resource_rtti(base);
-       init_aligned_resource_rtti(base);
        init_base_memory_resource_rtti(base);
+       init__Identity_equal_resource_rtti(base);
+       init_aligned_resource_rtti(base);
+       init_unaligned_resource_rtti(base);
+       init_null_resource_rtti(base);
 #endif
 }
 
diff --git a/dlls/msvcp90/cxx.h b/dlls/msvcp90/cxx.h
index 7af11de7fe6..931bf753660 100644
--- a/dlls/msvcp90/cxx.h
+++ b/dlls/msvcp90/cxx.h
@@ -46,7 +46,7 @@
 
 #ifndef __x86_64__
 
-#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+#define DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
     static type_info name ## _type_info = { \
         &MSVCP_type_info_vtable, \
         NULL, \
@@ -58,7 +58,10 @@ static const rtti_base_descriptor name ## _rtti_base_descriptor = { \
     base_classes_no, \
     { 0, -1, 0}, \
     64 \
-}; \
+};
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+    DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
 \
 static const rtti_base_array name ## _rtti_base_array = { \
     { \
@@ -122,7 +125,7 @@ static const cxx_exception_type type ## _cxx_type = { \
 
 #else
 
-#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+#define __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
     static type_info name ## _type_info = { \
         &MSVCP_type_info_vtable, \
         NULL, \
@@ -134,7 +137,18 @@ static rtti_base_descriptor name ## _rtti_base_descriptor = { \
     base_classes_no, \
     { 0, -1, 0}, \
     64 \
-}; \
+};
+
+#define DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
+    __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
+    \
+    static void init_ ## name ## _rtti(char *base) \
+    { \
+        name ## _rtti_base_descriptor.type_descriptor = (char*)&name ## _type_info - base; \
+    }
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+    __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
 \
 static rtti_base_array name ## _rtti_base_array = { \
     { \
-- 
2.26.3



More information about the wine-devel mailing list