diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index c640f091..a042eb2c 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -513,9 +513,14 @@ void fillStateOffsets(const RoseBuildImpl &tbi, u32 rolesWithStateCount, u32 activeLeftCount, u32 laggedRoseCount, u32 floatingStreamStateRequired, u32 historyRequired, RoseStateOffsets *so) { - /* runtime state (including role state) first and needs to be u32-aligned */ - u32 curr_offset = sizeof(RoseRuntimeState) - + mmbit_size(rolesWithStateCount); + u32 curr_offset = 0; + + // First, runtime state (stores per-stream state, like whether we need a + // delay rebuild or have been told to halt matching.) + curr_offset += sizeof(RoseRuntimeState); + + // Role state storage. + curr_offset += mmbit_size(rolesWithStateCount); so->activeLeafArray = curr_offset; /* TODO: limit size of array */ curr_offset += mmbit_size(activeArrayCount); diff --git a/src/rose/rose_internal.h b/src/rose/rose_internal.h index a1f91cd3..326887da 100644 --- a/src/rose/rose_internal.h +++ b/src/rose/rose_internal.h @@ -476,19 +476,11 @@ struct RoseEngine { struct scatter_full_plan state_init; }; -#if defined(_WIN32) -#pragma pack(push, 1) -#endif // Rose runtime state struct RoseRuntimeState { u8 flags; /* high bit true if delay rebuild needed */ u8 broken; /* user has requested that we stop matching */ -#if defined(_WIN32) }; -#pragma pack(pop) -#else -} __attribute__((packed)); -#endif struct ALIGN_CL_DIRECTIVE anchored_matcher_info { u32 next_offset; /* relative to this, 0 for end */