From 73261a4b988639460d1e6ba20f97adf3785010a1 Mon Sep 17 00:00:00 2001 From: Automation tool Date: Sun, 30 Jan 2022 15:41:35 +0000 Subject: [PATCH 01/20] 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 02/20] 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 03/20] 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 04/20] 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 05/20] 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 06/20] 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 07/20] 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 08/20] 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 Date: Sun, 16 Nov 2025 12:29:38 +0000 Subject: [PATCH 09/20] Initial plan From a24bcf9a3eee922d0187f698d0f315856f58bab8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 12:33:35 +0000 Subject: [PATCH 10/20] Initial plan for creating Copilot instructions Co-authored-by: kristjanvalur <6009543+kristjanvalur@users.noreply.github.com> --- lib/sysv_amd64/libstackman.a | Bin 3926 -> 3926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/sysv_amd64/libstackman.a b/lib/sysv_amd64/libstackman.a index 8b382415efe7e408879f0dc574d54b6d099a8386..367dabb84e45700057d8b2288e0e429e9733b527 100644 GIT binary patch delta 48 zcmca6cTH}?3PxsQJ>$)*8F?6`fDAnYU9-}p(!7#VqdFrKJp&U>1w)YhMW$9B0BS`J ABme*a delta 48 zcmca6cTH}?3Pxr_J(JC=8F?6`fDAnYUBl9((!7#V!#X1)Jp&U>1w)YhMW$9B0BJ)G A82|tP From 9a61d48a7400ce5ad7f8486c7102e4c259959577 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 12:37:42 +0000 Subject: [PATCH 11/20] Add comprehensive Copilot instructions for stackman repository Co-authored-by: kristjanvalur <6009543+kristjanvalur@users.noreply.github.com> --- .github/copilot-instructions.md | 96 +++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..724b838 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,96 @@ +# Copilot Instructions for stackman + +## Overview +Low-level C library for stack manipulation (continuations/co-routines). ~600 lines of C + assembly. Zero dependencies. Platforms: Linux (x86/x64/ARM), Windows (x86/x64/ARM). Toolchains: GCC, Clang, MSVC. + +## Build Commands (FAST: <1 second) + +**Always run in order:** +```bash +make clean # Clean build artifacts +make all # Build library (0.1s) → lib/[ABI]/libstackman.a +make test # Build + run 4 test suites (0.7s) +make abiname # Print platform ABI (e.g., sysv_amd64) +``` + +**Success output:** `*** All test suites passed ***` + +**Cross-compile x86:** `make PLATFORMFLAGS=-m32 test` +**Cross-compile ARM:** `make PLATFORM_PREFIX=arm-linux-gnueabi- EMULATOR=qemu-arm test` +**Windows:** `msbuild vs2022\stackman.sln /p:Platform=x64` then `vs2022\x64\Debug\test.exe` + +## Critical Build Notes + +1. **Intel CET:** `-fcf-protection=none` flag REQUIRED (auto-added by disable_cet script). Stack switching incompatible with Shadow Stack. +2. **Libraries ARE Committed:** `lib/**/*.a` and `lib/**/*.lib` are version controlled (unlike typical projects). CI rebuilds and commits them. +3. **Expected Warning:** Linker warning "missing .note.GNU-stack section" in test_asm is NORMAL - ignore it. +4. **Artifacts:** `*.o`, `bin/`, `tmp/` NOT committed. Libraries in `lib/[ABI]/` ARE committed. +5. **Incremental OK:** After code changes, just `make test`. Only clean when switching platforms. + +## Project Structure + +**Key Directories:** +- `stackman/` - Main source: `stackman.h` (API), `stackman_switch.h`, `stackman_impl.h`, `platforms/` (15+ platform files) +- `tests/` - 4 test files: `test.c` (6 tests), `test_cc.cc`, `test_static.c`, `test_asm.c/.S` +- `lib/[ABI]/` - Pre-built libraries (COMMITTED to git) +- `vs2017/`, `vs2019/`, `vs2022/` - Visual Studio projects +- `tools/` - `abiname.sh`, `strip-lib.py` + +**Core API (2 functions only):** +```c +void *stackman_switch(stackman_cb_t callback, void *context); // Main stack switch +void *stackman_call(stackman_cb_t callback, void *context, void *stack); // Call with different stack +``` + +**Architecture:** `platforms/platform.h` detects OS/arch/compiler → includes appropriate `switch_[abi]_[compiler].h/S/asm` + +## CI Validation (.github/workflows/buildcommit.yml) + +**Triggers:** Push to master/dev, PRs to master + +**Jobs:** +1. **build-linux-gnu** (AMD64, i386, arm, aarch64) - installs cross-tools → `make all` → `make test` (qemu for ARM) +2. **build-windows** (x86, x64, arm, arm64) - MSBuild → strip-lib.py → rebuild (MUST rebuild after strip!) +3. **commit-artifacts** (push only) - downloads artifacts → commits libs → pushes + +**Local validation:** +```bash +make clean && make test # Test native platform +git status # Verify no bin/, tmp/, *.o tracked +``` + +## Key Patterns & Workarounds + +**Making Changes:** +- Platform code: edit `stackman/platforms/switch_*.h` or `.S` - reference `switch_template.h` +- Always run `make test` after changes (fast: 0.7s) +- Test on actual hardware if modifying assembly (arch-specific!) + +**Known Issues/Workarounds:** +- **CET:** `-fcf-protection=none` REQUIRED (auto-added by disable_cet script) +- **Inline asm:** May be inlined by optimizer → use separate .S files or volatile pointer (see stackman_impl.h) +- **Stack align:** Use `STACKMAN_SP_ALIGN` macro + +**Testing:** 4 test executables, 6 tests each (assertions fail hard). Success: "test_XX ok" + "*** All test suites passed ***" + +**Include patterns:** +- User code: `#include "stackman.h"` +- Library impl: `#include "stackman_impl.h"` (once) + +## Configuration Files +- **Build:** Makefile (Linux), vs2022/*.vcxproj (Windows) +- **CI:** .github/workflows/buildcommit.yml +- **Linting:** None configured +- **Testing:** `make test` target +- **.gitignore:** Excludes *.o, bin/, tmp/ BUT includes lib/**/*.a, lib/**/*.lib + +## Development Tips + +1. **Trust these instructions first** - search only if info incomplete/incorrect +2. **Build is FAST** - rebuild freely (clean+test <1s) +3. **Test after every change** - `make test` is fast and comprehensive +4. **Cross-compilation optional** - CI validates all platforms, native x64 sufficient for most changes +5. **Binary files in git** - lib/**/*.a, lib/**/*.lib ARE tracked (expect binary diffs) +6. **Zero dependencies** - don't add any +7. **Minimal changes** - stable library, surgical edits only +8. **Low-level code** - assembly is platform-specific, test on actual hardware From 0f8236e2d81f20f32cdf47319d6280ddaa4cb55e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 12:47:38 +0000 Subject: [PATCH 12/20] Revert unintended library file change Co-authored-by: kristjanvalur <6009543+kristjanvalur@users.noreply.github.com> --- lib/sysv_amd64/libstackman.a | Bin 3926 -> 3926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/sysv_amd64/libstackman.a b/lib/sysv_amd64/libstackman.a index 367dabb84e45700057d8b2288e0e429e9733b527..8b382415efe7e408879f0dc574d54b6d099a8386 100644 GIT binary patch delta 48 zcmca6cTH}?3Pxr_J(JC=8F?6`fDAnYUBl9((!7#V!#X1)Jp&U>1w)YhMW$9B0BJ)G A82|tP delta 48 zcmca6cTH}?3PxsQJ>$)*8F?6`fDAnYU9-}p(!7#VqdFrKJp&U>1w)YhMW$9B0BS`J ABme*a From ea1ed9ef1bb4180e94f210ae81be7053fa0e9fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 12:52:56 +0000 Subject: [PATCH 13/20] Update GitHub Actions to v4 for upload/download artifacts --- .github/workflows/buildcommit.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/buildcommit.yml b/.github/workflows/buildcommit.yml index 6255c19..d858b1f 100644 --- a/.github/workflows/buildcommit.yml +++ b/.github/workflows/buildcommit.yml @@ -47,7 +47,7 @@ jobs: - name: set abi name run: echo abiname=$(make abiname) >> $GITHUB_ENV - name: Upload build artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: ${{ env.abiname }} path: lib/${{ env.abiname }}/libstackman.a @@ -83,7 +83,7 @@ jobs: if: ${{ matrix.native == 'yes' }} run: vs2022\${{matrix.folder}}\Debug\test.exe - name: Upload build artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: win_${{ matrix.platform }} path: lib/win_${{matrix.platform}}/stackman.lib @@ -94,7 +94,7 @@ jobs: if: ${{ github.event_name == 'push' }} steps: - uses: actions/checkout@v4 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v4 with: path: lib From 8bfcd7e4340432a0fbea89518d42732fdfd34ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 13:08:11 +0000 Subject: [PATCH 14/20] Update README: add missing platforms, CI info, and fix typos - Add win_arm (32-bit Windows ARM) to supported platforms list - Clarify that win_arm64 is 64-bit (not just 'experimental') - Specify Linux for AAPCS/AAPCS64 to distinguish from Windows ARM - Add Visual Studio version information (VS2017/VS2019/VS2022) - Add new Continuous Integration section explaining GitHub Actions - Mention that all 8 platforms are automatically built and tested - Fix typos: 'inlude' -> 'Include', 'assemby' -> 'assembly' - Improve formatting and clarity in static library section --- README.md | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 36e4c46..6eefc5c 100644 --- a/README.md +++ b/README.md @@ -75,17 +75,20 @@ calling convention, plus archive format: - win_x86 (32 bits) - win_x64 - - win_ARM64 (experimental) + - win_arm (32 bit ARM) + - win_arm64 (64 bit ARM) - sysv_i386 (linux) - sysv_amd64 (linux) - - AAPCS (32 bit arm) - - AAPCS64 (64 bit arm) + - AAPCS (32 bit arm - linux) + - AAPCS64 (64 bit arm - linux) + +All platforms are automatically built and tested by GitHub Actions CI on every commit. ### Supported toolchains: - Gnu C - clang - - Microsoft Visual Studio + - Microsoft Visual Studio (VS2017, VS2019, VS2022) Other platforms can be easily adapted from both existing implementations for other projects as well as from example code provided. @@ -150,15 +153,27 @@ There are two basic ways to add the library to your project: Using a static libr ### static library (preferred) - - You link with the `libstackman.a` or `stackman.lib` libraries provided for your platform. + - Link with the `libstackman.a` or `stackman.lib` libraries provided for your platform in the `lib/` directory. + - Pre-built libraries are available for all supported platforms (8 ABIs total). + - Libraries are automatically rebuilt by CI and committed to the repository for easy integration. ### 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. - In the case of inlined code, it can be specified to prefer in-line assembly and static linkage - over separate assembly language source. + - Include `stackman_impl.h` in one of your .c source files to provide inline assembly. + - Include `stackman_impl.h` in an assembly (.S) file in your project to include assembly code. + - (Windows) Include `stackman_s.asm` in an assembly (.asm) file in your project. + +In the case of inlined code, it can be specified to prefer in-line assembly and static linkage +over separate assembly language source. + +## Continuous Integration + +The project uses GitHub Actions to automatically: +- Build libraries for all 8 supported platforms (Linux: AMD64, i386, ARM32, ARM64; Windows: x86, x64, ARM, ARM64) +- Run test suites on all platforms (using QEMU emulation for ARM on Linux) +- Commit updated libraries back to the repository on successful builds + +See `.github/workflows/buildcommit.yml` for the complete CI configuration. ## Development From 343dcd490aaf34143e66213b3dec5050979163a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 13:11:08 +0000 Subject: [PATCH 15/20] Fix typos and technical inaccuracies in source files Typos fixed: - 'fillint' -> 'filling' (stackman_switch.h) - 'wiht' -> 'with' (test.c, test_cc.cc) - 'ithout' -> 'without' (test_cc.cc) - 'stackpoiners' -> 'stack pointers' (test.c, test_cc.cc) - 'incle' -> 'include' (stackman_impl.h) - 'identif' -> 'identify' (README.md) - 'argments' -> 'arguments' (switch_x64_msvc.asm) - 'suffle' -> 'shuffle' (switch_x64_msvc.asm) - 'nonvolatile' -> 'non-volatile' (switch_x64_msvc.asm) Technical corrections: - 'callee-stored' -> 'callee-saved' (correct ABI terminology) - Fixed inconsistent comments in switch_template.h that said 'volatile registers' when describing non-volatile registers --- README.md | 2 +- stackman/platforms/switch_template.h | 4 ++-- stackman/platforms/switch_x64_msvc.asm | 4 ++-- stackman/stackman_impl.h | 2 +- stackman/stackman_switch.h | 4 ++-- tests/test.c | 6 +++--- tests/test_cc.cc | 6 +++--- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6eefc5c..c0df8a7 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ See `.github/workflows/buildcommit.yml` for the complete CI configuration. ### Adding new platforms -1. Modify `platform.h` to identif the platform environment. Define an ABI name and +1. Modify `platform.h` to identify 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. 3. Provide an assembler version, `switch_ABI.S` by compiling the `gen_asm.c` file for your platform. diff --git a/stackman/platforms/switch_template.h b/stackman/platforms/switch_template.h index 149209f..850e051 100644 --- a/stackman/platforms/switch_template.h +++ b/stackman/platforms/switch_template.h @@ -31,7 +31,7 @@ void *STACKMAN_SWITCH_INASM_NAME(stackman_cb_t callback, void *context) /* assembly to save non-volatile registers * those, according to abi, that functions must save/restore if they * intend to use them - /* __asm__("push volatile registers") */ + /* __asm__("push non-volatile registers") */ /* sp = get stack pointer from assembly code */ /* __asm__("get sp into stack_pointer") */ @@ -41,7 +41,7 @@ void *STACKMAN_SWITCH_INASM_NAME(stackman_cb_t callback, void *context) /* __asm__("store sp from stack_pointer") */ stack_pointer = callback(context, STACKMAN_OP_RESTORE, stack_pointer); /* restore non-volatile registers from stack */ - /* __asm__("pop volatile registers") */ + /* __asm__("pop non-volatile registers") */ return stack_pointer; } diff --git a/stackman/platforms/switch_x64_msvc.asm b/stackman/platforms/switch_x64_msvc.asm index 998eb24..1ff34dc 100644 --- a/stackman/platforms/switch_x64_msvc.asm +++ b/stackman/platforms/switch_x64_msvc.asm @@ -49,7 +49,7 @@ NESTED_ENTRY stackman_switch, _TEXT$00 .allocstack 20h .endprolog - ;save argments in nonvolatile registers + ;save arguments in non-volatile registers mov r12, rcx ;callback mov r13, rdx ;context @@ -111,7 +111,7 @@ stackman_call PROC FRAME .setframe rbp, 00h .endprolog - ; suffle arguments into volatile registers + ; shuffle arguments into volatile registers mov rax, rcx ; callback mov rcx, rdx ; context into first arg mov r9, r8 ; and stack pointer in volatile registers diff --git a/stackman/stackman_impl.h b/stackman/stackman_impl.h index 36bd372..378145e 100644 --- a/stackman/stackman_impl.h +++ b/stackman/stackman_impl.h @@ -8,7 +8,7 @@ * defines: * STACKMAN_LINKAGE_STATIC - define to provide static linkage to stackman_switch() * - * See also stackman.h for main incle api + * See also stackman.h for main include api */ #define STACKMAN_SWITCH_IMPL diff --git a/stackman/stackman_switch.h b/stackman/stackman_switch.h index 3694cdf..1ed63e0 100644 --- a/stackman/stackman_switch.h +++ b/stackman/stackman_switch.h @@ -55,7 +55,7 @@ * stack pointer. * * The implementation must simply: - * 1) store all platform and cpu state on the stack (callee-stored + * 1) store all platform and cpu state on the stack (callee-saved * registers, exception state, etc) * 2) call the callback with the context, opcode STACKMAN_OP_SAVE and * the current stack pointer. This allows the application to do additional @@ -92,7 +92,7 @@ typedef enum stackman_op_t { STACKMAN_OP_SAVE = 0, /* The callback receives the new stack pointer and should restore - * any state for it, e.g. fillint the stack with the correct data. + * any state for it, e.g. filling the stack with the correct data. * what it returns will be the return value from stackman_switch(). */ STACKMAN_OP_RESTORE = 1, diff --git a/tests/test.c b/tests/test.c index a8beffc..30bc01a 100644 --- a/tests/test.c +++ b/tests/test.c @@ -9,9 +9,9 @@ #define assert_align(p) assert((intptr_t)(p) == STACKMAN_SP_ALIGN(p)) -/* simple test ithout modifying stack pointers. - * test that the callback is called wiht valid - * stackpoiners and the stage member in the +/* simple test without modifying stack pointers. + * test that the callback is called with valid + * stack pointers and the stage member in the * correct order. */ typedef struct ctxt01 diff --git a/tests/test_cc.cc b/tests/test_cc.cc index 3e6a6da..99546b4 100644 --- a/tests/test_cc.cc +++ b/tests/test_cc.cc @@ -6,9 +6,9 @@ #include using namespace std; -/* simple test ithout modifying stack pointers. - * test that the callback is called wiht valid - * stackpoiners and the stage member in the +/* simple test without modifying stack pointers. + * test that the callback is called with valid + * stack pointers and the stage member in the * correct order. */ typedef struct ctxt01 From 41cadbf7c2c80786fc1f98d5a5d48ef066ce5396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 13:12:47 +0000 Subject: [PATCH 16/20] Set version 1.0.0 Add version information to the library: - Added STACKMAN_VERSION_MAJOR, STACKMAN_VERSION_MINOR, STACKMAN_VERSION_PATCH macros - Added STACKMAN_VERSION string macro ("1.0.0") - Added STACKMAN_VERSION_NUMBER for numeric comparisons (10000) - Updated README.md to display version 1.0.0 This establishes the library as stable and ready for production use with all 8 platforms supported, tested, and documented. --- README.md | 2 ++ stackman/stackman.h | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/README.md b/README.md index c0df8a7..e1c9331 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # stackman +**Version 1.0.0** + Simple low-level stack manipulation API and implementation for common platforms ## Purpose diff --git a/stackman/stackman.h b/stackman/stackman.h index 4a2bf78..440b2e6 100644 --- a/stackman/stackman.h +++ b/stackman/stackman.h @@ -2,6 +2,19 @@ #ifndef STACKMAN_H #define STACKMAN_H +/* Version information */ +#define STACKMAN_VERSION_MAJOR 1 +#define STACKMAN_VERSION_MINOR 0 +#define STACKMAN_VERSION_PATCH 0 + +/* Version as a string */ +#define STACKMAN_VERSION "1.0.0" + +/* Version as a single number for comparisons (MMmmpp: Major, minor, patch) */ +#define STACKMAN_VERSION_NUMBER ((STACKMAN_VERSION_MAJOR * 10000) + \ + (STACKMAN_VERSION_MINOR * 100) + \ + STACKMAN_VERSION_PATCH) + /* the main include file. The following macros can be defined before including * STACKMAN_OPTIONAL - Do not error if the platform isn't supported * STACKMAN_VERBOSE - Emit the found platform to output From 113d84f6c3e163842e479c841e4f51f2c5a1eba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 16:14:15 +0000 Subject: [PATCH 17/20] Add CHANGELOG.md documenting v0.1.0 and v1.0.0 changes - Document removal of Windows ARM32 support in v1.0.0 - List all new features (version macros, release workflow, updates) - Follow Keep a Changelog format --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ec69364 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0] - 2025-11-16 + +### Added +- Version macros in `stackman.h`: `STACKMAN_VERSION_MAJOR`, `STACKMAN_VERSION_MINOR`, `STACKMAN_VERSION_PATCH`, `STACKMAN_VERSION`, `STACKMAN_VERSION_NUMBER` +- Automated release workflow for tagged versions + +### Changed +- Updated GitHub Actions to v4 (from v2) +- README updated with complete platform list, CI information, and release documentation + +### Removed +- **BREAKING**: Dropped Windows ARM32 (win_arm) support + - Microsoft Windows SDK 10.0.26100.0+ no longer supports 32-bit ARM development + - ARM32 Windows devices (Windows RT) are obsolete + - ARM64 Windows remains fully supported + +### Fixed +- Fixed typos in documentation and source files +- Corrected "callee-stored" → "callee-saved" terminology + +## [0.1] - 2020-05-18 + +### Added +- Core stack manipulation API: `stackman_switch()` and `stackman_call()` +- Support for 8 platforms: + - Linux: sysv_amd64, sysv_i386, arm32 (AAPCS), aarch64 (AAPCS64) + - Windows: win_x86, win_x64, win_arm (32-bit ARM), win_arm64 +- Compiler support: GCC, Clang, MSVC (VS2017, VS2019, VS2022) +- Pre-built libraries for all supported platforms +- Inline assembly and separate assembly file options +- Cross-compilation support for Linux (x86, ARM32, ARM64) +- QEMU-based testing for ARM platforms in CI +- Comprehensive test suite (test.c, test_cc.cc, test_static.c, test_asm.c) +- GitHub Actions CI for automated building and testing +- Visual Studio project files (VS2017, VS2019, VS2022) + +[1.0.0]: https://github.com/stackless-dev/stackman/releases/tag/v1.0.0 +[0.1]: https://github.com/stackless-dev/stackman/releases/tag/v0.1 From e6f9335b62eecc90446c5656086bddcde0070d66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 16:20:01 +0000 Subject: [PATCH 18/20] Document Windows ARM32 removal and update platform list - Remove win_arm from supported platforms in README - Add last supporting SDK version (10.0.22621) to CHANGELOG - Clean up platform documentation --- CHANGELOG.md | 1 + README.md | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec69364..17493e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - **BREAKING**: Dropped Windows ARM32 (win_arm) support - Microsoft Windows SDK 10.0.26100.0+ no longer supports 32-bit ARM development + - Last SDK version supporting ARM32 was Windows SDK 10.0.22621 (Windows 11 SDK, version 22H2) - ARM32 Windows devices (Windows RT) are obsolete - ARM64 Windows remains fully supported diff --git a/README.md b/README.md index e1c9331..c1e9d7b 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,6 @@ calling convention, plus archive format: - win_x86 (32 bits) - win_x64 - - win_arm (32 bit ARM) - win_arm64 (64 bit ARM) - sysv_i386 (linux) - sysv_amd64 (linux) From 01dd0ee2e72f9c6984eaf6d6b49e27b6245029c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Sun, 16 Nov 2025 16:21:33 +0000 Subject: [PATCH 19/20] Remove Windows ARM32 from build matrix - Drop 'arm' platform from Windows builds - Windows SDK 10.0.26100.0+ no longer supports ARM32 - Keeps x86, x64, and arm64 platforms --- .github/workflows/buildcommit.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/buildcommit.yml b/.github/workflows/buildcommit.yml index d858b1f..6d522ab 100644 --- a/.github/workflows/buildcommit.yml +++ b/.github/workflows/buildcommit.yml @@ -55,9 +55,8 @@ jobs: build-windows: runs-on: windows-latest strategy: - fail-fast: true matrix: - platform: [x86, x64, arm, arm64] + platform: [x86, x64, arm64] include: - platform: x86 folder: Win32 @@ -65,8 +64,6 @@ jobs: - platform: x64 folder: x64 native: yes - - platform: arm - folder: arm - platform: arm64 folder: arm64 From 53c598c106db17b801420e71808af2ec0180e06f Mon Sep 17 00:00:00 2001 From: Automation tool Date: Sun, 16 Nov 2025 16:22:51 +0000 Subject: [PATCH 20/20] Automated build --- lib/aarch64/libstackman.a | Bin 4318 -> 4318 bytes lib/arm32/libstackman.a | Bin 2774 -> 2798 bytes lib/sysv_amd64/libstackman.a | Bin 3926 -> 3926 bytes lib/sysv_i386/libstackman.a | Bin 2838 -> 2838 bytes lib/win_arm64/stackman.lib | Bin 9414 -> 9414 bytes lib/win_x64/stackman.lib | Bin 7150 -> 7150 bytes lib/win_x86/stackman.lib | Bin 21610 -> 22722 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/aarch64/libstackman.a b/lib/aarch64/libstackman.a index c30dcd0259965b9601e523027e70c6044d69eeb4..b6301ce0829f0e35de2440b828f6a9ca5df84c41 100644 GIT binary patch delta 90 zcmcbocu#S|Bu2^7yyDFCywnth%)Al?cfU{tXG3!ZLt{PT$@3VyC+9KgOip47mICti q40O#(lS=bSN{#A_O!N#)G{MR?pJys&WaORf%o5MYuz4|yH4gwMkQ$r- delta 90 zcmcbocu#S|Bt{;0zfc8dLvsZ~Lp_tps~Nj_O7n^{)ALeO6f*NlCg(EgPEKM9mI6xZ q8R#08CY9!ulp59<8R;3AXoB@@KF?Il$jC6+nI)ca`sT$f);s_bTpK3< diff --git a/lib/arm32/libstackman.a b/lib/arm32/libstackman.a index 426030f1261033db9afd5265a6304f3469b6467e..64a81d9ed28e53c11d7a3b469750ca6e74f34135 100644 GIT binary patch delta 219 zcmca6`c8C$H|r+`2DVQV1N@oI3@j$|v1>3cn0Q)&%awtFL6#RtC{Fwu!fpU$Ff(XP z4qy}!FD^+;&dyEDV_<->^pY7E878MNDoV*)-#?wnXyov!QI)} zNNKVWy*+{aYI#CT#dH)}cLkIBuf+KeWX z*Rv`!UY>lJRh@C_v1>4POgyc?rO3d*Aj=CR=1u$>!Y&D9Ff#~G z4qz0ST+OJ=!(?UFa>fUfXR~TE%1%Dcs?4}& z@@rOg#=6PEZ0by_7$+a#6cg$NJA|PCNPz)RIDt!z@yg_GHg(1&lQ#oZzF^vXhfRnD E013-G-T(jq diff --git a/lib/sysv_amd64/libstackman.a b/lib/sysv_amd64/libstackman.a index 8b382415efe7e408879f0dc574d54b6d099a8386..367dabb84e45700057d8b2288e0e429e9733b527 100644 GIT binary patch delta 48 zcmca6cTH}?3PxsQJ>$)*8F?6`fDAnYU9-}p(!7#VqdFrKJp&U>1w)YhMW$9B0BS`J ABme*a delta 48 zcmca6cTH}?3Pxr_J(JC=8F?6`fDAnYUBl9((!7#V!#X1)Jp&U>1w)YhMW$9B0BJ)G A82|tP diff --git a/lib/sysv_i386/libstackman.a b/lib/sysv_i386/libstackman.a index 1d91d87d0631057b92a0d6d3acae7e872c27a291..0dbeb87f63cd18988dfcbb20e9d3d9ab2c8b010f 100644 GIT binary patch delta 101 zcmbOxHcf28Yf%OukW~SZP{72(K4%hR9gn+TsDiVhxq_jwp7G@Aj1zcD^NKUm^HNh3 sGV@9%$1&+n4rU6L0!r!`=$e%#mFAU{8r2z@=oy%3g7s`Zz!b&-0DplQ4*&oF delta 101 zcmbOxHcf28Yf)YX1_oIbAOQnREbI)E80#cU^NKUm^HNh3GV@9p-2FlooDIzt3=Q>6 tCU-GTm>kcfGdY+kSPID3Gtf0GO)AYRDK)G!GSV|J(F7~oe1Iv80|0IU7-;|i diff --git a/lib/win_arm64/stackman.lib b/lib/win_arm64/stackman.lib index 427de828f6028542625e95292cae2fac5c94ec23..95ab7be51f676427f94365596473f450216c05a6 100644 GIT binary patch delta 694 zcmX@+dCYUe1ZEZ;hRL0ir!ea=P43)$gqeex2PDA2Aj|-k5D?ec#2&?{yzh4N1fSa{ zY>S2ssrS$yD*(nPhO{|pSD85kIt87J#AYi(BHtYl&}(K9wRn*35qX7fI7 z4jA_|Zwgexgl_?hnW2HfLu6&;^(OBZWShK7NoI1nd>GW+4FdU4mWtpeh{9Wf!4QU_kOzb@U(pA`I4e{Q zVfY9)8TsDjY3(t|j+t4IWe_T|FuMMnn0D1FR$T*n5DXlW^K%RIGE*jZ zZW3WZ4cpBE;(CkYO+5k$0o@qj1Zq~eksMu#10N$1M|tYe4djP`1qlo4w797@z8%+M+n134(e$v zp$QFVS@{j{&{LXRpvX44K)@O*Vx_PfV$M$mF9^e3F$BVZhvIuhZ-|JU(t0g@-x)_F jm9|%yS1Eth$u=z$-gz^=BUvvOGxR2j1Z+-Mj%Ne_*g4~A delta 694 zcmX@+dCYUe1ZEZu2GN$uQ<(LbL|Zl=Vdh}w0SPcL2s3~s1jIEqu}3i~&z#etTJQg9 zY0T^SZzR$pUWm=qXsOPR`?}_JUY71_PI(4~xXFnU>XVmn=xJQ3%J{FswKMP6o6H5e zHw;y(Be>T_=5T!wO5_N-EAV6?1H)$q1_oxv$@M_Ca+SGnOrU(1~qqsKt7bEBDe{n@RndOgkdP;0b$Hn^nozW3ROcG zKEh2#cXF%#?3m4VXl6l{L8!>W==yVxPrp4m;Q4mugM9`^4A%lZ2nG(x`MCvpnJJR#vRwZ2?%v695)nj( zC?hCDr6&7xa%_@(!U*x%=9f~eOzhzBH87uS%jY>+fsY^R=^)va5D)#Ab%Zcnh91B=Y^o&i7HfwRNVq}`!x%nE`1ZEzP90P+e1Bl*S#K*!oSxi7lQwMB%rm%dO zknjI)2F1Dqkv2zI%=u?6xy*b}YTE7l|3dS0OBfhpCeP$oXPh|sAiuiqS+E|j5Wf_& zzwdAG-o36}^6~iO`7aLkT-_XfW$}SKN)y$B{xdLq2CDl%`JkZm=r8$7lqiC$&C#Z$Hajif-v>;rEa(^u_!w=Hl^ zRs#crJp%)S0`uJd-ldXL{al$u*>W4podvF6_|!S+cFjiJzo&HER%d_MJdO1=6N?6e zXv^eQjs>g+dd9{Uo3%JsF*1p^Y`(@dftd#+$G{-W0HQY+@v$%}^KH2orMy=_X@T9e zX_iYagt7V*uU*jcl$qna3rEs{c}u|vX#9jaz>tfVYLMY!ZTEydh(&prB#_nKEJf7Qu0E&Cv0 b)Wo{wJ}}H6z#%z5w?Hp51sK-)Qu`SJ8_q_x>6B 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 delta 3669 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