Skip to content

Commit

Permalink
BuildBreak: UWP apps can't call GetModuleHandle (#596)
Browse files Browse the repository at this point in the history
* BuildBreak: UWP apps can't call GetModuleHandle

It is not possible to load RtlCaptureStackBackTrace at static init time in UWP.
CaptureStackBackTrace is the public version of RtlCaptureStackBackTrace.

* Using WINAPI_FAMILY_PARTITION family of macros

Using WINAPI_FAMILY_PARTITION family of macros for detecting when building for UWP or Desktop.

* Simplifying comment to please lint tool.
  • Loading branch information
LoadLibrary authored Mar 3, 2020
1 parent bcefbdc commit 06f0e76
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions absl/debugging/internal/stacktrace_win32-inl.inc
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,19 @@ typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
OUT PVOID *backtrace,
OUT PULONG backtrace_hash);

// It is not possible to load RtlCaptureStackBackTrace at static init time in
// UWP. CaptureStackBackTrace is the public version of RtlCaptureStackBackTrace
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
&::CaptureStackBackTrace;
#else
// Load the function we need at static init time, where we don't have
// to worry about someone else holding the loader's lock.
static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
(RtlCaptureStackBackTrace_Function*)
GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
#endif // WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP

template <bool IS_STACK_FRAMES, bool IS_WITH_CONTEXT>
static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
Expand Down

0 comments on commit 06f0e76

Please sign in to comment.