Skip to content

Commit 618cb77

Browse files
committed
CDRIVER-5839 Unofficial ARM64 Windows support (#1810)
1 parent 01bea4b commit 618cb77

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/libmongoc/CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ endif()
154154
add_library(_mongoc-dependencies INTERFACE)
155155
add_library(mongo::detail::c_dependencies ALIAS _mongoc-dependencies)
156156
target_link_libraries(_mongoc-dependencies INTERFACE mongo::detail::c_platform)
157+
target_link_libraries(_mongoc-dependencies INTERFACE mongo::detail::c_platform $<$<PLATFORM_ID:Windows>:advapi32.lib>)
157158
install(TARGETS _mongoc-dependencies EXPORT mongoc-targets)
158159
set_property(TARGET _mongoc-dependencies PROPERTY EXPORT_NAME detail::c_dependencies)
159160

@@ -1222,7 +1223,7 @@ if (ENABLE_TESTS)
12221223

12231224
target_link_libraries (${test}
12241225
PUBLIC
1225-
$<$<C_COMPILER_ID:MSVC>:DbgHelp.dll>
1226+
$<$<PLATFORM_ID:Windows>:DbgHelp.lib>
12261227
mongoc_static
12271228
)
12281229
# We have tests that test our deprecated api.

src/libmongoc/tests/test-libmongoc.c

+8-1
Original file line numberDiff line numberDiff line change
@@ -2476,10 +2476,17 @@ windows_exception_handler (EXCEPTION_POINTERS *pExceptionInfo)
24762476
STACKFRAME64 stack_frame;
24772477
memset (&stack_frame, 0, sizeof (stack_frame));
24782478
#if defined(_WIN64)
2479+
#if defined(_M_ARM64)
2480+
int machine_type = IMAGE_FILE_MACHINE_ARM64;
2481+
stack_frame.AddrPC.Offset = context_record.Pc;
2482+
stack_frame.AddrFrame.Offset = context_record.Fp;
2483+
stack_frame.AddrStack.Offset = context_record.Sp;
2484+
#else
24792485
int machine_type = IMAGE_FILE_MACHINE_AMD64;
24802486
stack_frame.AddrPC.Offset = context_record.Rip;
24812487
stack_frame.AddrFrame.Offset = context_record.Rbp;
24822488
stack_frame.AddrStack.Offset = context_record.Rsp;
2489+
#endif
24832490
#else
24842491
int machine_type = IMAGE_FILE_MACHINE_I386;
24852492
stack_frame.AddrPC.Offset = context_record.Eip;
@@ -2522,7 +2529,7 @@ windows_exception_handler (EXCEPTION_POINTERS *pExceptionInfo)
25222529
line.SizeOfStruct = sizeof (IMAGEHLP_LINE);
25232530

25242531
DWORD offset_ln = 0;
2525-
if (SymGetLineFromAddr (process, (DWORD64) stack_frame.AddrPC.Offset, &offset_ln, &line)) {
2532+
if (SymGetLineFromAddr64 (process, (DWORD64) stack_frame.AddrPC.Offset, &offset_ln, &line)) {
25262533
fprintf (stderr, " %s:%d ", line.FileName, line.LineNumber);
25272534
}
25282535

0 commit comments

Comments
 (0)