-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Issue details
While some detailed build configuration, There are potential stack overflow in thread function named SystemTask::Process
InfiniTime/src/systemtask/SystemTask.cpp
Line 90 in 0fabfe9
| if (pdPASS != xTaskCreate(SystemTask::Process, "MAIN", 350, this, 1, &taskHandle)) { |
In this line, SystemTask::Process Allows 1400(350*4) stack size.
However, after checking the stack using our internally developed tool, it might have 1432 Bytes in with some detailed configurations.
Steps to produce
1. In CMakeLists.txt , Add this line:
add_compile_options(
$<$<COMPILE_LANGUAGE:C>:-fstack-usage>
$<$<COMPILE_LANGUAGE:CXX>:-fstack-usage>
)
This will help you automatically calculating stack size of each function.
2. Build InfiniTime normally, using this configurations:
make pinetime-app
Now we can get stack usage file (*.su) for each source file, So we can manually check stack size of each function.
In case of SystemTask::Process :
There are large call stack with this flow:
Pinetime::System::SystemTask::Process (_ZN8Pinetime6System10SystemTask7ProcessEPv) => 8 bytes
Pinetime::System::SystemTask::Work (_ZN8Pinetime6System10SystemTask4WorkEv) => 64 bytes
Pinetime::Controllers::NimbleController::Init(_ZN8Pinetime11Controllers16NimbleController4InitEv) => 24 bytes
Pinetime::Controllers::NimbleController::RestoreBond(_ZN8Pinetime11Controllers16NimbleController11RestoreBondEv) => 272 bytes
Pinetime::Controllers::FS::FileDelete(_ZN8Pinetime11Controllers2FS10FileDeleteEPKc) => 0 bytes
lfs_remove(lfs_remove) => 120 bytes
lfs_fs_forceconsistency(lfs_fs_forceconsistency) => 144 bytes
lfs_dir_drop(lfs_dir_drop) => 24 bytes
lfs_dir_commit(lfs_dir_commit) => 168 bytes
lfs_dir_compact(lfs_dir_compact) => 160 bytes
lfs_dir_split(lfs_dir_split) => 88 bytes
lfs_dir_alloc(lfs_dir_alloc) => 32 bytes
lfs_alloc(lfs_alloc) => 24 bytes
lfs_fs_rawtraverse(lfs_fs_rawtraverse) => 104 bytes
lfs_dir_fetch(lfs_dir_fetch) => 24 bytes
lfs_dir_fetchmatch(lfs_dir_fetchmatch) => 112 bytes
lfs_bd_read(lfs_bd_read) => 64 bytes
SUM => 1432 bytes
So, there are potentially occur stack overflow in SystemTask::Process Thread function.
Environment
Version
Commit 7128fc0