diff --git a/AGENTS.md b/AGENTS.md index 22f404e..d229a6c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,10 +21,10 @@ User code includes `stackman.h`. The library implementation includes `stackman_impl.h` once. `platforms/platform.h` selects `switch__`. -`STACKMAN_HAVE_CALL` and `STACKMAN_STACK_ALIGN` must be visible from a -normal `#include "stackman.h"`. If they sit under -`#ifdef STACKMAN_SWITCH_IMPL`, `tests/test.c` compiles `stackman_call` -out and CI looks green. +`STACKMAN_STACK_ALIGN` must be visible from a normal +`#include "stackman.h"`. If it sits under `#ifdef STACKMAN_SWITCH_IMPL`, +`stackman.h` leaves it at 4. `stackman_call` is part of every supported +ABI, and `test_04` and `test_05` always build. Align a stack with `STACKMAN_SP_ALIGN`. It follows `STACKMAN_STACK_ALIGN` and the stack direction. diff --git a/CHANGELOG.md b/CHANGELOG.md index 45aae06..ae3384f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +Scheduled for 1.4.0. This does not belong in a 1.3.x patch. + +### Removed +- `STACKMAN_HAVE_CALL`. Every supported ABI provides `stackman_call`, so `test_04` and `test_05` always build. Callers that branched on the macro can call `stackman_call` directly. `STACKMAN_STACK_ALIGN` is unchanged. + ## [1.3.0] - 2026-10-15 ### Added diff --git a/stackman/platforms/switch_aarch64_gcc.h b/stackman/platforms/switch_aarch64_gcc.h index 9058c28..6376eef 100644 --- a/stackman/platforms/switch_aarch64_gcc.h +++ b/stackman/platforms/switch_aarch64_gcc.h @@ -19,8 +19,7 @@ #endif #endif -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_arm64_msvc.h b/stackman/platforms/switch_arm64_msvc.h index 891c035..ba55521 100644 --- a/stackman/platforms/switch_arm64_msvc.h +++ b/stackman/platforms/switch_arm64_msvc.h @@ -3,6 +3,5 @@ */ #ifndef STACKMAN_ASSEMBLY_SRC #define STACKMAN_ASSEMBLY_SRC switch_arm64_msvc.asm -#define STACKMAN_HAVE_CALL 1 #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_arm_gcc.h b/stackman/platforms/switch_arm_gcc.h index 2ad70a6..39f7075 100644 --- a/stackman/platforms/switch_arm_gcc.h +++ b/stackman/platforms/switch_arm_gcc.h @@ -22,8 +22,7 @@ #endif #endif -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 8 #endif diff --git a/stackman/platforms/switch_armhf_gcc.h b/stackman/platforms/switch_armhf_gcc.h index a0156e2..d708543 100644 --- a/stackman/platforms/switch_armhf_gcc.h +++ b/stackman/platforms/switch_armhf_gcc.h @@ -34,8 +34,7 @@ #endif #endif -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 8 #endif diff --git a/stackman/platforms/switch_riscv64_gcc.h b/stackman/platforms/switch_riscv64_gcc.h index a534f6c..e6c9615 100644 --- a/stackman/platforms/switch_riscv64_gcc.h +++ b/stackman/platforms/switch_riscv64_gcc.h @@ -10,12 +10,9 @@ #define STACKMAN_ASSEMBLY_SRC "platforms/switch_riscv64_gcc.S" #endif -/* Visible to tests and other callers of stackman.h, not only to the - * translation unit that defines STACKMAN_SWITCH_IMPL. stackman.h - * otherwise leaves STACKMAN_STACK_ALIGN at 4 and tests/test.c compiles - * out test_04 and test_05. */ -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +/* Visible from a normal #include "stackman.h". stackman.h otherwise + * leaves STACKMAN_STACK_ALIGN at 4. */ +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_x64_msvc.h b/stackman/platforms/switch_x64_msvc.h index d1dc6ac..bac9658 100644 --- a/stackman/platforms/switch_x64_msvc.h +++ b/stackman/platforms/switch_x64_msvc.h @@ -3,6 +3,5 @@ */ #ifndef STACKMAN_ASSEMBLY_SRC #define STACKMAN_ASSEMBLY_SRC switch_x64_msvc.asm -#define STACKMAN_HAVE_CALL 1 #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_x86_64_gcc.h b/stackman/platforms/switch_x86_64_gcc.h index 0357b79..1d745aa 100644 --- a/stackman/platforms/switch_x86_64_gcc.h +++ b/stackman/platforms/switch_x86_64_gcc.h @@ -16,8 +16,7 @@ #endif #endif -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_x86_gcc.h b/stackman/platforms/switch_x86_gcc.h index d93ded1..9d48f6d 100644 --- a/stackman/platforms/switch_x86_gcc.h +++ b/stackman/platforms/switch_x86_gcc.h @@ -10,8 +10,7 @@ #endif #endif -#ifndef STACKMAN_HAVE_CALL -#define STACKMAN_HAVE_CALL 1 +#ifndef STACKMAN_STACK_ALIGN #define STACKMAN_STACK_ALIGN 16 #endif diff --git a/stackman/platforms/switch_x86_msvc.h b/stackman/platforms/switch_x86_msvc.h index e30824e..a82b6c7 100644 --- a/stackman/platforms/switch_x86_msvc.h +++ b/stackman/platforms/switch_x86_msvc.h @@ -6,7 +6,6 @@ #if !defined(STACKMAN_ASSEMBLY_SRC) #define STACKMAN_ASSEMBLY_SRC switch_x86_msvc.asm #define STACKMAN_SWITCH_C 1 /* contains a C implementation */ -#define STACKMAN_HAVE_CALL 1 #define STACKMAN_STACK_ALIGN 4 #endif diff --git a/tests/test.c b/tests/test.c index 248b92c..10bc3e9 100644 --- a/tests/test.c +++ b/tests/test.c @@ -241,10 +241,6 @@ void test_03(void *stack_marker) } -#if defined(STACKMAN_HAVE_CALL) -#define TEST_04 -#endif -#ifdef TEST_04 /* Sentinel returned by stackman_call. The epilogue must leave it intact. */ static void *const stackman_call_result = (void *)(intptr_t)0x1234; @@ -347,8 +343,6 @@ void test_05(void) assert(STACKMAN_SP_LE(ctxt.sp[1], &ctxt)); } -#endif - /* Test our various macros */ void test_06() { @@ -624,14 +618,12 @@ int main(int argc, char*argv[]) test_enter("test_03"); test_03((void*)&stack_marker); printf("test_03 ok\n"); -#ifdef TEST_04 test_enter("test_04"); test_04(); printf("test_04 ok\n"); test_enter("test_05"); test_05(); printf("test_05 ok\n"); -#endif test_enter("test_06"); test_06(); printf("test_06 ok\n");