From 013ba6aaa130e1135b58970764df44fc4f4f47ae Mon Sep 17 00:00:00 2001 From: Torge Matthies Date: Fri, 15 Jul 2022 21:52:01 +0200 Subject: [PATCH] msvcr100: Implement invalid_multiple_scheduling exception. Signed-off-by: Torge Matthies --- dlls/concrt140/concrt140.spec | 12 ++++----- dlls/msvcr100/msvcr100.spec | 8 +++--- dlls/msvcr110/msvcr110.spec | 12 ++++----- dlls/msvcr120/msvcr120.spec | 12 ++++----- dlls/msvcr120_app/msvcr120_app.spec | 12 ++++----- dlls/msvcrt/concurrency.c | 38 +++++++++++++++++++++++++++++ 6 files changed, 66 insertions(+), 28 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 9370566bb2c..64da684f415 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -144,12 +144,12 @@ @ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 0d38005c13a..c0bbbc5b86d 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -94,10 +94,10 @@ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ thiscall -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=win32 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_operation@Concurrency@@QAE@XZ diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 24e7630194c..a272ae98a1c 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -167,12 +167,12 @@ @ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b1258dad5de..d16316e7e05 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -164,12 +164,12 @@ @ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 93ce779ea69..aa5d8ccf968 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -162,12 +162,12 @@ @ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAA@XZ +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAE@XZ +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index e57aef34d2b..d0c9924c631 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -329,6 +329,9 @@ extern const vtable_ptr improper_scheduler_attach_vtable; typedef exception improper_scheduler_detach; extern const vtable_ptr improper_scheduler_detach_vtable; +typedef exception invalid_multiple_scheduling; +extern const vtable_ptr invalid_multiple_scheduling_vtable; + typedef exception invalid_scheduler_policy_key; extern const vtable_ptr invalid_scheduler_policy_key_vtable; @@ -451,6 +454,35 @@ improper_scheduler_detach * __thiscall improper_scheduler_detach_copy_ctor( return __exception_copy_ctor(_this, rhs, &improper_scheduler_detach_vtable); } +/* ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z */ +/* ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z */ +/* ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z */ +DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_ctor_str, 8) +invalid_multiple_scheduling* __thiscall invalid_multiple_scheduling_ctor_str( + invalid_multiple_scheduling *this, const char *str) +{ + TRACE("(%p %s)\n", this, str); + return __exception_ctor(this, str, &invalid_multiple_scheduling_vtable); +} + +/* ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ */ +/* ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ */ +/* ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_ctor, 4) +invalid_multiple_scheduling* __thiscall invalid_multiple_scheduling_ctor( + invalid_multiple_scheduling *this) +{ + return invalid_multiple_scheduling_ctor_str(this, NULL); +} + +DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_copy_ctor,8) +invalid_multiple_scheduling * __thiscall invalid_multiple_scheduling_copy_ctor( + invalid_multiple_scheduling * _this, const invalid_multiple_scheduling * rhs) +{ + TRACE("(%p %p)\n", _this, rhs); + return __exception_copy_ctor(_this, rhs, &invalid_multiple_scheduling_vtable); +} + /* ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z */ /* ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z */ DEFINE_THISCALL_WRAPPER(invalid_scheduler_policy_key_ctor_str, 8) @@ -583,6 +615,8 @@ DEFINE_RTTI_DATA1(improper_scheduler_attach, 0, &cexception_rtti_base_descriptor ".?AVimproper_scheduler_attach@Concurrency@@") DEFINE_RTTI_DATA1(improper_scheduler_detach, 0, &cexception_rtti_base_descriptor, ".?AVimproper_scheduler_detach@Concurrency@@") +DEFINE_RTTI_DATA1(invalid_multiple_scheduling, 0, &cexception_rtti_base_descriptor, + ".?AVinvalid_multiple_scheduling@Concurrency@@") DEFINE_RTTI_DATA1(invalid_scheduler_policy_key, 0, &cexception_rtti_base_descriptor, ".?AVinvalid_scheduler_policy_key@Concurrency@@") DEFINE_RTTI_DATA1(invalid_scheduler_policy_thread_specification, 0, &cexception_rtti_base_descriptor, @@ -610,6 +644,9 @@ __ASM_BLOCK_BEGIN(concurrency_exception_vtables) __ASM_VTABLE(improper_scheduler_detach, VTABLE_ADD_FUNC(cexception_vector_dtor) VTABLE_ADD_FUNC(cexception_what)); + __ASM_VTABLE(invalid_multiple_scheduling, + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what)); __ASM_VTABLE(invalid_scheduler_policy_key, VTABLE_ADD_FUNC(cexception_vector_dtor) VTABLE_ADD_FUNC(cexception_what)); @@ -3042,6 +3079,7 @@ void msvcrt_init_concurrency(void *base) init_improper_lock_rtti(base); init_improper_scheduler_attach_rtti(base); init_improper_scheduler_detach_rtti(base); + init_invalid_multiple_scheduling_rtti(base); init_invalid_scheduler_policy_key_rtti(base); init_invalid_scheduler_policy_thread_specification_rtti(base); init_invalid_scheduler_policy_value_rtti(base);