From 73261a4b988639460d1e6ba20f97adf3785010a1 Mon Sep 17 00:00:00 2001 From: Automation tool Date: Sun, 30 Jan 2022 15:41:35 +0000 Subject: [PATCH 1/8] Automated build --- lib/win_arm/stackman.lib | Bin 3978 -> 3938 bytes lib/win_arm64/stackman.lib | Bin 8066 -> 7998 bytes lib/win_x64/stackman.lib | Bin 6118 -> 6090 bytes lib/win_x86/stackman.lib | Bin 11040 -> 11074 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/win_arm/stackman.lib b/lib/win_arm/stackman.lib index 2b515b5ef4c3f3470456d7528f02ee271b48bd20..a34a92bc2f92f3d40ea74a910dcc845e726e3d6d 100644 GIT binary patch delta 473 zcmeB@e+qxZL?*DvC1_i&9g7YS5hw)HV4guPR3s&?0UDP}p(9{IA0u z&J@8gc^aRJqF$HDqI=&wH{O5BE62JeVi72mLBJt7Kes?HGiCSW+kB BgH!+j delta 501 zcmaDP*CoH<7!z|?DdXgmOuCF=o4+$fG76iSD1bo%*AYe*1`w#2oXnEVcw+K-7H!6e z$-h|^a|5+72s6ksfV8e;y~J!_Y`(dUEr(J47XzypNQ;7QYDGzEQC?z>Rcc*P=D7L%3vlqM_iXitvk7Ul*T5R;jgoKu>TI(Z?lDo~u0hvD<5 zk4%gZ^CoZPFa_B%`3?70aYIW36GJ_Nn9}5;5+#O@pP+V5R^&6B9LpuZ3YMSzm&YB- z^5pe~>nYF718L%dnG4m!4Kp*jpkVSGUc<=(Tx^qna7j&O;dB8xP!P$1N+5@Qn*5v- z?tFfbY+^}HZdx+f7nA>SG_o*!`uJ<|Z5~;uBW7_raKS7o&7HiE(-JD7&E>=glYqEx z@>yP0wrN0LaSKd-!)XPV1-cEWVDfxUZIIJgBS7w$oX4l4Sk=b9KU}wEG56b@#~m-H cWPoA-1RRp{a|`q`Q^F>1<|_q8peDa107MUyk^lez diff --git a/lib/win_arm64/stackman.lib b/lib/win_arm64/stackman.lib index 68c06e032ad94c4fc53776b089e24794a9b111ee..1ea6044709a1fd35ee62f1a1609ee61b509d212b 100644 GIT binary patch delta 832 zcmZp&-)A@B9Me1DjTa6vG4C#Am^_tPmvQ&z!^{zkBIXvx3Sf}Hm9mPB0R)mJ>$C1= z44M3zRh!XhvN+pPZlE3pVFpQ&RxyyVlLdG!ChN%vgCzw8tS2W(8cpsJFcUX2GB7aE zGl(foE-F!C`1p^20xD1` zYdOEk=2A+N4S4LpmVV$-;9~gr4Q4*Fdt@XJKs7y-^n|kXrQD&cYAN%{5rQflr+`|8 z1b|*qlojKEIeW5}wE5%>0s>IAD$?PTLxt20f1c(4{;@{4X=Xu|L8!>W==yVxPrp4m z;AvO>(?!U?Fa{JPAmEUkpIe}pnX-HGTA|OtP+urKTiDnP5hpBQRWXzOMY0*!Ox`V` z&1f_Exd=*}Or9=!0p!8WSzj6cb!9FO?=w77)?~c}f&6l#4rR&?CeV8Wh%YQf#0U0CZ6vpTcB)ekru*hybMr z9zzCLlmJtejO2Wz$bBej%*Zf#pQId?C@}@8@L{lZ@Ym delta 904 zcmdmI*JMB8921ww#tVm-n8QjLCr@S8WenSVm^p$`#KO=}0SpqjQdY4sfI!`3eb(KK z1(RR1YBTxqPCg^jIk|$7ck((mK5n3924MzS29P1uqRN|Jv1v0i8yK5U_7juYY{KQh z$i&7txs2OKBsH(h$~7XyHOSA=C*IS~*(cP+b@Ewpi^&%SlqL&E+lc`+#bo9s=ai7)0Tqxm7f3p>Bquj5d2*n1#AE?p@yT{FqO1&`KYjc(IgwvvvY!C^ zWCcDkRzphz6T`{X0-jLTNdb30u$Z1fOmRkHQEJNMa{>~~3?JViYvYC~DbLKC+#uir z)%;O5e6p~V5GTVYn0pv`T*3Z3$m2hG0lzQ{$X%1qNm%iKT*Af(b+v-DG|-8@Trg8h zlP5d!iBDc2paL~`Bd?tROcLTMC5Fj9f+`%hfEEb}06i`!WdT*|C*=rb_44^mwiHq~ zbP(SdV_fTbW@bT_L8!>W==yVxPrp4m;3>Vcf`yZJ-fU3Ffq+ADer|zYW=h!Pi9(-& z5!fm`TiDzT5xp#6RV|Z^MY0*MOr9^I&6qOzw8&DlSiJ!9@Mb@;97d*h43qbW%MgrA za0n?1C@?X6njFs`f<5vyCx;3sLOq5OT~IMmL30jxumfWjZxl%a6Nvy9!$&Se4CrBt zrz{qRPal6x&gHeo8#hoVuuJJM1JzGnC9A@?Yw~$nS*SQljIc(4qJFZMoQh&ZL|;qZ f1J?86p;8QC=UdK!gBL9x0w+I^QvrrHtGp!usL=hM diff --git a/lib/win_x64/stackman.lib b/lib/win_x64/stackman.lib index 56f06ddfb931082331ad8936672ebcb9f47f5c6a..8a754a3ddf7f72817bfd5dc84cbadf136d84f897 100644 GIT binary patch delta 505 zcmaE+e@cIYGApZ*k%581W(`(rX6D_c43pD1Rx%qJ8*dikT*b(^d-Gl{872{PO9KTk zNZ?9oV_^URnaOW?vKezGNAhYj{o$P4#=D3csGC8UL6!kziZS0Muqhn;4vfm-#tORb zDGItF&I-D2K%81slwVYoT998zxy%4A;=D|SmgV*{Y|ljn)}PYw_i z1{pGWx`+xl!>5nG7+A$XR!@E?Y&7}2p!npKB9fEWi^@WLFxg(zfeY*xJ%gCi+{uih z${oG*^jXa)Xd3RO+0N zH?H(Klw42%b{SAX50ie$r1yz7P<^?)WiaCPe^W=MCYKqHGitW$( s^?HFJW5J(?(w}`nK?DL0$@#ejdYLJ^C##ApGcrx~6i)`m*IIE)0J$8DUH||9 delta 526 zcmX@5|4e^_GApa0rGbgzW(`(rX6CR`#>r_ME13<9%{L2iu3}^i+q{=chDpT2&_V$W z61Y;@SQtRSV)9#_Y{rhsk-XYW5?qtpco%U4bu$Pv$TEOTG3L7jHid)Vfl((luguCd zBE&Vw&(SB|)6dx_)WuanH?^W9wJ0w!$12>I;nPPhMpiM9xs$yFM@WQ#dK&6v?L_Hz?ojgm_8_Iem>LmtKm0VCzo|#uvq6Bsk&|LG$Ho_8rzSlP?JP1Kl7#d99!svO5HYwI>^h3h=;eDFwP^a<+iVq zP)Ae?IdQD7=QlP9<0|&OWSqjEv#?!g;=_^f$7ZHMqv=fUdY%?T8gzRu4e7J?#f(X zDw;r|FvJHmAQ1?let^ux7mSgR1sEtF2nmpV(1e+_PK}K?|99M${*$}=-S7E5 zulMB6w13||`beo5%K}a+FDfehe&GZ52_a*`;KD{?uBr%>OXn4?k+2}1wH5#^J}OzS zs?q>x2tW|sDjU1!Ie=koRjp*h27t?$RXLeO7W`CoUQMHe0agHg3fs62LS7RtsP8J> zl!hH!n%ex8poNmfiUk0h>zaa%8`lOvLkXVRB{TB66i(`DHjGUDd^mY-zgg42e^bbJ z{|LYXs?m{&y?3t9{&{3(;Qf_l!l4iiw3-&CBaWGywf*m$9!wkyhE60-o&*@c!Np~7 zU6ZWLz3u-NZgzk5n`zqd*i$+Vz%iniGHknc`n;{>M78H)`?ra zuG3l{r;fio3-GzbuPHPf3=SQ5I(}s)c=<{BPJq0`znYyo#tw6%#8TJ&B0EFJRjm-? z=e7GxjPc;kKH}hed!!B8aL`B53etr zO@{jusT7ZA_3LC|#MmsOe~dw6kuVug_GAX4=|qwEh9S75NRrO<#NvH@d{-tO?d-!- zrEP8%o$^AMq<0ai;a3@P@CKdaGj5-VaEYm!aKa8#oRRZ?V_rtI!hLfGu@>c!>h*R( zZV@ansdaRb==FtPXj_^g%(x$aTJ{T*uNTfNA5t)fS_EG?Lzs>T1}vY5JBkw)o)oab zI?i)fW9FC&)W@k`eW+&qz_ zuQoMR{|Bszwg@Mk;GQ4VEFDH9y_lrdoeL^b~=Hwwqoh&=+ z*eau(BOp5Hi>jl;&hS=1jeAu|JM~>fXN@681+8{N%SV5eDYpu}6K#=U&z0$hQ#Fyk zqg|074v6iGr#9A;OnVcZV_7Acr7N$1+THOe@AdhPD#+V1v!|!qo9qO-^?+v2OKS1g U@a%U1c$*k7<7pyc{LZuMf1O!F`~Uy| delta 1036 zcmYk4YfMvT7{{OYw1u7)Sj&Ne1ww(-D_Uv*D_9ZGqG-j<;DH2GntF&tTAE(822j+v z`N<2<2jfQAmSDUlY7Q|besFFJ7^6|QWm_a$bo#+5;yv4(mz~p{s&8`6`M=Nm%m2BY z_gn5O?(}V?f{PQpt30M~Rl0@!s%b(vVKCiC^4;@YrsV3<_=pOmWhnv3!rSUabVde1 z1_8)NJ6)z)o(V93pU}ms1OxCX#%U|{#)PBvm{xQL28uxZ3M(~jgwzO!wLdBGh^_~- z^!2)?mVoh2`}5g!xbW8Y>c21GI=!jfJLPQnruw%V*njrN;qU4%0c;a<>BySx9lxF| zW2V0@Pn*71JT(R|i3jv~M2{EsdEGoEG55cWj!#@;Ucb_4I)0c_lMQe(84nB|9P+%{ z({S8IC91w>TmUbU@krC!L)TB=+?`f1@$%o#X1@kltdM*zbK}2r&SResdNTK%*f$db zcqUF@Qh_^^Mx3H(d`KCwKYN~PZjGyIE}qS9krmA>lNHA_7bZ`guFiO{GaTs)@X=^& zV}$o_i2B1l!#Qr5+?2aSR!su*1Mpvi*bn0-_btXSI>i54^YZghDarMtG71 zX$GxM{PE&5P$3K%BZL~Mz~==&Q~MVRR|@wkDD?`V(?k)fza6_uzL4$|zA1^38H|=* zb?~9hwchqt@9LHY-}>g3#lAI5yrwyPBF0BT{@&WQO3)CMK`a-rvCNLd#^NefUDCv3 zHDS<}DeW22w9_B!4R!}$24w#Ic{z?+Ik}&Itd$CQ@)SGFMVj{w4ck)V9I>sC$!S{^ z1xZkw0t4YNKC-#7&XSMS=7M*n)UhUtBG|>w$6_m!tj^7{cq= Date: Tue, 13 Aug 2024 11:28:34 +0000 Subject: [PATCH 2/8] Format readme --- README.md | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4ab8b04..36e4c46 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ [![build test and commit](https://github.com/kristjanvalur/stackman/actions/workflows/buildcommit.yml/badge.svg)](https://github.com/kristjanvalur/stackman/actions/workflows/buildcommit.yml) # stackman + Simple low-level stack manipulation API and implementation for common platforms ## Purpose + This library aims to provide a basic API to perfom stack manipulation on various platforms. Stack manipulation involves changing the machine stack pointer while optionally saving and restoring the stack contents. @@ -29,10 +31,14 @@ Additionally, it provides a set of pre-assembled libraries for the most common platforms so that no assembly steps are required by users. ## Features + - Simple api + - `stackman_switch()` and `stackman_call()` are the only functions. - The caller provides a callback and context pointer to customize behaviour. - Simple implementation + +- Simple implementation + - The code involving assembly is as simple as possible, allowing for straightforward implementation on most platforms. - Complex logic and branching is delegated to the C callback. @@ -40,23 +46,33 @@ platforms so that no assembly steps are required by users. 1. Save and restore volatile registers and stack state on the stack 2. Call the callback twice with the current stack pointer 3. Set the stack pointer to the value returned by the first callback. -- Assembly support + +- Assembly support + The straightforward and application-agnostic switching allows the switching function to be implemented in full assembler. This removes the risk of inline-assembler doing any sort of unexpected things such as in-lining the function or otherwise change the assumptions that the function makes about its environment. This assembly code can be created by the in-line assembler in a controlled environment. + - No dependencies + The library merely provides stack switching. It consist only of a couple of functions with no dependencies. + - Stable + There is no need to add or modify functionality. + - Libraries provided. + The aim is to provide pre-assembled libraries for the most popular platforms. This relieves other tools that want to do stack manipulation from doing any sort of assembly or complex linkage. Just include the headers and link to the appropriate library. ## Supported platforms + The current code is distilled out of other work, with the aim of simplifying and standardizing the api. A number of ABI specifications is supported, meaning architecture and calling convention, plus archive format: + - win_x86 (32 bits) - win_x64 - win_ARM64 (experimental) @@ -65,7 +81,8 @@ calling convention, plus archive format: - AAPCS (32 bit arm) - AAPCS64 (64 bit arm) -Supported toolchains: +### Supported toolchains: + - Gnu C - clang - Microsoft Visual Studio @@ -74,16 +91,21 @@ Other platforms can be easily adapted from both existing implementations for oth projects as well as from example code provided. ## API + There are two functions that make up the stackman library: `stakman_switch()` and `stackman_call()` who both take a `stackman_cb_t` callback: + ```C typedef void *(*stackman_cb_t)( void *context, int opcode, void *stack_pointer); void *stackman_switch(stackman_cb_t callback, void *context); void *stackman_call(stackman_cb_t callback, void *context, void *stack); ``` + ### stackman_switch() + This is the main _stack manipulation_ API. When called, it will call `callback` function twice: + 1. First it calls it with the current opcode `STACKMAN_OP_SAVE`, passing the current `stack_pointer` to the callback. This gives the callback the opportunity to _save_ the stack data somewhere. The callback can then return a **different** stack pointer. @@ -98,14 +120,17 @@ Depending on how the callback function is implemented, this API can be used for saving a copy of the stack, perform a stack switch, query the stack pointer, and so on. ### stackman_call() + This is a helper function to call a callback function, optionally providing it with a different stack to use. + 1. It saves the current CPU stack pointer. If `stack` is non-zero, it will replace the stackpointer with that value. 2. It calls the callback function with the opcode `STACKMAN_OP_CALL`. 3. It replaces the stack pointer with the previously saved value and returns the return value from the callback. This function is useful for at least three things: + - To move the call chain into a custom stack area, some heap-allocated block, for example. - To query the current stack pointer - To enforce an actual function call with stack pointer information. @@ -114,17 +139,21 @@ The last feature is useful to bypass any in-lining that a compiler may do, when a proper function call with stack, for example, when setting up a new stack entry point. ## Usage + - Include `stackman.h` for a decleration of the `stackman_switch()` function and the definition of various platform specific macros. See the documentation in the header file for the various macros. - Implement switching semantics via the callback and call `stackman_switch()` from your program as appropriate. See tests/test.c for examples. -There are two basic ways to add the library to your project: +There are two basic ways to add the library to your project: Using a static library or inlining the code. + ### static library (preferred) + - You link with the `libstackman.a` or `stackman.lib` libraries provided for your platform. ### inlined code + - You inlude `stackman_impl.h` in one of your .c source files to provide inline assembly. - You include `stackman_impl.h` in an assembly (.S) file in your project to include assembly code. - (windows) You include `stackman_s.asm` in an assemby (.asm) file in your project. @@ -132,7 +161,9 @@ There are two basic ways to add the library to your project: over separate assembly language source. ## Development + ### Adding new platforms + 1. Modify `platform.h` to identif the platform environment. Define an ABI name and include custom header files. 2. Use the `switch_template.h` to help build a `switch_ABI.h` file for your ABI. @@ -140,8 +171,10 @@ There are two basic ways to add the library to your project: 4. Provide cross-compilation tools for linux if possible, by modifying the `Makefile` ### Cross-compilation + Linux on x86-64 can be used to cross compile for x86 and ARM targets. This is most useful to generate assembly code, e.g. when compiling stackman/platform/gen_asm.c + - x86 requires the -m32 flag to compilers and linkers. - arm32 requires to use the arm-linux-gnueabi-* tools, including cc and linker - aarch64 requires the aarch64-linux-gnu-* tools. @@ -151,23 +184,27 @@ The x86 tools require the **gcc-multilib** and **g++-multilib** packages to be i platforms may need to be done independently. #### Cross compiling for x86 (32 bit) on Linux + - install __gcc-multilib__ and __g++-multilib__ - *compile* **gen_asm.c** using `gcc -m32` - *make* using `make PLATFORMFLAGS=-m32 test` #### Cross compiling for ARM (32 bit) on Linux + - install __gcc-arm-linux-gnueabi__ and __g++-arm-linux-gnueabi__ - install __qemu-user__ for hardware emulation - *compile* **gen_asm.c** using `arm-linux-gnueabi-gcc` - *make* using `make PLATFORM_PREFIX=arm-linux-gnueabi- EMULATOR=qemu-arm test` #### Cross compiling for Arm64 on Linux + - install **gcc-aarch64-linux-gnu** and **g++-aarch64-linux-gnu** - install __qemu-user__ for hardware emulation - *compile* using `aarch64-linux-gnu-gcc` - *make* using `make PLATFORM_PREFIX=aarch64-linux-gnu- EMULATOR=qemu-aarch64 test` ## A note about Intel CET + Intel's *Control-Flow Enforcement Technology* is incompatible with stack switching because it employs a secondary *Shadow Stack*, that the user-mode program cannot modify. Unexpected return flow after a stack switch would cause the processor @@ -179,6 +216,7 @@ code may be run in such a protected environment. See https://software.intel.com/content/www/us/en/develop/articles/technical-look-control-flow-enforcement-technology.html for more information ## History + This works was originally inspired by *Stackless Python* by [Christian Tismer](https://github.com/ctismer), where the original switching code was developed. From 4653b88b812e0d29f461e47d3c50131107fe4b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Tue, 13 Aug 2024 11:28:44 +0000 Subject: [PATCH 3/8] fix typo --- stackman/platforms/switch_x64_msvc.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stackman/platforms/switch_x64_msvc.asm b/stackman/platforms/switch_x64_msvc.asm index 5143276..998eb24 100644 --- a/stackman/platforms/switch_x64_msvc.asm +++ b/stackman/platforms/switch_x64_msvc.asm @@ -104,7 +104,7 @@ NESTED_END stackman_switch, _TEXT$00 stackman_call PROC FRAME push rbp .pushreg rbp - ; now our stack is 16 byte aligned. don't need additional spacle + ; now our stack is 16 byte aligned. don't need additional space ;sub rsp, 040h ;.allocstack 040h lea rbp, [rsp+00h] From 95ab6292f324a05022651c9924055c0f0f391207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Tue, 13 Aug 2024 11:28:51 +0000 Subject: [PATCH 4/8] Remove unused vars --- tests/test.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test.c b/tests/test.c index e6b726e..a8beffc 100644 --- a/tests/test.c +++ b/tests/test.c @@ -254,8 +254,6 @@ void test_04(void) /* test stackman_call() with a null stack pointer */ void test_05(void) { - char *block, *stack, *stack2; - int i, cnt; ctxt01 ctxt; assert(STACKMAN_STACK_FULL_DESCENDING); From b75cf54227a3330cf57eea4b3f047b7e6b97514c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Tue, 13 Aug 2024 11:29:27 +0000 Subject: [PATCH 5/8] format python helper --- tools/strip-lib.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/tools/strip-lib.py b/tools/strip-lib.py index a64aa97..f783d81 100644 --- a/tools/strip-lib.py +++ b/tools/strip-lib.py @@ -7,8 +7,8 @@ # There are some additional fixes added for reproducability, such as fixing the zero-padding of names in the coff # section headers. -import sys import struct +import sys verbose = True @@ -96,8 +96,6 @@ def read_lib(fp): print("coff length:", len(result["o"][-1])) h = None - return result - def write_lib(fp, lib): fp.write(libheader) @@ -184,15 +182,13 @@ def first_lm_read(fp): offsets = [] strings = [] - for i in range(nos): + for _ in range(nos): offset = fp.read(4) offsets.append(struct.unpack(">L", offset)[0]) - for i in range(nos): + for _ in range(nos): strings.append(readcstr(fp)) return {"offsets": offsets, "strings": strings} # sometimes there is an extra \0a after the strings - p = peek(fp) - return zip(offsets, strings) def first_lm_write(fp, lm): @@ -208,16 +204,16 @@ def second_lm_read(fp): # number of members m = struct.unpack(" Date: Tue, 13 Aug 2024 11:32:58 +0000 Subject: [PATCH 6/8] Add solution files for VS2022 --- vs2022/stackman.sln | 44 +++++ vs2022/stackman/stackman.vcxproj | 230 +++++++++++++++++++++++ vs2022/stackman/stackman.vcxproj.filters | 67 +++++++ vs2022/stackman/template.c | 15 ++ vs2022/test/test.vcxproj | 152 +++++++++++++++ vs2022/test/test.vcxproj.filters | 22 +++ 6 files changed, 530 insertions(+) create mode 100644 vs2022/stackman.sln create mode 100644 vs2022/stackman/stackman.vcxproj create mode 100644 vs2022/stackman/stackman.vcxproj.filters create mode 100644 vs2022/stackman/template.c create mode 100644 vs2022/test/test.vcxproj create mode 100644 vs2022/test/test.vcxproj.filters diff --git a/vs2022/stackman.sln b/vs2022/stackman.sln new file mode 100644 index 0000000..6dff39b --- /dev/null +++ b/vs2022/stackman.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30717.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test\test.vcxproj", "{CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}" + ProjectSection(ProjectDependencies) = postProject + {BF7D0638-AC4F-4206-B426-66CDDD468281} = {BF7D0638-AC4F-4206-B426-66CDDD468281} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stackman", "stackman\stackman.vcxproj", "{BF7D0638-AC4F-4206-B426-66CDDD468281}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|ARM.ActiveCfg = Debug|ARM + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|ARM.Build.0 = Debug|ARM + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|ARM64.Build.0 = Debug|ARM64 + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|x64.ActiveCfg = Debug|x64 + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|x64.Build.0 = Debug|x64 + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|x86.ActiveCfg = Debug|Win32 + {CAFDBD3E-9D0D-4E90-BB6D-6C2A19F5EF53}.Debug|x86.Build.0 = Debug|Win32 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|ARM.ActiveCfg = Debug|ARM + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|ARM.Build.0 = Debug|ARM + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|ARM64.Build.0 = Debug|ARM64 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|x64.ActiveCfg = Debug|x64 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|x64.Build.0 = Debug|x64 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|x86.ActiveCfg = Debug|Win32 + {BF7D0638-AC4F-4206-B426-66CDDD468281}.Debug|x86.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A71982F0-A89C-45AB-9F23-149A1983A11B} + EndGlobalSection +EndGlobal diff --git a/vs2022/stackman/stackman.vcxproj b/vs2022/stackman/stackman.vcxproj new file mode 100644 index 0000000..cb9614a --- /dev/null +++ b/vs2022/stackman/stackman.vcxproj @@ -0,0 +1,230 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + + 16.0 + Win32Proj + {bf7d0638-ac4f-4206-b426-66cddd468281} + stackman + 10.0 + stackman + + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + true + v143 + Unicode + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\..\lib\win_x86\ + $(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\..\lib\win_x64\ + + + true + $(SolutionDir)\..\lib\win_arm\ + + + true + $(SolutionDir)\..\lib\win_arm64\ + + + + Level3 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + pch.h + OldStyle + + + + + true + + + /Brepro %(AdditionalOptions) + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + pch.h + OldStyle + + + + + true + + + /Brepro %(AdditionalOptions) + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + pch.h + OldStyle + + + + + true + + + /Brepro %(AdditionalOptions) + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + pch.h + OldStyle + + + + + true + + + /Brepro %(AdditionalOptions) + + + + + + + + + + + + + + + false + Default + + + AssemblyCode + AssemblyCode + AssemblyCode + false + false + false + Default + Default + Default + false + false + false + true + true + false + true + + + + + false + true + true + true + + + Document + true + true + true + + + true + true + true + + + true + true + true + + + + + + + + \ No newline at end of file diff --git a/vs2022/stackman/stackman.vcxproj.filters b/vs2022/stackman/stackman.vcxproj.filters new file mode 100644 index 0000000..9f57a1f --- /dev/null +++ b/vs2022/stackman/stackman.vcxproj.filters @@ -0,0 +1,67 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/vs2022/stackman/template.c b/vs2022/stackman/template.c new file mode 100644 index 0000000..2fe7dbd --- /dev/null +++ b/vs2022/stackman/template.c @@ -0,0 +1,15 @@ +#include "..\..\stackman\stackman.h" + +/* + * template file to create assembly code (template.asm) to modify and add to real assembler. + */ + +void* stackman_call_templ(stackman_cb_t callback, void* context, void* stack) +{ + // We use this variabl here for the template generation. Int the modified assembly + // code, we will store the ebp (base pointer) in that place on the stack, + // before storing the original unmodified stack pointer there. + void* localvar = stack; + return callback(context, 2, localvar); + +} \ No newline at end of file diff --git a/vs2022/test/test.vcxproj b/vs2022/test/test.vcxproj new file mode 100644 index 0000000..266eb72 --- /dev/null +++ b/vs2022/test/test.vcxproj @@ -0,0 +1,152 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + + 16.0 + Win32Proj + {cafdbd3e-9d0d-4e90-bb6d-6c2a19f5ef53} + test + 10.0 + + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + + + true + + + true + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + ..\..\stackman + + + Console + true + ..\..\lib\win_x86;%(AdditionalLibraryDirectories) + stackman.lib;%(AdditionalDependencies) + + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + ..\..\stackman + + + Console + true + stackman.lib;%(AdditionalDependencies) + ..\..\lib\win_x64;%(AdditionalLibraryDirectories) + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + ..\..\stackman + + + Console + true + stackman.lib;%(AdditionalDependencies) + ..\..\lib\win_arm;%(AdditionalLibraryDirectories) + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + ..\..\stackman + + + Console + true + stackman.lib;%(AdditionalDependencies) + ..\..\lib\win_arm64;%(AdditionalLibraryDirectories) + + + + + + + + + \ No newline at end of file diff --git a/vs2022/test/test.vcxproj.filters b/vs2022/test/test.vcxproj.filters new file mode 100644 index 0000000..154d04b --- /dev/null +++ b/vs2022/test/test.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file From a7770842a21b5139a107de027d5962d707d642f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Tue, 13 Aug 2024 11:53:10 +0000 Subject: [PATCH 7/8] update build workflow --- .github/workflows/buildcommit.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/buildcommit.yml b/.github/workflows/buildcommit.yml index cfc7faf..6255c19 100644 --- a/.github/workflows/buildcommit.yml +++ b/.github/workflows/buildcommit.yml @@ -30,7 +30,7 @@ jobs: PLATFORM_PREFIX: ${{matrix.platformtools}} EMULATOR: ${{matrix.emulator}} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: install multilib run: sudo apt-get install --no-install-recommends -y gcc-multilib g++-multilib if: ${{ matrix.name == 'i386' }} @@ -53,7 +53,7 @@ jobs: path: lib/${{ env.abiname }}/libstackman.a build-windows: - runs-on: windows-2019 + runs-on: windows-latest strategy: fail-fast: true matrix: @@ -71,17 +71,17 @@ jobs: folder: arm64 steps: - - uses: actions/checkout@v2 - - uses: microsoft/setup-msbuild@v1.0.2 + - uses: actions/checkout@v4 + - uses: microsoft/setup-msbuild@v2 - name: build - run: msbuild.exe vs2019\stackman.sln /p:Platform=${{matrix.platform}} + run: msbuild.exe vs2022\stackman.sln /p:Platform=${{matrix.platform}} - name: strip timestamps from lib run: python tools/strip-lib.py lib/win_${{matrix.platform}}/stackman.lib - name: rebuild after stripping - run: msbuild.exe vs2019\stackman.sln /p:Platform=${{matrix.platform}} + run: msbuild.exe vs2022\stackman.sln /p:Platform=${{matrix.platform}} - name: test if: ${{ matrix.native == 'yes' }} - run: vs2019\${{matrix.folder}}\Debug\test.exe + run: vs2022\${{matrix.folder}}\Debug\test.exe - name: Upload build artifacts uses: actions/upload-artifact@v2 with: @@ -93,7 +93,7 @@ jobs: needs: [build-linux-gnu, build-windows] if: ${{ github.event_name == 'push' }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: actions/download-artifact@v2 with: path: lib From d812c9dc5ac0e15ba6c0bc66cef3b51b5f763c07 Mon Sep 17 00:00:00 2001 From: Automation tool Date: Tue, 13 Aug 2024 12:04:45 +0000 Subject: [PATCH 8/8] Automated build --- lib/aarch64/libstackman.a | Bin 3990 -> 4318 bytes lib/arm32/libstackman.a | Bin 2774 -> 2774 bytes lib/sysv_amd64/libstackman.a | Bin 3854 -> 3926 bytes lib/sysv_i386/libstackman.a | Bin 2790 -> 2838 bytes lib/win_arm/stackman.lib | Bin 3938 -> 4982 bytes lib/win_arm64/stackman.lib | Bin 7998 -> 9414 bytes lib/win_x64/stackman.lib | Bin 6090 -> 7150 bytes lib/win_x86/stackman.lib | Bin 11074 -> 21610 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/aarch64/libstackman.a b/lib/aarch64/libstackman.a index a2316bd9d5f35c8a4aec2547e6848b4b9d240317..c30dcd0259965b9601e523027e70c6044d69eeb4 100644 GIT binary patch delta 896 zcmZva-D(p-6vt;~Ke|bq#x__(MK|k5P1S66<4TJKlah;y1r?-tBcy4vlwiArCX0fg zh=LdKBH@U>Kz)Kff|t4S1@yuj-=SW3W_CtG=z-nyKfnF&nK{FJv41+lhi1A$NV+n5 z@>mN34=$&?o0dWTM@^_2StJW&6}3UA#S!JNOQX}Pntjm*hi+{82n=Egmrm*Fe1=er z#EZga{1+Y!byhT>TaR`Mb$_kk`)&Z==wL36dY%0!Y!^CFAIj`{uGeq2UK}=~vJ!5K z^QtO|5^jr-t$O`lp}4abNBvmzbiI-vi_(8nskmOSDlxoczhJ24pge29D=kmw;Rm}w zGceMew_-xEQ9?|y<>Zx-n&IYC6MS)kr%_*%_0klVC0U-}YAueOgs1U@k_EoPhHh_O znXvQr>#|;%;?HI6P4N(3&IRyMzq4`_9yHx{xEJp?4mwdtr0(^Pl;jx3dIN44ziA0( z&9#NDmh>CSwpn;;mgyn9H>(ujyICy}J^7SZ4$L$7sM!>6Bcpioxzvet-i2+$ZZ@#u zEozdgl$U)UNRY+M&waXY7a6}#YH*Yy{>Xd`gBja-jn!GMPaI-&g=>K7EZ1M@y3Jk2 tXYS&Yup+~>1j|H~4o zT^y0P1qbjvvL0iJR;KQ`IOar(QW2lHB zH292?%m#1>Y=pT3Q^96VpC)7ov`?iMXdKKyDfug^T+50 zru=Doj01l7Z$ot+51TN)Y<{e!9 diff --git a/lib/arm32/libstackman.a b/lib/arm32/libstackman.a index ce4199d5e791616603e51ac93b275c510600e043..426030f1261033db9afd5265a6304f3469b6467e 100644 GIT binary patch delta 213 zcmca6dQEh~J#kG21_o9JMiwB&z^Di$WO;$ayop~X@woeiDmWXOD;OH;nM~fwSU9?gmfdOPL z6DI?M5R?{!(o!HAs7P^hGjlQ{qweJAEZ&TXlZ{!`8QUjEv-&g6pS+q?opldT*`dkT jS(RDq7#SFJCjVzuW?IEKxq(S+vK5;Ev@!>7fc*@F0Y=i6z*srAZ)A zunK~QVoiLWg@Q=Qr9$qde}(iDccZze(l$c0 z4f`RZWht{i#%biB9zbN?!=~+SL$x9E|ysKv{M(Q^D3RT>}*nE`0X>{C}@0CY*(L8bmT0_>^H<*SCgOb)d;>4I zDG$DJ?*W;<#vu#NdCwd#SWI?@9)Bil`vNa_Yxong;GHj%+A6OXtx|cVzE)VTxMd`D zwYKF+jti`Ycz7Is_#VJ+I01|PV>}HrS^_Nf($J|qVN-4vfye3$-H_EJ9EMG3t5FJ) z#02@NMw1Qs*immK8wXf=-^1f2_@Ir^j_kU{*W&_2^s!`9IxO@#(Em7W!b9e8D!abI zOU=aFg6)aFBtn~l?F#l+vYUc^;=7X+fj49nj>3bG3Pdm4^3n&=a*&M!u&v*qCvqkX zhx#l%kq7+Jy>!4KncJ;>hkPTQNAxr9JP#ccJO$VFyw;Fb{QL^HB4-#5^n3KFbbP`+ F{sHLmkn#Wk delta 805 zcmZuv%}*0i5Pu)t?Y`2tZLPqnkt~uxQE0m{h7c3e!~=;3H8Gw%Gzd*oJ{A(d3km!M zATSqB#ETa-hQLWr{sTrYeq2aA_r%de56-;4B@Hs!nfc9cW@l#KzV8Fu13M2~ug#d( z-hKQ?L=l{*Xtb7MXHqk$#_}x3N{Bltj}x8U{W~Q6Yd+lIcS~20kgSN7^FO{u%c%$z zpQ(pW!~4-hI9a|8Z~0bsEnaCg{i_>v=2B$IR8p~Lw3lo*?;+4hZ3g`IOHts#gf3Puq zCJFWTP$LRRLSs7#8nAEU?u8uUU_I3=%r>5{HR}tlxWUQ>gXh#?&iTd1AoTlSOKXVT z%LPw%+U(eF8o;fn1se^UTCEkd-9YVGHauf*ri1Z)+aX9gpiiUH@+1jgN6hhLi|WYm zj9pLq49-&ywQ4ho`(nX~sr;p&oWNDNRGf4-S#j2NgdJW`8f}{YfvP zgx33rv(T?@so%mRFru^3xj}Vkzv^YOBfL?OxMS|GD9Ph|=79fyk+_4iD|nqQ9l!7S eB={>>@~8A^r#Yj)=FvQ{Ea23?$G<`)H}Vf|)Nb(r diff --git a/lib/sysv_i386/libstackman.a b/lib/sysv_i386/libstackman.a index d5e977120323b9c8dc373f67db9902697b342880..1d91d87d0631057b92a0d6d3acae7e872c27a291 100644 GIT binary patch delta 842 zcmYjPJ8u&~5T3c0AHgq3EFcD7NP=x3htC)=G$6UKM52%;5(Nm^i4|GIC*+3&1#t<5 z3(QD}4k0S)P$2jNDP4d>k9bIkUqHjmX;)#S+3(x$o1NX;y&rQgv(Ili5eFdROg3(t zS1L97=oHt+CWKK9$08hs43wDLfR;#@;NjGgP!)z15oTI;Cm3)+2A7k^X3YG2p62k< zy3d{sR@ej)|0WZ_fUI&d$s0B1cR3B_DQt@~4Emj&puO!%%f|YqTlcTJzVB6Og72w^ zv$S9=-RKXRTMxR;05tKo02=lBb+@?L8U}-5xWp^3_``7O?^P;Zxmr>(Wvp3BMo-h! za9^0|(G2f=7$zKn{~JfyLcSdNezbuvhLNu?tMH^CU(tf{*#a~G&M5z^!m>i}`j5MV zW{Yvq6QtkK9KALD=o}KT~qYa%43rv zb^)K#MY}LMU`NiK;*>{{7nFIEQ(i#FYbKZVgi(9P>*56Rysaw}-Wmo=x%-M-S%s94?J*k-Psxpzy+u=)-KjK%06FU^VuZ;l=cOA+H~Vh04(BoIF$3k;gHHW zefP3(FvJ$|I4rP5l)$}P@kX~3w_A}c-Pl}hK76zqPo|*Wggf*1quHsM=vIB2UgJkP z@F(c28l;^dinvQ(JWzcsz~hJZRULgYUZs^iL*~!KIq2`sn_6a(jZ|R z;eH@vm0`-PC0=5cVWskx!AKggPq}V_rMt){*8c($kvdVn9_Q1#H=LXRpi;It_$1-j zIr)zCSeI$X4itWJ*%wZRta*BGhjE*J*sA%>$9_hKc2-X{Zo0n**Y}$K98S6pi8=3T rPV*t$J8bDB3C{EBJ^7r diff --git a/lib/win_arm/stackman.lib b/lib/win_arm/stackman.lib index a34a92bc2f92f3d40ea74a910dcc845e726e3d6d..b45daad322ffab94960626d02199ef712a18370b 100644 GIT binary patch delta 1798 zcmaJ>ZAe>Z6h686XucD5uF|5$n5ymS@iUB$N8PMnr(w`q);nyXn7Em&BD zTE@o4U@r)kZB-HGAE7vZv;$$t*a}j&AHp`)c64+fbRAplR#q8x=ic0Vjn3`BoArI!uBk#>y@~v-dNtcowUO@zpa6uf zX4Mtx3_?D~vmcCkHoUXKvTmQRrm60zlTBWTrow$}D8aFOK@ELi-v;$GdVM~|A7JCL zP^xDz!69aQx`4|W@Oqm9Y%&!J_j92EF>e~NmD}<$N1a|*W20vi8|C7$9sZbcxn2HR z#xDaKa9Dp}2RHHHM8T#sFWfy-zG$^i9vL66oB6UseLOigIrf86d+*)451-swOanLt zpn5THwDn5=TgT?-e_T5Ijp207MCtTTAHQ8RHd5csIqCs=1l+k>)3=tJEtf8KJ#*%z z;wO*W{E_i@R$ygzx9R=wW-A{8ObfWxk-iOw{>H%i!{}u7*G|X9PQzSRO#gd+NPGH@ z_5KvVDvzsD`hJd--d{N|G2gU)=yhfPoZ_n)_xU&Pc^XW67VL!uSluH8Zjh7ez2uNm zXORcU4~6a{r_@DgFVIWFmrdmg$*IeegR);!#^}Ycl05zjvdqLF98c^^;9;hqLE>}>h z1~Lg!s@YAZ414*_Z8H>WYZ%(?_A#~OHBAw7}paPFhkuDJFJ2FSu7Q7)h+hG^TD>nU~eMC z*_xxVNK#60*jPbWolog?Ims2B--b8M1cx~L)*v|-xu!cPfS=Ph>aySq(E)N*S8vR| z!tr?4u&)9#Po)Z4qp4)@WK(-{=ZlT4!5Z2}JA*CQ3)V?CjAc?aI3%mw4&N*9pE8x? z_{(Jf_I4>nwp~(YE|vlg8+)~4OJQ==L=&sNs8H?^9<628#S$^fNnY0H3(d8dP6+pe zsfLfp&uuM{!pUaHipinvz*qw=8OGKZY<83#UngY9fZ1{2jaXOh2TMmvYe&leJlO9U zUi$XLGQ<3OoBuMrG=vAaI34XqZeB3ArFkml*KbpDNfe!+6sZ}&vyXbPiIaF$zzF6t z{KYMWO-n7ls4W(rb0t6C4tx&c;ge;}x!f#R6{BRor8v!Vxl+N?^H#Zx&;R9KmfeYM YS@ys960a`$^z5oCK delta 802 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 delta 1524 zcmbW1-EZ4e6u^(|#LHI`J6}!HI&nQWbYn3|Lq|KNvQ86Hpd&CksTvt-mUvYl32B;a z6PozgAAnlUUU)#Gk4zO3D=*WeeF%iuw4#9!(jKTbsR(I|PU)nf^00F4#5CQ?ggCN% ze9yV}oO6AC_kNqaI5hn_bq9Yjg=Q*a>>U%pvS;STL*}`G1pYwzDChid)KQ9#4`PZL zHVJT{hNl^YCh8mJY089?9lNpL#NjKZMPGs}5_K83<<7F8$q}6Og>l?0+hiKxSqfl` z!H>)meVV~@<_LS80r-i*MRSN9wE`?MxXUk@V`OC?X8e^#Vn3ds+VC>#aA*Ypct9_N zYwta`rI+dskl7?KaMa9D@xAL`-(Fl3;$LhXInxPnpV$+qFkyduFg;bxWZy1kO6jUv zEEh6WRmsjjw7x+3T6|D{7tDUL3UHQh$5TR3tATe4mcBtH5sN1h_IfPEFT}k{BHW{M^&ix4Pi^vwkvq>XY(Yv4h^(H{Sn#_}2$Zmy<)s zSNFM7lWDEjn(WEGQ!Fd_+=bf5-dAav#sl8Z=us=$o?`BEWY zQt`=LZ{U+a68HyU_^Zjs6Is?9x+d)P7}Rb;v_9u?h#PPV;UNCVxp5-o{SVwmT0tb` z@{MxAV40lx$7r3<^RJ2tE36o2%|LRU+Wq>hd)?&X!~K$M(e4&|E4`aidsUL9I`i{) we@w*Q{J`4dNGWGIomH;QKe8xdBBi2wiq diff --git a/lib/win_x64/stackman.lib b/lib/win_x64/stackman.lib index 8a754a3ddf7f72817bfd5dc84cbadf136d84f897..532bf92dcb59e7b642546f50d591b60a652887ca 100644 GIT binary patch delta 2145 zcmaJ?eQZ-z6hE(BYxml2{aDwHIo6fJ#z#xnvaWngwsjjrhCw6*Oyi@p-PWyd9c?$r zASsxM9|07ul7J8=Voa1JxS>&!2^td(8r&Zk{1^%eijq0jp#c^Np8MLaV<5M=@16TQ zzkBaF=iU43xrL(@uk|a=DgZ^b+Ub+kk(#(NxMH@w8hpmj1N*-Uk1~CS^L44y${h6H&A8posFaAl0hSBAqp$9LH~)>N>O?vzziX>Yb#Z9?)@ym*3Lr|#(?^Yi$irB13I3b%!;@Ser zRjCVQi>wyA-D#~Ln#_^dzqq3gyIcs8S}YvFaB~H$H)*jjoB^N}u**q{1qIeXBVeke z#li}-as+Hu(qdr~T6zKVB`p?k5s*R_iLsR;UC+R0Yz8BtHC2!;`h0R(emmdpv^mnn zM;EraO5Bme6$Q*NQ7UJxZ@@30z!=xj<*>2Xt3Xv_;Uit%R^BUs_@J{tNpeyc^3Ga( z{>`1urgbT-7Qg0T26;|tl$IjKD9LW+7FxGEO0$C2m=-~(wJmE-ERK|~u+IgB+JNsw z<2YNj%~`+LQO-rS2BO{;ZkuBfM+2&A0pm1kd9B0gwAQ$|j-V&n6bkdmnZBIMR_1az z>RenT>hZSmp7!LrG31s^ThCfu=CIY);?^l{fbR%CWMiw%ZmX%V)=UzsuvmX%247=O z9M`N$A{KS8Y6wZJ->-%R}L(G@6M&c7(f}44PwcldgrRcZF?H} z`+xsp(~t7Ciw+eXyLNhSUQc(Wk2h5UGzq*`WA?G(>Ra}gPQ1QU+*LQ>4-LybdsecB zqqlc#|MT;U0LKL0h3=MnCic_ziIG6B`G+#o_6_pBjX`!y4q@B;F%^8K&&}3Sw!&`!SzQ6TTJr%?{yB`p?i2xE%T zu<*tqV+Ph5Wd}zylNJjuwD6!KwjybnZHVP*KiiDb?hV_9+rzZ$; zDU%4-@JzJR7YMlpt=gM2hxDnPGE`5C)!peOYVCYt)oBDdHET*qOqZ9Pa7J1@VZYA^ zG%h3Q)f7n+ILXplCa1`>RZ2^ldu6*f*y;1TJ9%<4Cr<-6$K#{PYCTY+bY4qx4AMuq z?Kve267F<%FrHdAk><4In$wAm>FQGhAt(h6Y9cwCRBLi*szTa_b*qK1tTa`D&cUS^G{3BuYMn+7``sFbyu=E(G+f->qCy1GZGy{~+7F|#CQfe!3 z1h^QVc%C7RRN#pI;ieI)#HkU!O*jl;r;8=vsfsP2OfA{3FO1P3#0(Yf``ZgRe54|C c+`}}Ou$<)^r0Y1g+fF`AGdJbt(~_NMGk%uU1m$at{yB`@ZL#=Q-~wwZGVL z?SXN|2*3dVq2JVjO;d00SlS|9bqomcNuGuPwil5Yh+e7!a8&?|;566BmH6UI?kHCw ziXt{wHH1ZV6@XfDHPPs~_-O(^dXJS(KG`!0&`D#pjL;(9OejK+1ND1#*-0N2ReKF_iJ^zgj)i;@8vAhgb?1I4C zJlYZ2hIeglrgO&b$Fcf4TI?5Sj|D}kAm{QpVBM*<+;MBOf!6-eYO%}eFs`I2gRxv9 zzLr?BcI#IHayE-)YY+!*Mu)U7Bc}@Sgj7iTU}>?;k(D!`+1d2Z23xTC*XgKPb1arm zrBBPaVDs9bTv}Drn@lB?^_tG`t6Fft>B1IkOPxm0bF3Oc57DiPeB|iYt%UJ})5EfB z)})+IW^#ESUT|*Z57R9T?554m5L0LQQ=K<(gbBoXXOnOGx$Vi&^5@$jlKnRCUg~GA zv(Y7=O=pA2IDLFOTt33#L02c4#f;0*bBM+1qlXH@TJrA^lm~~ENSjKs=B^-K75_Og F{uffD2#o*$ diff --git a/lib/win_x86/stackman.lib b/lib/win_x86/stackman.lib index f35026b5f92993b154ba7f90cd7aaccd1f9b1b65..36b28c61295f87f127a07656893f32c6d82019e9 100644 GIT binary patch delta 7875 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 Jq{ley{{S^!3LXFe delta 1854 zcmZ`)3rv$&6h8NFOW!Y$Qcgj}m zm>-3|iY$^08c;?vER>^3tPg6ZXY|YQ6>(&cEd=1K95;&%j3Nq8h+F(=hM`fSm9eP; zgaDWFGD#t`hlhQVVFmy_Qj0JZgleG*FsC?C0ts{@Rna=4+8m);xWsHJTL`8A$gm(D z$XAFH0|=i((q(c1>m=lM>trf{k~`vO#q7x=UZxH#$RGt#Y6%u*`Vow>q@haA=UhZo z8-e*2HSV;?^fReNF!kYqwW-6|y4>q*Ew^{N+-+`}iclR&@2p;^#Y^(zM2bptEcPfW zi4uQO#F1e9ykHhaD@#czHYxA&*!=Q}b+}1&xJySX=%-1S*VU4A;LLc_#!ct5zb$wG zkVA{DB9U*^4R%jdY3x?q<;hK(QwADWi3rTcUfCC zc(rIYz#!+q+^T%?=vw2)ziCEd@5F}=Q998ssR-W|J$UGNwDn+i{Cg{oJ!}D};qcqH z-q~8=dEJz*)Zg*EvFbU%yBwbUsAxywp6ySE&P^1a{X@4JV2s0S+wSe3C+L@)CQ;_b zEWrfjQ#R$Iii~a2Ff(?nPOG^5>6zQfd+Y$?G_xx_?B$1Jq_LW3G#ar!*UHH&rp26m zkW|XaQ>lKrOJ5|Xc1cECo7>jm@_4W%E{n6c7+t|hal#@_cFiqTO}DJId!2YOCNpdb zY;J9GIK5t9L#xwX=f#k{Un(K^od_5Yefm zU*37(1v8;MKclfR|0t1Avh3DP_w@Lv<0$LN(pX04$<%?*%o;)zluj}D(2^`>*~@B% zFu7naQB#8DiCK2C*w}!uFq=m|;3lOG9YqNe%1utuW5o|ko(Wi+mH5$OlOiS4=JnYf z>)mz_jJD$%bL6x~MmPD$*lJxKTXB=uw<=@4t&`4zvLt7x6R@^)MB40Zb-TP?SGzM2 ztz`z>T9!`kxo+${D5`NV3#o#nyQ z*&qtk%YkHR&g908y7Ew}RY>U(&jLqaN|aXSxAr#JTb*?QBLmm^$4d%0XEOIqE zz5h?Dp1Z-Eiqhao66j&F0D;)^{+mIImHi