diff --git a/dll/win32/msvcrt/amd64/concurrency_vtables.s b/dll/win32/msvcrt/amd64/concurrency_vtables.s new file mode 100644 index 00000000000..37ac829e892 --- /dev/null +++ b/dll/win32/msvcrt/amd64/concurrency_vtables.s @@ -0,0 +1,115 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x64 C++ V-tables for concurrency.c + * COPYRIGHT: Copyright 2014-2024 Wine team + * Copyright 2025 Timo Kreuzer + */ + +#include + +// See msvcrt/concurrency.c + +.const + +MACRO(START_VTABLE, shortname, cxxname) +EXTERN shortname&_rtti:PROC + .quad shortname&_rtti +PUBLIC &shortname&_vtable +&shortname&_vtable: +PUBLIC &cxxname +&cxxname: +ENDM + +MACRO(VTABLE_ADD_FUNC_MACRO, name) + EXTERN &name:PROC + .quad &name +ENDM +#define VTABLE_ADD_FUNC(x) VTABLE_ADD_FUNC_MACRO x + +START_VTABLE cexception, __dummyname_cexception + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE improper_lock, __dummyname_improper_lock + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE improper_scheduler_attach, __dummyname_improper_scheduler_attach + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE improper_scheduler_detach, __dummyname_improper_scheduler_detach + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE invalid_multiple_scheduling, __dummyname_invalid_multiple_scheduling + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE invalid_scheduler_policy_key, __dummyname_invalid_scheduler_policy_key + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE invalid_scheduler_policy_thread_specification, __dummyname_invalid_scheduler_policy_thread_specification + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE invalid_scheduler_policy_value, __dummyname_invalid_scheduler_policy_value + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE missing_wait, __dummyname_missing_wait + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + +START_VTABLE scheduler_resource_allocation_error, __dummyname_scheduler_resource_allocation_error + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what) + + +START_VTABLE ExternalContextBase, __dummyname_ExternalContextBase + VTABLE_ADD_FUNC(ExternalContextBase_GetId) + VTABLE_ADD_FUNC(ExternalContextBase_GetVirtualProcessorId) + VTABLE_ADD_FUNC(ExternalContextBase_GetScheduleGroupId) + VTABLE_ADD_FUNC(ExternalContextBase_Unblock) + VTABLE_ADD_FUNC(ExternalContextBase_IsSynchronouslyBlocked) + VTABLE_ADD_FUNC(ExternalContextBase_vector_dtor) + VTABLE_ADD_FUNC(ExternalContextBase_Block) + VTABLE_ADD_FUNC(ExternalContextBase_Yield) + VTABLE_ADD_FUNC(ExternalContextBase_SpinYield) + VTABLE_ADD_FUNC(ExternalContextBase_Oversubscribe) + VTABLE_ADD_FUNC(ExternalContextBase_Alloc) + VTABLE_ADD_FUNC(ExternalContextBase_Free) + VTABLE_ADD_FUNC(ExternalContextBase_EnterCriticalRegionHelper) + VTABLE_ADD_FUNC(ExternalContextBase_EnterHyperCriticalRegionHelper) + VTABLE_ADD_FUNC(ExternalContextBase_ExitCriticalRegionHelper) + VTABLE_ADD_FUNC(ExternalContextBase_ExitHyperCriticalRegionHelper) + VTABLE_ADD_FUNC(ExternalContextBase_GetCriticalRegionType) + VTABLE_ADD_FUNC(ExternalContextBase_GetContextKind) + +START_VTABLE ThreadScheduler, __dummyname_ThreadScheduler + VTABLE_ADD_FUNC(ThreadScheduler_vector_dtor) + VTABLE_ADD_FUNC(ThreadScheduler_Id) + VTABLE_ADD_FUNC(ThreadScheduler_GetNumberOfVirtualProcessors) + VTABLE_ADD_FUNC(ThreadScheduler_GetPolicy) + VTABLE_ADD_FUNC(ThreadScheduler_Reference) + VTABLE_ADD_FUNC(ThreadScheduler_Release) + VTABLE_ADD_FUNC(ThreadScheduler_RegisterShutdownEvent) + VTABLE_ADD_FUNC(ThreadScheduler_Attach) +#if _MSVCR_VER > 100 + VTABLE_ADD_FUNC(ThreadScheduler_CreateScheduleGroup_loc) +#endif + VTABLE_ADD_FUNC(ThreadScheduler_CreateScheduleGroup) +#if _MSVCR_VER > 100 + VTABLE_ADD_FUNC(ThreadScheduler_ScheduleTask_loc) +#endif + VTABLE_ADD_FUNC(ThreadScheduler_ScheduleTask) +#if _MSVCR_VER > 100 + VTABLE_ADD_FUNC(ThreadScheduler_IsAvailableLocation) +#endif + +START_VTABLE _Timer, __dummyname__Timer + VTABLE_ADD_FUNC(_Timer_vector_dtor) + +END diff --git a/dll/win32/msvcrt/amd64/cpp_alias.s b/dll/win32/msvcrt/amd64/cpp_alias.s new file mode 100644 index 00000000000..69e6be7cf9d --- /dev/null +++ b/dll/win32/msvcrt/amd64/cpp_alias.s @@ -0,0 +1,71 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x64 C++ MSVC aliases for cpp.c + * COPYRIGHT: Copyright 2014-2024 Wine team + * Copyright 2025 Timo Kreuzer + */ + +#include + +// See msvcrt/cpp.c + +.code64 + +MACRO(DEFINE_ALIAS, alias, orig) +EXTERN &orig:ABS +ALIAS <&alias> = <&orig> +ENDM + +DEFINE_ALIAS ??3@YAXPEAX@Z, operator_delete +DEFINE_ALIAS ??_U@YAPEAX_K@Z, operator_new +DEFINE_ALIAS ??_U@YAPEAX_KHPEBDH@Z, operator_new_dbg +DEFINE_ALIAS ??_V@YAXPEAX@Z, operator_delete +DEFINE_ALIAS ??2@YAPEAX_K@Z, operator_new +DEFINE_ALIAS ??2@YAPEAX_KHPEBDH@Z, operator_new_dbg +DEFINE_ALIAS ?_query_new_handler@@YAP6AHI@ZXZ, _query_new_handler +DEFINE_ALIAS ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z, _set_new_handler +DEFINE_ALIAS ?set_new_handler@@YAP6AXXZP6AXXZ@Z, set_new_handler +DEFINE_ALIAS ?_query_new_mode@@YAHXZ, _query_new_mode +DEFINE_ALIAS ?_set_new_mode@@YAHH@Z, _set_new_mode +DEFINE_ALIAS ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z, _set_se_translator +DEFINE_ALIAS ?set_terminate@@YAP6AXXZP6AXXZ@Z, set_terminate +DEFINE_ALIAS ?set_unexpected@@YAP6AXXZP6AXXZ@Z, set_unexpected +DEFINE_ALIAS ?terminate@@YAXXZ, terminate +DEFINE_ALIAS ?unexpected@@YAXXZ, unexpected +DEFINE_ALIAS ?what@exception@@UEBAPEBDXZ, exception_what +DEFINE_ALIAS ??0exception@@QEAA@AEBQEBDH@Z, exception_ctor_noalloc +DEFINE_ALIAS ??0exception@@QEAA@AEBV0@@Z, exception_copy_ctor +DEFINE_ALIAS ??0exception@@QEAA@XZ, exception_default_ctor +DEFINE_ALIAS ??1exception@@UEAA@XZ, exception_dtor +DEFINE_ALIAS ??4exception@@QEAAAEAV0@AEBV0@@Z, exception_opequals +DEFINE_ALIAS ??1type_info@@UEAA@XZ, type_info_dtor +DEFINE_ALIAS ??0__non_rtti_object@@QEAA@AEBV0@@Z, __non_rtti_object_copy_ctor +DEFINE_ALIAS ??0__non_rtti_object@@QEAA@PEBD@Z, __non_rtti_object_ctor +DEFINE_ALIAS ??0bad_cast@@AAE@PBQBD@Z, bad_cast_ctor +DEFINE_ALIAS ??0bad_cast@@AEAA@PEBQEBD@Z, bad_cast_ctor +DEFINE_ALIAS ??0bad_cast@@QAE@ABQBD@Z, bad_cast_ctor +DEFINE_ALIAS ??0bad_cast@@QEAA@AEBQEBD@Z, bad_cast_ctor +DEFINE_ALIAS ??0bad_cast@@QEAA@AEBV0@@Z, bad_cast_copy_ctor +DEFINE_ALIAS ??0bad_cast@@QEAA@PEBD@Z, bad_cast_ctor_charptr +DEFINE_ALIAS ??0bad_typeid@@QEAA@AEBV0@@Z, bad_typeid_copy_ctor +DEFINE_ALIAS ??0bad_typeid@@QEAA@PEBD@Z, bad_typeid_ctor +DEFINE_ALIAS ??0exception@@QEAA@AEBQEBD@Z, exception_ctor +DEFINE_ALIAS ??1__non_rtti_object@@UEAA@XZ, __non_rtti_object_dtor +DEFINE_ALIAS ??1bad_cast@@UEAA@XZ, bad_cast_dtor +DEFINE_ALIAS ??1bad_typeid@@UEAA@XZ, bad_typeid_dtor +DEFINE_ALIAS ??4bad_cast@@QEAAAEAV0@AEBV0@@Z, bad_cast_opequals +DEFINE_ALIAS ??4bad_typeid@@QEAAAEAV0@AEBV0@@Z, bad_typeid_opequals +DEFINE_ALIAS ??8type_info@@QEBAHAEBV0@@Z, type_info_opequals_equals +DEFINE_ALIAS ??9type_info@@QEBAHAEBV0@@Z, type_info_opnot_equals +DEFINE_ALIAS ??_Fbad_cast@@QEAAXXZ, bad_cast_default_ctor +DEFINE_ALIAS ??_Fbad_typeid@@QEAAXXZ, bad_typeid_default_ctor +DEFINE_ALIAS ?_query_new_handler@@YAP6AH_K@ZXZ, _query_new_handler +DEFINE_ALIAS ?_set_new_handler@@YAP6AH_K@ZP6AH0@Z@Z, _set_new_handler +DEFINE_ALIAS ?_set_se_translator@@YAP6AXIPEAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z, _set_se_translator +DEFINE_ALIAS ?before@type_info@@QEBAHAEBV1@@Z, type_info_before +DEFINE_ALIAS ?name@type_info@@QEBAPEBDXZ, type_info_name +DEFINE_ALIAS ?raw_name@type_info@@QEBAPEBDXZ, type_info_raw_name +DEFINE_ALIAS ??4__non_rtti_object@@QEAAAEAV0@AEBV0@@Z, __non_rtti_object_opequals + +END diff --git a/dll/win32/msvcrt/amd64/cpp_vtables.s b/dll/win32/msvcrt/amd64/cpp_vtables.s new file mode 100644 index 00000000000..23bd5683c8b --- /dev/null +++ b/dll/win32/msvcrt/amd64/cpp_vtables.s @@ -0,0 +1,52 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x64 C++ V-tables for cpp.c + * COPYRIGHT: Copyright 2014-2024 Wine team + * Copyright 2025 Timo Kreuzer + */ + +#include + +// See msvcrt/cpp.c + +.const + +MACRO(START_VTABLE, shortname, cxxname) +EXTERN shortname&_rtti:PROC + .quad shortname&_rtti +PUBLIC &shortname&_vtable +&shortname&_vtable: +PUBLIC &cxxname +&cxxname: +ENDM + +MACRO(DEFINE_EXCEPTION_VTABLE, shortname, cxxname) + START_VTABLE shortname, cxxname + EXTERN &shortname&_vector_dtor:PROC + .quad &shortname&_vector_dtor + EXTERN exception_what:ABS + .quad exception_what +ENDM + +START_VTABLE type_info, __dummyname_type_info + EXTERN type_info_vector_dtor:PROC + .quad type_info_vector_dtor + +DEFINE_EXCEPTION_VTABLE exception, ??_7exception@@6B@ + +DEFINE_EXCEPTION_VTABLE bad_typeid, ??_7bad_typeid@@6B@ +DEFINE_EXCEPTION_VTABLE bad_cast, ??_7bad_cast@@6B@ +DEFINE_EXCEPTION_VTABLE __non_rtti_object, ??_7__non_rtti_object@@6B@ + +#if 0 +START_VTABLE exception_old, __dummyname_exception_old + .quad exception_vector_dtor + .quad exception_what + +START_VTABLE bad_alloc, ??_7bad_alloc@@6B@ + .quad exception_vector_dtor + .quad exception_what +#endif + +END diff --git a/dll/win32/msvcrt/amd64/except_x86_64.s b/dll/win32/msvcrt/amd64/except_x86_64.s new file mode 100644 index 00000000000..c10ce7837f8 --- /dev/null +++ b/dll/win32/msvcrt/amd64/except_x86_64.s @@ -0,0 +1,29 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x64 asm code for except_x86_64.c + * COPYRIGHT: Copyright 2017-2024 Wine team + */ + +#include + +// See msvcrt/except_x86_64.c + +.code64 + +// void *call_exc_handler( void *handler, ULONG_PTR frame, UINT flags ); +PUBLIC call_exc_handler +.PROC call_exc_handler + sub rsp, 40 + .allocstack 40 + .endprolog + + mov [rsp], rcx + mov [rsp + 8], r8d + mov [rsp + 16], rdx + call rcx + add rsp, 40 + ret +.ENDP + +END diff --git a/dll/win32/msvcrt/i386/cpp_alias.s b/dll/win32/msvcrt/i386/cpp_alias.s new file mode 100644 index 00000000000..f231119b03a --- /dev/null +++ b/dll/win32/msvcrt/i386/cpp_alias.s @@ -0,0 +1,93 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x86 C++ MSVC aliases for cpp.c + * COPYRIGHT: Copyright 2014-2024 Wine team + * Copyright 2025 Timo Kreuzer + */ + +#include + +// See msvcrt/cpp.c + +.code + +MACRO(DEFINE_THISCALL_ALIAS, cxxname, target) +#ifdef _USE_ML + EXTERN ___thiscall&target:PROC + ALIAS <&cxxname> = <___thiscall&target> +#else + PUBLIC cxxname + .weakref &cxxname, &target +#endif +ENDM + +DEFINE_THISCALL_ALIAS ??0exception@@QAE@ABQBD@Z, _exception_ctor +DEFINE_THISCALL_ALIAS ??0exception@@QAE@ABQBDH@Z, _exception_ctor_noalloc +DEFINE_THISCALL_ALIAS ??0exception@@QAE@ABV0@@Z, _exception_copy_ctor +DEFINE_THISCALL_ALIAS ??0exception@@QAE@XZ, _exception_default_ctor +DEFINE_THISCALL_ALIAS ??1exception@@UAE@XZ, _exception_dtor +DEFINE_THISCALL_ALIAS ??4exception@@QAEAAV0@ABV0@@Z, _exception_opequals +DEFINE_THISCALL_ALIAS ??_Eexception@@UAEPAXI@Z, _exception_vector_dtor +DEFINE_THISCALL_ALIAS ??_Gexception@@UAEPAXI@Z, _exception_scalar_dtor +DEFINE_THISCALL_ALIAS ?what@exception@@UBEPBDXZ, _exception_what +DEFINE_THISCALL_ALIAS ??0bad_typeid@@QAE@ABV0@@Z, _bad_typeid_copy_ctor +DEFINE_THISCALL_ALIAS ??0bad_typeid@@QAE@PBD@Z, _bad_typeid_ctor +DEFINE_THISCALL_ALIAS ??_Fbad_typeid@@QAEXXZ, _bad_typeid_default_ctor +DEFINE_THISCALL_ALIAS ??1bad_typeid@@UAE@XZ, _bad_typeid_dtor +DEFINE_THISCALL_ALIAS ??4bad_typeid@@QAEAAV0@ABV0@@Z, _bad_typeid_opequals +DEFINE_THISCALL_ALIAS ??_Ebad_typeid@@UAEPAXI@Z, _bad_typeid_vector_dtor +DEFINE_THISCALL_ALIAS ??_Gbad_typeid@@UAEPAXI@Z, _bad_typeid_scalar_dtor +DEFINE_THISCALL_ALIAS ??0__non_rtti_object@@QAE@ABV0@@Z, ___non_rtti_object_copy_ctor +DEFINE_THISCALL_ALIAS ??0__non_rtti_object@@QAE@PBD@Z, ___non_rtti_object_ctor +DEFINE_THISCALL_ALIAS ??1__non_rtti_object@@UAE@XZ, ___non_rtti_object_dtor +DEFINE_THISCALL_ALIAS ??4__non_rtti_object@@QAEAAV0@ABV0@@Z, ___non_rtti_object_opequals +DEFINE_THISCALL_ALIAS ??_E__non_rtti_object@@UAEPAXI@Z, ___non_rtti_object_vector_dtor +DEFINE_THISCALL_ALIAS ??_G__non_rtti_object@@UAEPAXI@Z, ___non_rtti_object_scalar_dtor +DEFINE_THISCALL_ALIAS ??0bad_cast@@AAE@PBQBD@Z, _bad_cast_ctor +DEFINE_THISCALL_ALIAS ??0bad_cast@@QAE@ABQBD@Z, _bad_cast_ctor +DEFINE_THISCALL_ALIAS ??0bad_cast@@QAE@ABV0@@Z, _bad_cast_copy_ctor +DEFINE_THISCALL_ALIAS ??0bad_cast@@QAE@PBD@Z, _bad_cast_ctor_charptr +DEFINE_THISCALL_ALIAS ??_Fbad_cast@@QAEXXZ, _bad_cast_default_ctor +DEFINE_THISCALL_ALIAS ??1bad_cast@@UAE@XZ, _bad_cast_dtor +DEFINE_THISCALL_ALIAS ??4bad_cast@@QAEAAV0@ABV0@@Z, _bad_cast_opequals +DEFINE_THISCALL_ALIAS ??_Ebad_cast@@UAEPAXI@Z, _bad_cast_vector_dtor +DEFINE_THISCALL_ALIAS ??_Gbad_cast@@UAEPAXI@Z, _bad_cast_scalar_dtor +DEFINE_THISCALL_ALIAS ??8type_info@@QBEHABV0@@Z, _type_info_opequals_equals +DEFINE_THISCALL_ALIAS ??9type_info@@QBEHABV0@@Z, _type_info_opnot_equals +DEFINE_THISCALL_ALIAS ?before@type_info@@QBEHABV1@@Z, _type_info_before +DEFINE_THISCALL_ALIAS ??1type_info@@UAE@XZ, _type_info_dtor +DEFINE_THISCALL_ALIAS ?name@type_info@@QBEPBDXZ, _type_info_name +DEFINE_THISCALL_ALIAS ?raw_name@type_info@@QBEPBDXZ, _type_info_raw_name + +EXTERN _operator_delete:PROC +PUBLIC ??3@YAXPAX@Z +??3@YAXPAX@Z: + jmp _operator_delete + +EXTERN _operator_new:PROC +PUBLIC ??_U@YAPAXI@Z +??_U@YAPAXI@Z: + jmp _operator_new + +MACRO(DEFINE_ALIAS, alias, orig, type) +EXTERN &orig:&type +ALIAS <&alias> = <&orig> +ENDM + +DEFINE_ALIAS ??_V@YAXPAX@Z, _operator_delete, PROC +DEFINE_ALIAS ??2@YAPAXI@Z, _operator_new, PROC +DEFINE_ALIAS ??2@YAPAXIHPBDH@Z, _operator_new, PROC +DEFINE_ALIAS ??_U@YAPAXIHPBDH@Z, _operator_new_dbg, PROC +DEFINE_ALIAS ?_query_new_handler@@YAP6AHI@ZXZ, __query_new_handler, PROC +DEFINE_ALIAS ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z, __set_new_handler, PROC +DEFINE_ALIAS ?set_new_handler@@YAP6AXXZP6AXXZ@Z, _set_new_handler, PROC +DEFINE_ALIAS ?_query_new_mode@@YAHXZ, __query_new_mode, PROC +DEFINE_ALIAS ?_set_new_mode@@YAHH@Z, __set_new_mode, PROC +DEFINE_ALIAS ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z, __set_se_translator, PROC +DEFINE_ALIAS ?set_terminate@@YAP6AXXZP6AXXZ@Z, _set_terminate, PROC +DEFINE_ALIAS ?set_unexpected@@YAP6AXXZP6AXXZ@Z, _set_unexpected, PROC +DEFINE_ALIAS ?terminate@@YAXXZ, _terminate, PROC +DEFINE_ALIAS ?unexpected@@YAXXZ, _unexpected, PROC + +END diff --git a/dll/win32/msvcrt/i386/cpp_vtables.s b/dll/win32/msvcrt/i386/cpp_vtables.s new file mode 100644 index 00000000000..1e7268b8533 --- /dev/null +++ b/dll/win32/msvcrt/i386/cpp_vtables.s @@ -0,0 +1,53 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x64 C++ V-tables for cpp.c + * COPYRIGHT: Copyright 2014-2024 Wine team + * Copyright 2025 Timo Kreuzer + */ + +#include + +// See msvcrt/cpp.c + +.const +ASSUME CS:NOTHING + +MACRO(START_VTABLE, shortname, cxxname) +EXTERN _&shortname&_rtti:PROC + .long _&shortname&_rtti +PUBLIC _&shortname&_vtable +_&shortname&_vtable: +PUBLIC &cxxname +&cxxname: +ENDM + +MACRO(DEFINE_EXCEPTION_VTABLE, shortname, cxxname) + START_VTABLE shortname, cxxname + EXTERN ___thiscall_&shortname&_vector_dtor:PROC + .long ___thiscall_&shortname&_vector_dtor + EXTERN ___thiscall_exception_what:PROC + .long ___thiscall_exception_what +ENDM + +START_VTABLE type_info, __dummyname_type_info + EXTERN ___thiscall_type_info_vector_dtor:PROC + .long ___thiscall_type_info_vector_dtor + +DEFINE_EXCEPTION_VTABLE exception, ??_7exception@@6B@ + +DEFINE_EXCEPTION_VTABLE bad_typeid, ??_7bad_typeid@@6B@ +DEFINE_EXCEPTION_VTABLE bad_cast, ??_7bad_cast@@6B@ +DEFINE_EXCEPTION_VTABLE __non_rtti_object, ??_7__non_rtti_object@@6B@ + +#if 0 +START_VTABLE exception_old, __dummyname_exception_old + .long ___thiscall_exception_vector_dtor + .long ___thiscall_exception_what + +START_VTABLE bad_alloc, ??_7bad_alloc@@6B@ + .long ___thiscall_exception_vector_dtor + .long ___thiscall_exception_what +#endif + +END diff --git a/dll/win32/msvcrt/i386/except_i386_asm.s b/dll/win32/msvcrt/i386/except_i386_asm.s new file mode 100644 index 00000000000..2dc36de3617 --- /dev/null +++ b/dll/win32/msvcrt/i386/except_i386_asm.s @@ -0,0 +1,124 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x686 asm code for except_i386.c + * COPYRIGHT: Copyright 2017-2024 Wine team + */ + +#include + +// See msvcrt/except_i386.c + +.code + +PUBLIC _continue_after_catch +_continue_after_catch: + mov edx, [esp + 4] + mov eax, [esp + 8] + mov esp, [edx - 4] + lea ebp, [edx + 12] + jmp eax + +PUBLIC _call_finally_block +_call_finally_block: + mov ebp, [esp + 8] + jmp dword ptr [esp + 4] + +PUBLIC _call_filter +_call_filter: + push ebp + push dword ptr [esp + 12] + mov ebp, [esp + 20] + call dword ptr [esp + 12] + pop ebp + pop ebp + ret + +PUBLIC _call_handler +_call_handler: + push ebp + push ebx + push esi + push edi + mov ebp, [esp + 24] + call dword ptr [esp + 20] + pop edi + pop esi + pop ebx + pop ebp + ret + +// +// DWORD +// __cdecl +// __CxxFrameHandler( +// PEXCEPTION_RECORD rec, +// EXCEPTION_REGISTRATION_RECORD* frame, +// PCONTEXT context, +// EXCEPTION_REGISTRATION_RECORD** dispatch); +// +// See except_i386.c +// +EXTERN _cxx_frame_handler:PROC +PUBLIC ___CxxFrameHandler +___CxxFrameHandler: + + push 0 /* nested_trylevel */ + //.cfi_adjust_cfa_offset 4 + push 0 /* nested_frame */ + //.cfi_adjust_cfa_offset 4 + push eax /* descr */ + //.cfi_adjust_cfa_offset 4 + push [esp + 28] /* dispatch */ + //.cfi_adjust_cfa_offset 4 + push [esp + 28] /* context */ + //.cfi_adjust_cfa_offset 4 + push [esp + 28] /* frame */ + //.cfi_adjust_cfa_offset 4 + push [esp + 28] /* rec */ + //.cfi_adjust_cfa_offset 4 + call _cxx_frame_handler + add esp, 28 + //.cfi_adjust_cfa_offset -28 + ret + +PUBLIC __EH_prolog +__EH_prolog: + //.cfi_adjust_cfa_offset 4 + push -1 + //.cfi_adjust_cfa_offset 4 + push eax + //.cfi_adjust_cfa_offset 4 + push fs:0 + //.cfi_adjust_cfa_offset 4 + mov fs:0, esp + mov eax, [esp + 12] + mov [esp + 12], ebp + lea ebp, [esp + 12] + push eax + //.cfi_adjust_cfa_offset 4 + ret + +PUBLIC _call_copy_ctor +_call_copy_ctor: + push ebp + //.cfi_adjust_cfa_offset 4 + //.cfi_rel_offset ebp, 0 + mov ebp, esp + //.cfi_def_cfa_register ebp + push 1 + mov ecx, [ebp + 12] + push dword ptr [ebp + 16] + call dword ptr [ebp + 8] + //.cfi_def_cfa esp, 4 + //.cfi_same_value ebp + leave + ret + +PUBLIC _call_dtor +_call_dtor: + mov ecx, [esp + 8] + call dword ptr [esp + 4] + ret + +END diff --git a/dll/win32/msvcrt/i386/inout.s b/dll/win32/msvcrt/i386/inout.s new file mode 100644 index 00000000000..3094c24c3e7 --- /dev/null +++ b/dll/win32/msvcrt/i386/inout.s @@ -0,0 +1,51 @@ +/* + * PROJECT: ReactOS msvcrt.dll + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: x86 asm implementation of _inp, _inpw, _inpd + * COPYRIGHT: Copyright 2025 Timo Kreuzer + */ + +#include + +.code + +PUBLIC __inp +__inp: + mov dx, [esp + 8] + in al, dx + ret + +PUBLIC __inpw +__inpw: + mov dx, [esp + 8] + in ax, dx + ret + +PUBLIC __inpd +__inpd: + mov dx, [esp + 8] + in eax, dx + ret + +PUBLIC __outp +__outp: + mov dx, [esp + 8] + mov al, [esp + 12] + out dx, al + ret + +PUBLIC __outpw +__outpw: + mov dx, [esp + 8] + mov ax, [esp + 12] + out dx, ax + ret + +PUBLIC __outpd +__outpd: + mov dx, [esp + 8] + mov eax, [esp + 12] + out dx, eax + ret + +END