Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • F firmware
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Graph
    • Compare revisions
  • Issues 74
    • Issues 74
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 29
    • Merge requests 29
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • card10card10
  • firmware
  • Merge requests
  • !326

Add a panic() function

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Rahix requested to merge rahix/panic into master Oct 04, 2019
  • Overview 4
  • Commits 6
  • Pipelines 4
  • Changes 11
commit 5d9c9be9a6ca463f2f4c1be668bb943033776f67
Author: Rahix <rahix@rahix.de>
Date:   Fri Oct 4 09:50:14 2019 +0200

    fix(libcard10): Mark card10_reset() as noreturn
    
    card10_reset() won't ever return to where it was called from.  Telling
    the compiler this can help with program-flow analysis.
    
    Signed-off-by: Rahix <rahix@rahix.de>

 lib/card10/card10.c | 5 ++++-
 lib/card10/card10.h | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

commit bd755446a46822718ffaf1043c023562e905edac
Author: Rahix <rahix@rahix.de>
Date:   Fri Oct 4 13:02:30 2019 +0200

    feat(serial): Add function to switch serial to synchroneous
    
    In severe error conditions, asynchroneous prints will never work.  For
    such cases we need a way to make prints happen synchroneously again, the
    same way it works during early boot.  Add a
    `serial_return_to_synchroneous()` function which unconditionally
    switches the serial module to synchroneous mode.  Only use this function
    in unrecoverable error conditions!
    
    Signed-off-by: Rahix <rahix@rahix.de>

 epicardium/modules/modules.h | 2 ++
 epicardium/modules/serial.c  | 5 +++++
 2 files changed, 7 insertions(+)

commit fffc289d5a5f6f00a9ff45da1a11e6b1db76a00c
Author: Rahix <rahix@rahix.de>
Date:   Fri Oct 4 09:58:29 2019 +0200

    feat(epicardium): Add a panic() function
    
    In unrecoverable situations we should provide a common way to output the
    cause of the error and then reset the CPU.  The panic() function is
    mean to be exactly that.  It outputs the error-cause, stack-trace, and
    firmware revision, accompanied by a link to the issue-tracker to
    encourage people to report the error.  After a timeout of ~1.5s it
    resets the CPU and reboots.
    
    Future Work:
    
     - Right now, the stack-trace only has a depth of one which is the
       return address from where panic() was called.  In the future it might
       make sense to provide a deeper stack-trace if a robust implementation
       is possible.
     - Integration of @msgctl's faultscreen (!79) so users who don't have
       the serial console open at all times can also see what happened.
    
    Signed-off-by: Rahix <rahix@rahix.de>

 epicardium/modules/meson.build |  1 +
 epicardium/modules/modules.h   |  4 +++
 epicardium/modules/panic.c     | 63 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+)

commit 0a33bfca975f66671ea84bc5d8b5f6bbd0af1563
Author: Rahix <rahix@rahix.de>
Date:   Fri Oct 4 13:27:58 2019 +0200

    feat(epicardium): Use panic() for assertion failures
    
    Define `__assert_func()` so a failing `assert()` will trigger a panic.
    
    Signed-off-by: Rahix <rahix@rahix.de>

 epicardium/modules/panic.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

commit 56f8b4937d5a6e7a2ba88c834e21ac308385dc01
Author: Rahix <rahix@rahix.de>
Date:   Fri Oct 4 13:40:43 2019 +0200

    chore(epicardium): Switch from MXC_ASSERT to assert
    
    Newlib assert uses __assert_func and thus our panic() function while
    MXC_ASSERT uses a custom assertion logic.  Newlib assert is also more
    portable as it works in expression position while MXC_ASSERT only works
    as a statement.
    
    Signed-off-by: Rahix <rahix@rahix.de>

 epicardium/FreeRTOSConfig.h | 7 +++----
 epicardium/modules/bhi.c    | 7 ++++---
 2 files changed, 7 insertions(+), 7 deletions(-)
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: rahix/panic