Skip to content

Commit

Permalink
Fea #30, 为LLD添加lib依赖模式
Browse files Browse the repository at this point in the history
  • Loading branch information
mingkuang-Chuyu committed Jun 2, 2024
1 parent 0754978 commit 7244a79
Show file tree
Hide file tree
Showing 10 changed files with 2,192 additions and 2,020 deletions.
15 changes: 11 additions & 4 deletions .github/workflows/Build&Test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
&7z e Bin\Procdump.zip "-o$Env:GITHUB_WORKSPACE\Bin"
Invoke-WebRequest -Uri https://github.com/Chuyu-Team/LibMaker/releases/download/v1.0.2/LibMaker.exe -OutFile Bin\LibMaker.exe
Invoke-WebRequest -Uri https://github.com/Chuyu-Team/LibMaker/releases/download/v1.0.3/LibMaker.exe -OutFile Bin\LibMaker.exe
Invoke-WebRequest -Uri https://github.com/Chuyu-Team/YY-Thunks/releases/download/v1.0.2.8/MinimumRequiredVersionHelper.exe -OutFile Bin\MinimumRequiredVersionHelper.exe
$ProgramFiles = ${env:ProgramFiles(x86)}
Expand Down Expand Up @@ -100,15 +100,17 @@ jobs:
setlocal
call "%LatestVisualStudioRoot%\VC\Auxiliary\Build\vcvars32.bat"
call "%GITHUB_WORKSPACE%\src\Build.cmd"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
endlocal
setlocal
call "%LatestVisualStudioRoot%\VC\Auxiliary\Build\vcvars64.bat"
call "%GITHUB_WORKSPACE%\src\Build.cmd"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
endlocal
msbuild src\YY.Depends.Analyzer\YY.Depends.Analyzer.vcxproj "-p:Configuration=Release;Platform=Win32;OutDir=%GITHUB_WORKSPACE%\;SolutionDir=%GITHUB_WORKSPACE%\src\\"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
- name: 执行单元测试
working-directory: ${{env.GITHUB_WORKSPACE}}
shell: pwsh
Expand Down Expand Up @@ -159,9 +161,14 @@ jobs:
shell: cmd
run: |
::打包Release
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Binary.zip objs LICENSE ReadMe.md ThunksList.md YY.Depends.Analyzer.exe
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Objs.zip objs LICENSE ReadMe.md ThunksList.md YY.Depends.Analyzer.exe
pushd ".\src\YY.Depends.Analyzer"
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Objs.zip Config
popd
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Lib.zip Lib LICENSE ReadMe.md ThunksList.md YY.Depends.Analyzer.exe
pushd ".\src\YY.Depends.Analyzer"
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Binary.zip Config
7z a -tzip %GITHUB_WORKSPACE%\YY-Thunks-${{env.BuildVersion}}-Lib.zip Config
popd
::打包Nuget
Expand Down
15 changes: 12 additions & 3 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
With each new version of Windows, a large number of APIs are added,
and it often takes a lot of effort to develop Windows applications
that are compatible with older systems. And some open source projects
are no longer compatible with some earlier versions of Windows, such as Windows XP and Windows 7...
are no longer compatible with some earlier versions of Windows, such as Windows XP, Windows 7...

Isn't there a solution to quickly deal with the problem that the old system can't find the API?

Expand Down Expand Up @@ -68,8 +68,8 @@ as NuGet is designed to be foolproof and easier to use.
3. Optional, if you need run on Windows XP, please modify the value of `SupportedOSPlatformVersion` to `5.1`
### 2.2. Manual
1. Download and unzip [YY-Thunks-Binary](https://github.com/Chuyu-Team/YY-Thunks/releases) to project directory.
#### 2.2.1. using obj file (MSVC Link)
1. Download and unzip [YY-Thunks-Objs](https://github.com/Chuyu-Team/YY-Thunks/releases) to project directory.
2. `Linker` - `Input` - `Additional Dependencies`, add `objs\$(PlatformShortName)\YY_Thunks_for_WinXP.obj`.
3. `Linker` - `System` - `Minimum Required Version`, set to `5.1` (WinXP 32-bit) or `5.2` (WinXP x64 or Win2003).
4. If the project is a `Dynamic Link Library`, then change `Linker` - `Advanced` - `Custom Entry Point` to `DllMainCRTStartupForYY_Thunks`
Expand All @@ -79,6 +79,15 @@ as NuGet is designed to be foolproof and easier to use.
> Note: If your app needs to be compatible with Vista or later, please set `Additional Dependencies` to
`objs\$(PlatformShortName)\YY_Thunks_for_Vista.obj`。
#### 2.2.2. using lib files (LLD Link)
> LLD linkers using obj files will encounter duplicate symbol errors.
1. Download and unzip [YY-Thunks-Lib](https://github.com/Chuyu-Team/YY-Thunks/releases) to project directory.
2. Add a parameter like `-L YY-Thunks_Root_Dir/lib/5.1.2600.0/x86` to the linker and make sure the order is higher than WinSDK.
3. 如If the project is a `Dynamic Link Library`, please add parameter `-e DllMainCRTStartupForYY_Thunks`
(If you ignore this step, the XP system may crash with `thread_local`).
4. Rebuild the solution.
## 3. Compatibility
### 3.1. Supported Compiler
Expand Down
13 changes: 11 additions & 2 deletions Readme.osc.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ ULONGLONG WINAPI GetTickCount64(VOID)
4. 默认兼容到Windows Vista(默认),如果需要兼容Windows XP可以将`WindowsSupportedOSPlatformVersion`调整为`5.1`。
### 2.2. 手工配置
1. 下载 [YY-Thunks-Binary](https://github.com/Chuyu-Team/YY-Thunks/releases),
#### 2.2.1. obj方式(适合微软的链接器)
1. 下载 [YY-Thunks-Objs](https://github.com/Chuyu-Team/YY-Thunks/releases),
然后解压到你的工程目录。
2. 【链接器】-【输入】-【附加依赖项】,添加
`objs\$(PlatformShortName)\YY_Thunks_for_WinXP.obj`。
Expand All @@ -77,6 +77,15 @@ ULONGLONG WINAPI GetTickCount64(VOID)
> 温馨提示:如果需要兼容 Vista,【所需的最低版本】无需修改,但是【附加依赖项】请选择
`objs\$(PlatformShortName)\YY_Thunks_for_Vista.obj`。
#### 2.2.2. lib方式(适合LLD链接器)
> LLD链接器无法使用obj方式,因为遇到重复符号会报告错误。
1. 下载 [YY-Thunks-Lib](https://github.com/Chuyu-Team/YY-Thunks/releases),
然后解压到你的工程目录。
2. 将 `-L YY-Thunks根目录/Lib/5.1.2600.0/x86` 类似的参数添加到链接器参数中,并确保顺序比系统SDK靠前。
3. 如果是编译DLL,额外给链接器传递 `-e DllMainCRTStartupForYY_Thunks`,修改DLL入口点(不这样做XP下使用thread_local可能崩溃!)
4. 重新编译代码。
## 3. 兼容性
### 3.1. 支持的编译器
Expand Down
124 changes: 106 additions & 18 deletions src/Build.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -24,55 +24,143 @@ goto:eof

:: BuildObj YY_Thunks_for_Vista.obj NTDDI_WIN6 1.def+2.def
:BuildObj
echo BuildObj %1 %2 %3

cl /O1 /Os /Oi /GS- /std:c++17 /arch:IA32 /Z7 /MT /Fo"objs\\%Platform%\\%1" /Zl /c /D "NDEBUG" /D "YY_Thunks_Support_Version=%2" "%~dp0Thunks\YY_Thunks.cpp"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

::生成weak符号,一些非必须符号安排为weak可以避免链接失败
LibMaker.exe FixObj "%~dp0..\\objs\\%Platform%\\%1" /WeakExternFix:__security_cookie=%PointType% /WeakExternFix:__YY_Thunks_Process_Terminating=4 /WeakExternFix:__acrt_atexit_table=%PointType% /WeakExternFix:__pfnDllMainCRTStartupForYY_Thunks=%PointType%
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
if "%3"=="" goto:eof
set DEF_FILES=%3
:AppendWeak
for /f "tokens=1* delims=+" %%a in ("%DEF_FILES%") do (
echo "AppendWeak %~dp0def\\%Platform%\\%%a"
LibMaker.exe AppendWeak /MACHINE:%Platform% /DEF:"%~dp0def\\%Platform%\\%%a" /OUT:"%~dp0..\\objs\\%Platform%\\%1"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
set DEF_FILES=%%b
)

if defined DEF_FILES goto :AppendWeak

goto:eof

:: BuildObj 6.0.6000.0 NTDDI_WIN6 1.def+2.def
:BuildLib
echo BuildLib %1 %2 %3

md "Lib\\%1\\%Platform%"

cl /O1 /Os /Oi /GS- /std:c++17 /arch:IA32 /Z7 /MT /Fo"Lib\\%1\\%Platform%\\YY_Thunks_for_%1.obj" /Zl /c /D "NDEBUG" /D "YY_Thunks_Support_Version=%2" /D "__FALLBACK_PREFIX=YY_Thunks_" "%~dp0Thunks\YY_Thunks.cpp"

if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

::生成weak符号,一些非必须符号安排为weak可以避免链接失败
LibMaker.exe FixObj "%~dp0..\\Lib\\%1\\%Platform%\\YY_Thunks_for_%1.obj" /WeakExternFix:__security_cookie=%PointType% /WeakExternFix:__YY_Thunks_Process_Terminating=4 /WeakExternFix:__acrt_atexit_table=%PointType% /WeakExternFix:__pfnDllMainCRTStartupForYY_Thunks=%PointType%
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

if "%3"=="" goto:BuildWeak
set DEF_FILES=%3
:AppendWeakByLib
for /f "tokens=1* delims=+" %%a in ("%DEF_FILES%") do (
echo "AppendWeak %~dp0def\\%Platform%\\%%a"
LibMaker.exe /PREFIX:YY_Thunks_ AppendWeak /MACHINE:%Platform% /DEF:"%~dp0def\\%Platform%\\%%a" /OUT:"%~dp0..\\Lib\\%1\\%Platform%\\YY_Thunks_for_%1.obj"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
set DEF_FILES=%%b
)

if defined DEF_FILES goto:AppendWeakByLib
:BuildWeak

set "SupportApiSet=/SupportApiSet"
set "WinVersion=%1"

:: Win8以前不支持API Set
if "%WinVersion:~0,2%"=="5." (set "SupportApiSet=")
if "%WinVersion:~0,3%"=="6.0" (set "SupportApiSet=")
if "%WinVersion:~0,3%"=="6.1" (set "SupportApiSet=")

LibMaker.exe %SupportApiSet% /PREFIX:YY_Thunks_ BuildYY_ThunksLibraries "%~dp0..\\Lib\\%1\\%Platform%\\YY_Thunks_for_%1.obj" "%WindowsSdkDir%\\Lib\\%WindowsSDKLibVersion%\\um\\%Platform%" "%~dp0..\\Lib\\%1\\%Platform%"
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
goto:eof

:: 6.0.6000.0 YY_Thunks_for_Vista.obj NTDDI_WIN6 1.def+2.def
:BuildX
call:BuildObj %2 %3 %4
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
call:BuildLib %1 %3 %4
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%
goto:eof

:Buildx86
set PointType=4
call:BuildObj YY_Thunks_for_Win2K.obj NTDDI_WIN2K PSAPI2Kernel32.def+esent.def
call:BuildObj YY_Thunks_for_WinXP.obj NTDDI_WINXP PSAPI2Kernel32.def+esent.def
call:BuildObj YY_Thunks_for_Vista.obj NTDDI_WIN6 PSAPI2Kernel32.def
call:BuildObj YY_Thunks_for_Win7.obj NTDDI_WIN7
call:BuildObj YY_Thunks_for_Win8.obj NTDDI_WIN8
call:BuildObj YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
call:BuildObj YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
call:BuildX 5.0.2195.0 YY_Thunks_for_Win2K.obj NTDDI_WIN2K PSAPI2Kernel32.def+esent.def
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 5.1.2600.0 YY_Thunks_for_WinXP.obj NTDDI_WINXP PSAPI2Kernel32.def+esent.def
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.0.6000.0 YY_Thunks_for_Vista.obj NTDDI_WIN6 PSAPI2Kernel32.def
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.1.7600.0 YY_Thunks_for_Win7.obj NTDDI_WIN7
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.2.9200.0 YY_Thunks_for_Win8.obj NTDDI_WIN8
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.10240.0 YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.19041.0 YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

goto:eof


:Buildx64
set PointType=8
call:BuildObj YY_Thunks_for_WinXP.obj NTDDI_WS03SP1 PSAPI2Kernel32.def+esent.def
call:BuildObj YY_Thunks_for_Vista.obj NTDDI_WIN6 PSAPI2Kernel32.def
call:BuildObj YY_Thunks_for_Win7.obj NTDDI_WIN7
call:BuildObj YY_Thunks_for_Win8.obj NTDDI_WIN8
call:BuildObj YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
call:BuildObj YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
call:BuildX 5.2.3790.1180 YY_Thunks_for_WinXP.obj NTDDI_WS03SP1 PSAPI2Kernel32.def+esent.def
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.0.6000.0 YY_Thunks_for_Vista.obj NTDDI_WIN6 PSAPI2Kernel32.def
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.1.7600.0 YY_Thunks_for_Win7.obj NTDDI_WIN7
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 6.2.9200.0 YY_Thunks_for_Win8.obj NTDDI_WIN8
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.10240.0 YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.19041.0 YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

goto:eof

:Buildarm
set PointType=4
call:BuildObj YY_Thunks_for_Win8.obj NTDDI_WIN8
call:BuildObj YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
call:BuildObj YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
call:BuildX 6.2.9200.0 YY_Thunks_for_Win8.obj NTDDI_WIN8
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.10240.0 YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.19041.0 YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

goto:eof

:Buildarm64
set PointType=8
; NTDDI_WIN10_RS3 = 16299
call:BuildObj YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10_RS3
call:BuildObj YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
call:BuildX 10.0.10240.0 YY_Thunks_for_Win10.0.10240.obj NTDDI_WIN10_RS3
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

call:BuildX 10.0.19041.0 YY_Thunks_for_Win10.0.19041.obj NTDDI_WIN10_VB
if %ErrorLevel% NEQ 0 exit /b %ErrorLevel%

goto:eof
30 changes: 20 additions & 10 deletions src/Thunks/YY_Thunks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,13 +186,18 @@ RtlCutoverTimeToSystemTime(

#include <HookThunk.h>

#ifndef __FALLBACK_PREFIX
#define __FALLBACK_PREFIX
#endif

//展开函数的所有的 声明 以及 try_get_ 函数
#define __DEFINE_THUNK(_MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) \
__APPLY_UNIT_TEST_BOOL(_FUNCTION); \
EXTERN_C _RETURN_ _CONVENTION_ _FUNCTION(__VA_ARGS__); \
static decltype(_FUNCTION)* __cdecl _CRT_CONCATENATE(try_get_, _FUNCTION)() noexcept; \
#define __DEFINE_THUNK_EXTERN_PREFIX(_PREFIX, _MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) \
__APPLY_UNIT_TEST_BOOL(_FUNCTION); \
EXTERN_C _RETURN_ _CONVENTION_ _CRT_CONCATENATE_(_PREFIX, _FUNCTION)(__VA_ARGS__); \
static decltype(_CRT_CONCATENATE_(_PREFIX, _FUNCTION))* __cdecl _CRT_CONCATENATE(try_get_, _FUNCTION)() noexcept; \
__if_not_exists(_CRT_CONCATENATE(try_get_, _FUNCTION))

#define __DEFINE_THUNK(_MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) __DEFINE_THUNK_EXTERN_PREFIX(__FALLBACK_PREFIX, _MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, __VA_ARGS__)

#include "Thunks\YY_Thunks_List.hpp"

Expand Down Expand Up @@ -781,10 +786,13 @@ namespace YY::Thunks::internal

#include "ThreadRunner.h"

#define _DEFINE_IAT_SYMBOL_PREFIX(_PREFIX, _FUNCTION, _SIZE) _LCRT_DEFINE_IAT_SYMBOL(_PREFIX ## _FUNCTION, _SIZE)
#define _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL_PREFIX(_PREFIX, _FUNCTION, _SIZE) _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE, _PREFIX ## _FUNCTION)

//导入实际的实现
#define YY_Thunks_Implemented
#define __DEFINE_THUNK(_MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) \
static decltype(_FUNCTION)* __cdecl _CRT_CONCATENATE(try_get_, _FUNCTION)() noexcept \
#define __DEFINE_THUNK_IMP_PREFIX(_PREFIX, _MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) \
static decltype(_CRT_CONCATENATE_(_PREFIX, _FUNCTION))* __cdecl _CRT_CONCATENATE(try_get_, _FUNCTION)() noexcept \
{ \
__CHECK_UNIT_TEST_BOOL(_FUNCTION); \
__declspec(allocate(".YYThr$AAA")) static void* _CRT_CONCATENATE(pInit_ ,_FUNCTION) = \
Expand All @@ -801,13 +809,15 @@ __if_exists(YY::Thunks::Fallback::_CRT_CONCATENATE(try_get_, _FUNCTION))
&YY::Thunks::Fallback::_CRT_CONCATENATE(try_get_, _FUNCTION) \
} \
}; \
return reinterpret_cast<decltype(_FUNCTION)*>(try_get_function( \
return reinterpret_cast<decltype(_CRT_CONCATENATE_(_PREFIX, _FUNCTION))*>(try_get_function( \
&_CRT_CONCATENATE(pFun_ ,_FUNCTION), \
_ProcInfo)); \
} \
_LCRT_DEFINE_IAT_SYMBOL(_FUNCTION, _SIZE); \
_YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE); \
EXTERN_C _RETURN_ _CONVENTION_ _FUNCTION(__VA_ARGS__)
_DEFINE_IAT_SYMBOL_PREFIX(_PREFIX, _FUNCTION, _SIZE); \
_YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL_PREFIX(_PREFIX, _FUNCTION, _SIZE); \
EXTERN_C _RETURN_ _CONVENTION_ _CRT_CONCATENATE_(_PREFIX, _FUNCTION)(__VA_ARGS__)

#define __DEFINE_THUNK(_MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, ...) __DEFINE_THUNK_IMP_PREFIX(__FALLBACK_PREFIX, _MODULE, _SIZE, _RETURN_, _CONVENTION_, _FUNCTION, __VA_ARGS__)

#include "YY_Thunks_List.hpp"

Expand Down
6 changes: 3 additions & 3 deletions src/Thunks/YY_Thunks.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@

#if defined(_M_IX86)
// 根据 https://github.com/Chuyu-Team/YY-Thunks/issues/78 修正一下rust raw-dylib引用规则
#define _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE) \
#define _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE, _FUNCTION_ADDRESS) \
__pragma(warning(suppress:4483)) \
extern "C" __declspec(selectany) void const* const __identifier(_CRT_STRINGIZE_(_imp_ ## _FUNCTION)) \
= reinterpret_cast<void const*>(_FUNCTION)
= reinterpret_cast<void const*>(_FUNCTION_ADDRESS)
#else
#define _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE)
#define _YY_THUNKS_DEFINE_RUST_RAW_DYLIB_IAT_SYMBOL(_FUNCTION, _SIZE, _FUNCTION_ADDRESS)
#endif

#ifdef __YY_Thunks_Unit_Test
Expand Down
Loading

0 comments on commit 7244a79

Please sign in to comment.