From f278c7a3e741cc5521bd8bd4633cd718b65784e0 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 3 Jun 2025 16:51:16 +1000 Subject: [PATCH] MDEV-37502 mroonga + clang + Debug with exceeds stack frame size Stack limits exceeded for clang-20 +Debug + MSAN. Added disables for the following functions. storage/mroonga/vendor/groonga/lib/ii.c:303:1: error: stack frame size (16696) exceeds limit (16384) in 'buffer_segment_reserve' [-Werror,-Wframe-larger-than] 303 | buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii, | ^ storage/mroonga/vendor/groonga/lib/ii.c:4803:1: error: stack frame size (20936) exceeds limit (16384) in 'grn_ii_delete_one' [-Werror,-Wframe-larger-than] 4803 | grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h) | ^ storage/mroonga/vendor/groonga/lib/ii.c:6313:1: error: stack frame size (25736) exceeds limit (16384) in 'grn_ii_column_update' [-Werror,-Wframe-larger-than] 6313 | grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section, | ^ For non-Debug the following stack frame sizes wher exceeded: storage/mroonga/vendor/groonga/lib/proc/proc_select.c:3575:1: warning: stack frame size (94072) exceeds limit (49152) in 'command_select' [-Wframe-larger-than] 3575 | command_select(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) | ^ storage/mroonga/vendor/groonga/lib/proc/proc_schema.c:1134:1: warning: stack frame size (98360) exceeds limit (49152) in 'command_schema_output_tables' [-Wframe-larger-than] 1134 | command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data) Reviewer: Jimmy Hu --- storage/mroonga/vendor/groonga/lib/ii.c | 7 ++++--- storage/mroonga/vendor/groonga/lib/proc/proc_schema.c | 4 ++++ storage/mroonga/vendor/groonga/lib/proc/proc_select.c | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/storage/mroonga/vendor/groonga/lib/ii.c b/storage/mroonga/vendor/groonga/lib/ii.c index 761513e3b30..87476604793 100644 --- a/storage/mroonga/vendor/groonga/lib/ii.c +++ b/storage/mroonga/vendor/groonga/lib/ii.c @@ -300,6 +300,8 @@ buffer_segment_new(grn_ctx *ctx, grn_ii *ii, uint32_t *segno) } } +PRAGMA_DISABLE_CHECK_STACK_FRAME + static grn_rc buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii, uint32_t *lseg0, uint32_t *pseg0, @@ -386,6 +388,8 @@ buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii, return ctx->rc; } +PRAGMA_REENABLE_CHECK_STACK_FRAME + #define BGQENQUE(lseg) do {\ if (ii->header->binfo[lseg] != GRN_II_PSEG_NOT_ASSIGNED) {\ ii->header->bgqbody[ii->header->bgqhead] = ii->header->binfo[lseg];\ @@ -4529,8 +4533,6 @@ grn_ii_get_disk_usage(grn_ctx *ctx, grn_ii *ii) } -PRAGMA_DISABLE_CHECK_STACK_FRAME - #define BIT11_01(x) ((x >> 1) & 0x7ff) #define BIT31_12(x) (x >> 12) @@ -4808,7 +4810,6 @@ exit : return ctx->rc; } -PRAGMA_REENABLE_CHECK_STACK_FRAME grn_rc grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h) diff --git a/storage/mroonga/vendor/groonga/lib/proc/proc_schema.c b/storage/mroonga/vendor/groonga/lib/proc/proc_schema.c index 7c632f45e53..c755e50e3bd 100644 --- a/storage/mroonga/vendor/groonga/lib/proc/proc_schema.c +++ b/storage/mroonga/vendor/groonga/lib/proc/proc_schema.c @@ -1130,6 +1130,8 @@ command_schema_output_table(grn_ctx *ctx, grn_ctx_output_map_close(ctx); } +PRAGMA_DISABLE_CHECK_STACK_FRAME + static void command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data) { @@ -1201,6 +1203,8 @@ command_schema_output_tables(grn_ctx *ctx, grn_schema_data *data) GRN_OBJ_FIN(ctx, &table_ids); } +PRAGMA_REENABLE_CHECK_STACK_FRAME + static grn_obj * command_schema(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { diff --git a/storage/mroonga/vendor/groonga/lib/proc/proc_select.c b/storage/mroonga/vendor/groonga/lib/proc/proc_select.c index 7588b18a17c..ad0e26bd299 100644 --- a/storage/mroonga/vendor/groonga/lib/proc/proc_select.c +++ b/storage/mroonga/vendor/groonga/lib/proc/proc_select.c @@ -3569,7 +3569,6 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx, return succeeded; } } -PRAGMA_REENABLE_CHECK_STACK_FRAME static grn_obj * command_select(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) @@ -3723,6 +3722,8 @@ exit : return NULL; } +PRAGMA_REENABLE_CHECK_STACK_FRAME + #define N_VARS 26 #define DEFINE_VARS grn_expr_var vars[N_VARS]