From 258587096d180137153f503a38736e2fccb8484b Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 15 Aug 2021 14:37:13 +0000 Subject: [PATCH] Fixed bug #1169. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14651 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/rt/include/chregistry.h | 16 +++++++- os/rt/src/chregistry.c | 77 ++++++++++++++++++++++++++------------ readme.txt | 2 + 3 files changed, 70 insertions(+), 25 deletions(-) diff --git a/os/rt/include/chregistry.h b/os/rt/include/chregistry.h index 6040019aa..cb368a729 100644 --- a/os/rt/include/chregistry.h +++ b/os/rt/include/chregistry.h @@ -66,8 +66,22 @@ typedef struct { uint8_t off_state; /**< @brief Offset of @p state field. */ uint8_t off_flags; /**< @brief Offset of @p flags field. */ uint8_t off_refs; /**< @brief Offset of @p refs field. */ - uint8_t off_preempt; /**< @brief Offset of @p preempt field. */ + uint8_t off_preempt; /**< @brief Offset of @p ticks field. */ uint8_t off_time; /**< @brief Offset of @p time field. */ + uint8_t off_reserved[5]; + uint8_t intervalsize; /**< @brief Size of a @p sysinterval_t. */ + uint8_t instancesnum; /**< @brief Number of instances. */ + uint8_t off_sys_state; /**< @brief Offset of @p state field. */ + uint8_t off_sys_instances; /**< @brief Offset of @p instances array + field. */ + uint8_t off_sys_reglist; /**< @brief Offset of @p reglist field. */ + uint8_t off_sys_rfcu; /**< @brief Offset of @p rfcu field. */ + uint8_t off_sys_reserved[4]; + uint8_t off_inst_rlist; /**< @brief Offset of @p rlist field. */ + uint8_t off_inst_vtlist; /**< @brief Offset of @p vtlist field. */ + uint8_t off_inst_reglist; /**< @brief Offset of @p reglist field. */ + uint8_t off_inst_core_id; /**< @brief Offset of @p core_id field. */ + uint8_t off_inst_rfcu; /**< @brief Offset of @p rfcu field. */ } chdebug_t; /*===========================================================================*/ diff --git a/os/rt/src/chregistry.c b/os/rt/src/chregistry.c index 7a15f3eca..948733c2c 100644 --- a/os/rt/src/chregistry.c +++ b/os/rt/src/chregistry.c @@ -75,41 +75,70 @@ * OS signature in ROM plus debug-related information. */ ROMCONST chdebug_t ch_debug = { - {'m', 'a', 'i', 'n'}, - (uint8_t)0, - (uint8_t)sizeof (chdebug_t), - (uint16_t)(((unsigned)CH_KERNEL_MAJOR << 11U) | - ((unsigned)CH_KERNEL_MINOR << 6U) | - ((unsigned)CH_KERNEL_PATCH << 0U)), - (uint8_t)sizeof (void *), - (uint8_t)sizeof (systime_t), - (uint8_t)sizeof (thread_t), - (uint8_t)__CH_OFFSETOF(thread_t, hdr.pqueue.prio), - (uint8_t)__CH_OFFSETOF(thread_t, ctx), - (uint8_t)__CH_OFFSETOF(thread_t, rqueue.next), - (uint8_t)__CH_OFFSETOF(thread_t, rqueue.prev), - (uint8_t)__CH_OFFSETOF(thread_t, name), + .identifier = {'m', 'a', 'i', 'n'}, + .zero = (uint8_t)0, + .size = (uint8_t)sizeof (chdebug_t), + .version = (uint16_t)(((unsigned)CH_KERNEL_MAJOR << 11U) | + ((unsigned)CH_KERNEL_MINOR << 6U) | + ((unsigned)CH_KERNEL_PATCH << 0U)), + .ptrsize = (uint8_t)sizeof (void *), + .timesize = (uint8_t)sizeof (systime_t), + .intervalsize = (uint8_t)sizeof (sysinterval_t), + .threadsize = (uint8_t)sizeof (thread_t), + .off_prio = (uint8_t)__CH_OFFSETOF(thread_t, hdr.pqueue.prio), + .off_ctx = (uint8_t)__CH_OFFSETOF(thread_t, ctx), + .off_newer = (uint8_t)__CH_OFFSETOF(thread_t, rqueue.next), + .off_older = (uint8_t)__CH_OFFSETOF(thread_t, rqueue.prev), + .off_name = (uint8_t)__CH_OFFSETOF(thread_t, name), #if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || (CH_CFG_USE_DYNAMIC == TRUE) - (uint8_t)__CH_OFFSETOF(thread_t, wabase), + .off_stklimit = (uint8_t)__CH_OFFSETOF(thread_t, wabase), #else - (uint8_t)0, + .off_stklimit = (uint8_t)0, #endif - (uint8_t)__CH_OFFSETOF(thread_t, state), - (uint8_t)__CH_OFFSETOF(thread_t, flags), + .off_state = (uint8_t)__CH_OFFSETOF(thread_t, state), + .off_flags = (uint8_t)__CH_OFFSETOF(thread_t, flags), #if CH_CFG_USE_DYNAMIC == TRUE - (uint8_t)__CH_OFFSETOF(thread_t, refs), + .off_refs = (uint8_t)__CH_OFFSETOF(thread_t, refs), #else - (uint8_t)0, + .off_refs = (uint8_t)0, #endif #if CH_CFG_TIME_QUANTUM > 0 - (uint8_t)__CH_OFFSETOF(thread_t, ticks), + .off_preempt = (uint8_t)__CH_OFFSETOF(thread_t, ticks), #else - (uint8_t)0, + .off_preempt = (uint8_t)0, #endif #if CH_DBG_THREADS_PROFILING == TRUE - (uint8_t)__CH_OFFSETOF(thread_t, time) + .off_time = (uint8_t)__CH_OFFSETOF(thread_t, time), #else - (uint8_t)0 + .off_time = (uint8_t)0, +#endif + .off_reserved = {(uint8_t)0, (uint8_t)0, (uint8_t)0, (uint8_t)0, (uint8_t)0}, + .instancesnum = (uint8_t)PORT_CORES_NUMBER, + .off_sys_state = (uint8_t)__CH_OFFSETOF(ch_system_t, state), + .off_sys_instances = (uint8_t)__CH_OFFSETOF(ch_system_t, instances), +#if (CH_CFG_USE_REGISTRY == TRUE) && (CH_CFG_SMP_MODE == TRUE) + .off_sys_reglist = (uint8_t)__CH_OFFSETOF(ch_system_t, reglist), +#else + .off_sys_reglist = (uint8_t)0, +#endif +#if CH_CFG_SMP_MODE == TRUE + .off_sys_rfcu = (uint8_t)__CH_OFFSETOF(ch_system_t, rfcu), +#else + .off_sys_rfcu = (uint8_t)0, +#endif + .off_sys_reserved = {(uint8_t)0, (uint8_t)0, (uint8_t)0, (uint8_t)0}, + .off_inst_rlist = (uint8_t)__CH_OFFSETOF(os_instance_t, rlist), + .off_inst_vtlist = (uint8_t)__CH_OFFSETOF(os_instance_t, vtlist), +#if ((CH_CFG_USE_REGISTRY == TRUE) && (CH_CFG_SMP_MODE == FALSE)) + .off_inst_reglist = (uint8_t)__CH_OFFSETOF(os_instance_t, reglist), +#else + .off_inst_reglist = (uint8_t)0, +#endif + .off_inst_core_id = (uint8_t)__CH_OFFSETOF(os_instance_t, core_id), +#if CH_CFG_SMP_MODE == FALSE + .off_inst_rfcu = (uint8_t)__CH_OFFSETOF(os_instance_t, rfcu) +#else + .off_inst_rfcu = (uint8_t)0 #endif }; diff --git a/readme.txt b/readme.txt index 0885e684e..b40d9d1ed 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,8 @@ ***************************************************************************** *** Next *** +- FIX: Fixed insufficient information in RT registry (bug #1169)(TBP). +- FIX: Fixed code base not compatible with -Wcast-align=strict (bug #1168)(TBP). - FIX: Fixed wrong chconf.h for ADuCM36x demos (bug #1167) (backported to 21.6.1). - FIX: Fixed missing constant in ADuCM36x hal_lld.c (bug #1166)