You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/12/28 11:09:39 UTC

[incubator-nuttx] branch master updated: arch/arm/assert: move the arm_assert to common code

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new cf2dfa8  arch/arm/assert: move the arm_assert to common code
cf2dfa8 is described below

commit cf2dfa8985d502eef7446061e989a43d2b473f14
Author: chao.an <an...@xiaomi.com>
AuthorDate: Mon Dec 27 21:47:09 2021 +0800

    arch/arm/assert: move the arm_assert to common code
    
    Signed-off-by: chao.an <an...@xiaomi.com>
---
 arch/arm/src/arm/arm_assert.c                 | 509 -----------------------
 arch/arm/src/armv6-m/arm_assert.c             | 397 ------------------
 arch/arm/src/armv7-a/arm_assert.c             | 568 --------------------------
 arch/arm/src/armv7-m/arm_assert.c             | 528 ------------------------
 arch/arm/src/armv7-r/arm_assert.c             | 534 ------------------------
 arch/arm/src/{armv8-m => common}/arm_assert.c | 222 +++++-----
 6 files changed, 106 insertions(+), 2652 deletions(-)

diff --git a/arch/arm/src/arm/arm_assert.c b/arch/arm/src/arm/arm_assert.c
deleted file mode 100644
index c542aca..0000000
--- a/arch/arm/src/arm/arm_assert.c
+++ /dev/null
@@ -1,509 +0,0 @@
-/****************************************************************************
- * arch/arm/src/arm/arm_assert.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <nuttx/syslog/syslog.h>
-#include <nuttx/usb/usbdev_trace.h>
-
-#include <arch/board/board.h>
-
-#include "arm_arch.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* USB trace dumping */
-
-#ifndef CONFIG_USBDEV_TRACE
-#  undef CONFIG_ARCH_USBDUMP
-#endif
-
-#ifndef CONFIG_BOARD_RESET_ON_ASSERT
-#  define CONFIG_BOARD_RESET_ON_ASSERT 0
-#endif
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_stackdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void arm_stackdump(uint32_t sp, uint32_t stack_top)
-{
-  uint32_t stack;
-
-  /* Flush any buffered SYSLOG data to avoid overwrite */
-
-  syslog_flush();
-
-  for (stack = sp & ~0x1f; stack < (stack_top & ~0x1f); stack += 32)
-    {
-      uint32_t *ptr = (uint32_t *)stack;
-      _alert("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-             stack, ptr[0], ptr[1], ptr[2], ptr[3],
-             ptr[4], ptr[5], ptr[6], ptr[7]);
-    }
-}
-#endif
-
-/****************************************************************************
- * Name: arm_registerdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(void)
-{
-  volatile uint32_t *regs = CURRENT_REGS;
-
-  /* Are user registers available from interrupt processing? */
-
-  if (regs == NULL)
-    {
-      /* No.. capture user registers by hand */
-
-      arm_saveusercontext(s_last_regs);
-      regs = s_last_regs;
-    }
-
-  /* Dump the interrupt registers */
-
-  _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
-         regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
-  _alert("R4: %08x R5: %08x R6: %08x  "
-#ifdef CONFIG_ARM_THUMB
-         "FP: %08x\n",
-#else
-         "R7: %08x\n",
-#endif
-         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
-  _alert("R8: %08x SB: %08x SL: %08x "
-#ifdef CONFIG_ARM_THUMB
-         "R11: %08x\n",
-#else
-         " FP: %08x\n",
-#endif
-         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
-  _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
-         regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-
-  _alert("CPSR: %08x\n", regs[REG_CPSR]);
-}
-#endif
-
-/****************************************************************************
- * Name: arm_dump_task
- ****************************************************************************/
-
-static void arm_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
-{
-#ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_filled = 0;
-  uint32_t stack_used;
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-  struct cpuload_s cpuload;
-  uint32_t fracpart;
-  uint32_t intpart;
-  uint32_t tmp;
-
-  clock_cpuload(tcb->pid, &cpuload);
-
-  if (cpuload.total > 0)
-    {
-      tmp      = (1000 * cpuload.active) / cpuload.total;
-      intpart  = tmp / 10;
-      fracpart = tmp - 10 * intpart;
-    }
-  else
-    {
-      intpart  = 0;
-      fracpart = 0;
-    }
-#endif
-
-#ifdef CONFIG_STACK_COLORATION
-  stack_used = up_check_tcbstack(tcb);
-  if (tcb->adj_stack_size > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 * stack_used / tcb->adj_stack_size;
-    }
-#endif
-
-  /* Dump interesting properties of this task */
-
-  _alert("  %4d   %4d"
-#ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#endif
-         "   %7lu"
-#ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "   %3" PRId32 ".%01" PRId32 "%%"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   %s"
-#endif
-         "\n",
-         tcb->pid, tcb->sched_priority,
-#ifdef CONFIG_STACK_COLORATION
-         (unsigned long)up_check_tcbstack(tcb),
-#endif
-         (unsigned long)tcb->adj_stack_size
-#ifdef CONFIG_STACK_COLORATION
-        , stack_filled / 10, stack_filled % 10,
-        (stack_filled >= 10 * 80 ? '!' : ' ')
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-        , intpart, fracpart
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-        , tcb->name
-#endif
-        );
-}
-
-/****************************************************************************
- * Name: arm_dump_backtrace
- ****************************************************************************/
-
-#ifdef CONFIG_SCHED_BACKTRACE
-static void arm_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
-{
-  /* Show back trace */
-
-  sched_dumpstack(tcb->pid);
-}
-#endif
-
-/****************************************************************************
- * Name: arm_showtasks
- ****************************************************************************/
-
-static inline void arm_showtasks(void)
-{
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-#  ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_used = up_check_intstack();
-  uint32_t stack_filled = 0;
-
-  if ((CONFIG_ARCH_INTERRUPTSTACK & ~7) > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 *
-                     stack_used / (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-    }
-#  endif
-#endif
-
-  /* Dump interesting properties of each task in the crash environment */
-
-  _alert("   PID    PRI"
-#ifdef CONFIG_STACK_COLORATION
-         "      USED"
-#endif
-         "     STACK"
-#ifdef CONFIG_STACK_COLORATION
-         "   FILLED "
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "      CPU"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   COMMAND"
-#endif
-         "\n");
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  _alert("  ----   ----"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#  endif
-         "   %7lu"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#  endif
-#  ifdef CONFIG_SCHED_CPULOAD
-         "     ----"
-#  endif
-#  if CONFIG_TASK_NAME_SIZE > 0
-         "   irq"
-#  endif
-         "\n"
-#  ifdef CONFIG_STACK_COLORATION
-         , (unsigned long)stack_used
-#  endif
-         , (unsigned long)(CONFIG_ARCH_INTERRUPTSTACK & ~7)
-#  ifdef CONFIG_STACK_COLORATION
-         , stack_filled / 10, stack_filled % 10,
-         (stack_filled >= 10 * 80 ? '!' : ' ')
-#  endif
-        );
-#endif
-
-  nxsched_foreach(arm_dump_task, NULL);
-#ifdef CONFIG_SCHED_BACKTRACE
-  nxsched_foreach(arm_dump_backtrace, NULL);
-#endif
-}
-
-/****************************************************************************
- * Name: assert_tracecallback
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_USBDUMP
-static int usbtrace_syslog(FAR const char *fmt, ...)
-{
-  va_list ap;
-
-  /* Let vsyslog do the real work */
-
-  va_start(ap, fmt);
-  vsyslog(LOG_EMERG, fmt, ap);
-  va_end(ap);
-  return OK;
-}
-
-static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
-{
-  usbtrace_trprintf(usbtrace_syslog, trace->event, trace->value);
-  return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: up_dumpstate
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
-{
-  FAR struct tcb_s *rtcb = running_task();
-  uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 3
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
-
-  /* Dump the registers (if available) */
-
-  arm_registerdump();
-
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
-
-  /* Get the limits on the interrupt stack memory */
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 3
-  istackbase = (uint32_t)&g_intstackalloc;
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~3);
-
-  /* Show interrupt stack info */
-
-  _alert("sp:     %08x\n", sp);
-  _alert("IRQ stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("  used: %08x\n", up_check_intstack());
-#endif
-
-  /* Does the current stack pointer lie within the interrupt
-   * stack?
-   */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      _alert("Interrupt Stack\n", sp);
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
-
-  if (CURRENT_REGS)
-    {
-      sp = CURRENT_REGS[REG_R13];
-      _alert("User sp: %08x\n", sp);
-    }
-
-  /* Show user stack info */
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("  used: %08x\n", up_check_tcbstack(rtcb));
-#endif
-
-#else
-  _alert("sp:         %08x\n", sp);
-  _alert("stack base: %08x\n", ustackbase);
-  _alert("stack size: %08x\n", ustacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("stack used: %08x\n", up_check_tcbstack(rtcb));
-#endif
-#endif
-
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-  else
-    {
-      _alert("ERROR: Stack pointer is not within allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-    }
-
-  /* Dump the state of all tasks (if available) */
-
-  arm_showtasks();
-
-#ifdef CONFIG_ARCH_USBDUMP
-  /* Dump USB trace data */
-
-  usbtrace_enumerate(assert_tracecallback, NULL);
-#endif
-}
-#else
-# define up_dumpstate()
-#endif
-
-/****************************************************************************
- * Name: _up_assert
- ****************************************************************************/
-
-static void _up_assert(void)
-{
-  /* Flush any buffered SYSLOG data */
-
-  syslog_flush();
-
-  /* Are we in an interrupt handler or the idle task? */
-
-  if (CURRENT_REGS || running_task()->flink == NULL)
-    {
-      up_irq_save();
-      for (; ; )
-        {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
-          board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-#ifdef CONFIG_ARCH_LEDS
-          board_autoled_on(LED_PANIC);
-          up_mdelay(250);
-          board_autoled_off(LED_PANIC);
-          up_mdelay(250);
-#endif
-        }
-    }
-  else
-    {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
-      board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-    }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_assert
- ****************************************************************************/
-
-void up_assert(const char *filename, int lineno)
-{
-  board_autoled_on(LED_ASSERTION);
-
-  /* Flush any buffered SYSLOG data (prior to the assertion) */
-
-  syslog_flush();
-
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
-#endif
-
-  up_dumpstate();
-
-  /* Flush any buffered SYSLOG data (from the above) */
-
-  syslog_flush();
-
-#ifdef CONFIG_BOARD_CRASHDUMP
-  board_crashdump(up_getsp(), running_task(), filename, lineno);
-#endif
-
-  _up_assert();
-}
diff --git a/arch/arm/src/armv6-m/arm_assert.c b/arch/arm/src/armv6-m/arm_assert.c
deleted file mode 100644
index 70bb9a9..0000000
--- a/arch/arm/src/armv6-m/arm_assert.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv6-m/arm_assert.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <nuttx/syslog/syslog.h>
-#include <nuttx/usb/usbdev_trace.h>
-
-#include <arch/board/board.h>
-
-#include "arm_arch.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* USB trace dumping */
-
-#ifndef CONFIG_USBDEV_TRACE
-#  undef CONFIG_ARCH_USBDUMP
-#endif
-
-#ifndef CONFIG_BOARD_RESET_ON_ASSERT
-#  define CONFIG_BOARD_RESET_ON_ASSERT 0
-#endif
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_stackdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void arm_stackdump(uint32_t sp, uint32_t stack_top)
-{
-  uint32_t stack;
-
-  /* Flush any buffered SYSLOG data to avoid overwrite */
-
-  syslog_flush();
-
-  for (stack = sp & ~0x1f; stack < (stack_top & ~0x1f); stack += 32)
-    {
-      uint32_t *ptr = (uint32_t *)stack;
-      _alert("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-             stack, ptr[0], ptr[1], ptr[2], ptr[3],
-             ptr[4], ptr[5], ptr[6], ptr[7]);
-    }
-}
-#endif
-
-/****************************************************************************
- * Name: arm_registerdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(FAR volatile uint32_t *regs)
-{
-  /* Are user registers available from interrupt processing? */
-
-  if (regs == NULL)
-    {
-      /* No.. capture user registers by hand */
-
-      arm_saveusercontext(s_last_regs);
-      regs = s_last_regs;
-    }
-
-  /* Dump the interrupt registers */
-
-  _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
-         regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
-  _alert("R4: %08x R5: %08x R6: %08x  FP: %08x\n",
-         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
-  _alert("R8: %08x SB: %08x SL: %08x R11: %08x\n",
-         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
-  _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
-         regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-#ifdef CONFIG_BUILD_PROTECTED
-  _alert("xPSR: %08x PRIMASK: %08x EXEC_RETURN: %08x\n",
-         regs[REG_XPSR], regs[REG_PRIMASK], regs[REG_EXC_RETURN]);
-#else
-  _alert("xPSR: %08x PRIMASK: %08x\n",
-         regs[REG_XPSR], regs[REG_PRIMASK]);
-#endif
-}
-#else
-# define arm_registerdump(regs)
-#endif
-
-/****************************************************************************
- * Name: up_taskdump
- ****************************************************************************/
-
-#if defined(CONFIG_STACK_COLORATION) || defined(CONFIG_SCHED_BACKTRACE)
-static void up_taskdump(FAR struct tcb_s *tcb, FAR void *arg)
-{
-  /* Dump interesting properties of this task */
-
-  _alert(
-#if CONFIG_TASK_NAME_SIZE > 0
-         "%s: "
-#endif
-         "PID=%d "
-#ifdef CONFIG_STACK_COLORATION
-         "Stack Used=%lu of %lu\n",
-#else
-         "Stack=%lu\n",
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-        tcb->name,
-#endif
-        tcb->pid,
-#ifdef CONFIG_STACK_COLORATION
-        (unsigned long)up_check_tcbstack(tcb),
-#endif
-        (unsigned long)tcb->adj_stack_size);
-
-  /* Show back trace */
-
-#ifdef CONFIG_SCHED_BACKTRACE
-  sched_dumpstack(tcb->pid);
-#endif
-
-  /* Dump the registers */
-
-  arm_registerdump(tcb->xcp.regs);
-}
-
-/****************************************************************************
- * Name: up_showtasks
- ****************************************************************************/
-
-static inline void up_showtasks(void)
-{
-  /* Dump interesting properties of each task in the crash environment */
-
-  nxsched_foreach(up_taskdump, NULL);
-}
-#else
-#  define up_showtasks()
-#endif
-
-/****************************************************************************
- * Name: assert_tracecallback
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_USBDUMP
-static int usbtrace_syslog(FAR const char *fmt, ...)
-{
-  va_list ap;
-
-  /* Let vsyslog do the real work */
-
-  va_start(ap, fmt);
-  vsyslog(LOG_EMERG, fmt, ap);
-  va_end(ap);
-  return OK;
-}
-
-static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
-{
-  usbtrace_trprintf(usbtrace_syslog, trace->event, trace->value);
-  return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: up_dumpstate
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
-{
-  FAR struct tcb_s *rtcb = running_task();
-  uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 3
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
-
-  /* Show back trace */
-
-#ifdef CONFIG_SCHED_BACKTRACE
-  sched_dumpstack(rtcb->pid);
-#endif
-
-  /* Dump the registers (if available) */
-
-  arm_registerdump(CURRENT_REGS);
-
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
-
-  /* Get the limits on the interrupt stack memory */
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 3
-  istackbase = (uint32_t)&g_intstackalloc;
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~3);
-
-  /* Show interrupt stack info */
-
-  _alert("sp:     %08x\n", sp);
-  _alert("IRQ stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("  used: %08x\n", up_check_intstack());
-#endif
-
-  /* Does the current stack pointer lie within the interrupt
-   * stack?
-   */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
-
-  if (CURRENT_REGS)
-    {
-      sp = CURRENT_REGS[REG_R13];
-      _alert("sp:     %08x\n", sp);
-    }
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("  used: %08x\n", up_check_tcbstack(rtcb));
-#endif
-#else
-  _alert("sp:         %08x\n", sp);
-  _alert("stack base: %08x\n", ustackbase);
-  _alert("stack size: %08x\n", ustacksize);
-#ifdef CONFIG_STACK_COLORATION
-  _alert("stack used: %08x\n", up_check_tcbstack(rtcb));
-#endif
-#endif
-
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-  else
-    {
-      _alert("ERROR: Stack pointer is not within allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-    }
-
-  /* Dump the state of all tasks (if available) */
-
-  up_showtasks();
-
-#ifdef CONFIG_ARCH_USBDUMP
-  /* Dump USB trace data */
-
-  usbtrace_enumerate(assert_tracecallback, NULL);
-#endif
-}
-#else
-# define up_dumpstate()
-#endif
-
-/****************************************************************************
- * Name: _up_assert
- ****************************************************************************/
-
-static void _up_assert(void)
-{
-  /* Flush any buffered SYSLOG data */
-
-  syslog_flush();
-
-  /* Are we in an interrupt handler or the idle task? */
-
-  if (CURRENT_REGS || running_task()->flink == NULL)
-    {
-      up_irq_save();
-      for (; ; )
-        {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
-          board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-#ifdef CONFIG_ARCH_LEDS
-          board_autoled_on(LED_PANIC);
-          up_mdelay(250);
-          board_autoled_off(LED_PANIC);
-          up_mdelay(250);
-#endif
-        }
-    }
-  else
-    {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
-      board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-    }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_assert
- ****************************************************************************/
-
-void up_assert(const char *filename, int lineno)
-{
-  board_autoled_on(LED_ASSERTION);
-
-  /* Flush any buffered SYSLOG data (prior to the assertion) */
-
-  syslog_flush();
-
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
-#endif
-
-  up_dumpstate();
-
-  /* Flush any buffered SYSLOG data (from the above) */
-
-  syslog_flush();
-
-#ifdef CONFIG_BOARD_CRASHDUMP
-  board_crashdump(up_getsp(), running_task(), filename, lineno);
-#endif
-
-  _up_assert();
-}
diff --git a/arch/arm/src/armv7-a/arm_assert.c b/arch/arm/src/armv7-a/arm_assert.c
deleted file mode 100644
index a87828c..0000000
--- a/arch/arm/src/armv7-a/arm_assert.c
+++ /dev/null
@@ -1,568 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv7-a/arm_assert.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <nuttx/syslog/syslog.h>
-#include <nuttx/usb/usbdev_trace.h>
-
-#include <arch/board/board.h>
-
-#include "sched/sched.h"
-#include "irq/irq.h"
-
-#include "arm_arch.h"
-#include "arm_internal.h"
-#include "chip.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* USB trace dumping */
-
-#ifndef CONFIG_USBDEV_TRACE
-#  undef CONFIG_ARCH_USBDUMP
-#endif
-
-#ifndef CONFIG_BOARD_RESET_ON_ASSERT
-#  define CONFIG_BOARD_RESET_ON_ASSERT 0
-#endif
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_stackdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void arm_stackdump(uint32_t sp, uint32_t stack_top)
-{
-  uint32_t stack;
-
-  /* Flush any buffered SYSLOG data to avoid overwrite */
-
-  syslog_flush();
-
-  for (stack = sp & ~0x1f; stack < (stack_top & ~0x1f); stack += 32)
-    {
-      uint32_t *ptr = (uint32_t *)stack;
-      _alert("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-             stack, ptr[0], ptr[1], ptr[2], ptr[3],
-             ptr[4], ptr[5], ptr[6], ptr[7]);
-    }
-}
-#endif
-
-/****************************************************************************
- * Name: arm_registerdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(FAR volatile uint32_t *regs)
-{
-  /* Are user registers available from interrupt processing? */
-
-  if (regs == NULL)
-    {
-      /* No.. capture user registers by hand */
-
-      arm_saveusercontext(s_last_regs);
-      regs = s_last_regs;
-    }
-
-  /* Dump the interrupt registers */
-
-  _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
-         regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
-  _alert("R4: %08x R5: %08x R6: %08x  "
-#ifdef CONFIG_ARM_THUMB
-         "FP: %08x\n",
-#else
-         "R7: %08x\n",
-#endif
-         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
-  _alert("R8: %08x SB: %08x SL: %08x "
-#ifdef CONFIG_ARM_THUMB
-         "R11: %08x\n",
-#else
-         " FP: %08x\n",
-#endif
-         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
-  _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
-         regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-
-  _alert("CPSR: %08x\n", regs[REG_CPSR]);
-}
-#else
-# define arm_registerdump(regs)
-#endif
-
-/****************************************************************************
- * Name: arm_dump_task
- ****************************************************************************/
-
-static void arm_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
-{
-#ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_filled = 0;
-  uint32_t stack_used;
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-  struct cpuload_s cpuload;
-  uint32_t fracpart;
-  uint32_t intpart;
-  uint32_t tmp;
-
-  clock_cpuload(tcb->pid, &cpuload);
-
-  if (cpuload.total > 0)
-    {
-      tmp      = (1000 * cpuload.active) / cpuload.total;
-      intpart  = tmp / 10;
-      fracpart = tmp - 10 * intpart;
-    }
-  else
-    {
-      intpart  = 0;
-      fracpart = 0;
-    }
-#endif
-
-#ifdef CONFIG_STACK_COLORATION
-  stack_used = up_check_tcbstack(tcb);
-  if (tcb->adj_stack_size > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 * stack_used / tcb->adj_stack_size;
-    }
-#endif
-
-  /* Dump interesting properties of this task */
-
-  _alert("  %4d   %4d"
-#ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#endif
-         "   %7lu"
-#ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "   %3" PRId32 ".%01" PRId32 "%%"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   %s"
-#endif
-         "\n",
-         tcb->pid, tcb->sched_priority,
-#ifdef CONFIG_STACK_COLORATION
-         (unsigned long)up_check_tcbstack(tcb),
-#endif
-         (unsigned long)tcb->adj_stack_size
-#ifdef CONFIG_STACK_COLORATION
-        , stack_filled / 10, stack_filled % 10,
-        (stack_filled >= 10 * 80 ? '!' : ' ')
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-        , intpart, fracpart
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-        , tcb->name
-#endif
-        );
-}
-
-/****************************************************************************
- * Name: arm_dump_backtrace
- ****************************************************************************/
-
-#ifdef CONFIG_SCHED_BACKTRACE
-static void arm_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
-{
-  /* Show back trace */
-
-  sched_dumpstack(tcb->pid);
-}
-#endif
-
-/****************************************************************************
- * Name: arm_showtasks
- ****************************************************************************/
-
-static inline void arm_showtasks(void)
-{
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-#  ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_used = up_check_intstack();
-  uint32_t stack_filled = 0;
-
-  if ((CONFIG_ARCH_INTERRUPTSTACK & ~7) > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 *
-                     stack_used / (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-    }
-#  endif
-#endif
-
-  /* Dump interesting properties of each task in the crash environment */
-
-  _alert("   PID    PRI"
-#ifdef CONFIG_STACK_COLORATION
-         "      USED"
-#endif
-         "     STACK"
-#ifdef CONFIG_STACK_COLORATION
-         "   FILLED "
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "      CPU"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   COMMAND"
-#endif
-         "\n");
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  _alert("  ----   ----"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#  endif
-         "   %7lu"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#  endif
-#  ifdef CONFIG_SCHED_CPULOAD
-         "     ----"
-#  endif
-#  if CONFIG_TASK_NAME_SIZE > 0
-         "   irq"
-#  endif
-         "\n"
-#  ifdef CONFIG_STACK_COLORATION
-         , (unsigned long)stack_used
-#  endif
-         , (unsigned long)(CONFIG_ARCH_INTERRUPTSTACK & ~7)
-#  ifdef CONFIG_STACK_COLORATION
-         , stack_filled / 10, stack_filled % 10,
-         (stack_filled >= 10 * 80 ? '!' : ' ')
-#  endif
-        );
-#endif
-
-  nxsched_foreach(arm_dump_task, NULL);
-#ifdef CONFIG_SCHED_BACKTRACE
-  nxsched_foreach(arm_dump_backtrace, NULL);
-#endif
-}
-
-/****************************************************************************
- * Name: assert_tracecallback
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_USBDUMP
-static int usbtrace_syslog(FAR const char *fmt, ...)
-{
-  va_list ap;
-
-  /* Let vsyslog do the real work */
-
-  va_start(ap, fmt);
-  vsyslog(LOG_EMERG, fmt, ap);
-  va_end(ap);
-  return OK;
-}
-
-static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
-{
-  usbtrace_trprintf(usbtrace_syslog, trace->event, trace->value);
-  return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: up_dumpstate
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
-{
-  FAR struct tcb_s *rtcb = running_task();
-  uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  uint32_t kstackbase = 0;
-#endif
-
-  /* Show back trace */
-
-#ifdef CONFIG_SCHED_BACKTRACE
-  sched_dumpstack(rtcb->pid);
-#endif
-
-  /* Dump the CPU registers (if available) */
-
-  arm_registerdump(CURRENT_REGS);
-
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
-
-  _alert("Current sp: %08x\n", sp);
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Get the limits on the interrupt stack memory */
-
-#ifdef CONFIG_SMP
-  istackbase = (uint32_t)arm_intstack_alloc();
-#else
-  istackbase = (uint32_t)&g_intstackalloc;
-#endif
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-
-  /* Show interrupt stack info */
-
-  _alert("Interrupt stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-#endif
-
-  /* Show user stack info */
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  /* Does this thread have a kernel stack allocated? */
-
-  if (rtcb->xcp.kstack)
-    {
-      kstackbase = (uint32_t)rtcb->xcp.kstack;
-
-      _alert("Kernel stack:\n");
-      _alert("  base: %08x\n", kstackbase);
-      _alert("  size: %08x\n", CONFIG_ARCH_KERNEL_STACKSIZE);
-    }
-#endif
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Does the current stack pointer lie within the interrupt stack? */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      _alert("Interrupt Stack\n", sp);
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-#endif
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
-
-  if (CURRENT_REGS)
-    {
-      sp = CURRENT_REGS[REG_R13];
-      _alert("User sp: %08x\n", sp);
-    }
-
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      _alert("User Stack\n", sp);
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  /* Dump the user stack if the stack pointer lies within the allocated
-   * kernel stack memory.
-   */
-
-  else if (sp >= kstackbase &&
-           sp < kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE)
-    {
-      _alert("Kernel Stack\n", sp);
-      arm_stackdump(sp, kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE);
-    }
-#endif
-  else
-    {
-      _alert("ERROR: Stack pointer is not within the allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-#ifdef CONFIG_ARCH_KERNEL_STACK
-      arm_stackdump(kstackbase, kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE);
-#endif
-    }
-
-#ifdef CONFIG_SMP
-  /* Show the CPU number */
-
-  _alert("CPU%d:\n", up_cpu_index());
-#endif
-
-  /* Dump the state of all tasks (if available) */
-
-  arm_showtasks();
-
-#ifdef CONFIG_ARCH_USBDUMP
-  /* Dump USB trace data */
-
-  usbtrace_enumerate(assert_tracecallback, NULL);
-#endif
-}
-#else
-# define up_dumpstate()
-#endif
-
-/****************************************************************************
- * Name: _up_assert
- ****************************************************************************/
-
-static void _up_assert(void)
-{
-  /* Flush any buffered SYSLOG data */
-
-  syslog_flush();
-
-  /* Are we in an interrupt handler or the idle task? */
-
-  if (CURRENT_REGS || running_task()->flink == NULL)
-    {
-      /* Disable interrupts on this CPU */
-
-      up_irq_save();
-
-      for (; ; )
-        {
-#ifdef CONFIG_SMP
-          /* Try (again) to stop activity on other CPUs */
-
-          spin_trylock(&g_cpu_irqlock);
-#endif
-
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
-          board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-#ifdef CONFIG_ARCH_LEDS
-          /* FLASH LEDs a 2Hz */
-
-          board_autoled_on(LED_PANIC);
-          up_mdelay(250);
-          board_autoled_off(LED_PANIC);
-          up_mdelay(250);
-#endif
-        }
-    }
-  else
-    {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
-      board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-    }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_assert
- ****************************************************************************/
-
-void up_assert(const char *filename, int lineno)
-{
-  board_autoled_on(LED_ASSERTION);
-
-  /* Flush any buffered SYSLOG data (prior to the assertion) */
-
-  syslog_flush();
-
-#ifdef CONFIG_SMP
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed CPU%d at file:%s line: %d task: %s\n",
-         up_cpu_index(), filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed CPU%d at file:%s line: %d\n",
-         up_cpu_index(), filename, lineno);
-#endif
-#else
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
-#endif
-#endif
-
-  up_dumpstate();
-
-  /* Flush any buffered SYSLOG data (from the above) */
-
-  syslog_flush();
-
-#ifdef CONFIG_BOARD_CRASHDUMP
-  board_crashdump(up_getsp(), running_task(), filename, lineno);
-#endif
-
-  _up_assert();
-}
diff --git a/arch/arm/src/armv7-m/arm_assert.c b/arch/arm/src/armv7-m/arm_assert.c
deleted file mode 100644
index 5030bde..0000000
--- a/arch/arm/src/armv7-m/arm_assert.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv7-m/arm_assert.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <nuttx/syslog/syslog.h>
-#include <nuttx/usb/usbdev_trace.h>
-
-#include <arch/board/board.h>
-
-#include "sched/sched.h"
-#include "irq/irq.h"
-
-#include "arm_arch.h"
-#include "arm_internal.h"
-#include "chip.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* USB trace dumping */
-
-#ifndef CONFIG_USBDEV_TRACE
-#  undef CONFIG_ARCH_USBDUMP
-#endif
-
-#ifndef CONFIG_BOARD_RESET_ON_ASSERT
-#  define CONFIG_BOARD_RESET_ON_ASSERT 0
-#endif
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_stackdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void arm_stackdump(uint32_t sp, uint32_t stack_top)
-{
-  uint32_t stack;
-
-  /* Flush any buffered SYSLOG data to avoid overwrite */
-
-  syslog_flush();
-
-  for (stack = sp & ~0x1f; stack < (stack_top & ~0x1f); stack += 32)
-    {
-      uint32_t *ptr = (uint32_t *)stack;
-      _alert("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-             stack, ptr[0], ptr[1], ptr[2], ptr[3],
-             ptr[4], ptr[5], ptr[6], ptr[7]);
-    }
-}
-#endif
-
-/****************************************************************************
- * Name: arm_registerdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(FAR volatile uint32_t *regs)
-{
-  /* Are user registers available from interrupt processing? */
-
-  if (regs == NULL)
-    {
-      /* No.. capture user registers by hand */
-
-      arm_saveusercontext(s_last_regs);
-      regs = s_last_regs;
-    }
-
-  /* Dump the interrupt registers */
-
-  _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
-         regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
-  _alert("R4: %08x R5: %08x R6: %08x  FP: %08x\n",
-         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
-  _alert("R8: %08x SB: %08x SL: %08x R11: %08x\n",
-         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
-  _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
-         regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-
-#ifdef CONFIG_ARMV7M_USEBASEPRI
-  _alert("xPSR: %08x BASEPRI: %08x CONTROL: %08x\n",
-         regs[REG_XPSR], regs[REG_BASEPRI], getcontrol());
-#else
-  _alert("xPSR: %08x PRIMASK: %08x CONTROL: %08x\n",
-         regs[REG_XPSR], regs[REG_PRIMASK], getcontrol());
-#endif
-
-#ifdef CONFIG_BUILD_PROTECTED
-  _alert("EXC_RETURN: %08x\n", regs[REG_EXC_RETURN]);
-#endif
-}
-#endif
-
-/****************************************************************************
- * Name: up_taskdump
- ****************************************************************************/
-
-static void up_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
-{
-#ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_filled = 0;
-  uint32_t stack_used;
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-  struct cpuload_s cpuload;
-  uint32_t fracpart;
-  uint32_t intpart;
-  uint32_t tmp;
-
-  clock_cpuload(tcb->pid, &cpuload);
-
-  if (cpuload.total > 0)
-    {
-      tmp      = (1000 * cpuload.active) / cpuload.total;
-      intpart  = tmp / 10;
-      fracpart = tmp - 10 * intpart;
-    }
-  else
-    {
-      intpart  = 0;
-      fracpart = 0;
-    }
-#endif
-
-#ifdef CONFIG_STACK_COLORATION
-  stack_used = up_check_tcbstack(tcb);
-  if (tcb->adj_stack_size > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 * stack_used / tcb->adj_stack_size;
-    }
-#endif
-
-  /* Dump interesting properties of this task */
-
-  _alert("  %4d   %4d"
-#ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#endif
-         "   %7lu"
-#ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "   %3" PRId32 ".%01" PRId32 "%%"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   %s"
-#endif
-         "\n",
-         tcb->pid, tcb->sched_priority,
-#ifdef CONFIG_STACK_COLORATION
-         (unsigned long)up_check_tcbstack(tcb),
-#endif
-         (unsigned long)tcb->adj_stack_size
-#ifdef CONFIG_STACK_COLORATION
-        , stack_filled / 10, stack_filled % 10,
-        (stack_filled >= 10 * 80 ? '!' : ' ')
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-        , intpart, fracpart
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-        , tcb->name
-#endif
-        );
-}
-
-/****************************************************************************
- * Name: up_dump_backtrace
- ****************************************************************************/
-
-#ifdef CONFIG_SCHED_BACKTRACE
-static void up_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
-{
-  /* Show back trace */
-
-  sched_dumpstack(tcb->pid);
-}
-#endif
-
-/****************************************************************************
- * Name: up_showtasks
- ****************************************************************************/
-
-static inline void up_showtasks(void)
-{
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-#  ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_used = up_check_intstack();
-  uint32_t stack_filled = 0;
-
-  if ((CONFIG_ARCH_INTERRUPTSTACK & ~7) > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 *
-                     stack_used / (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-    }
-#  endif
-#endif
-
-  /* Dump interesting properties of each task in the crash environment */
-
-  _alert("   PID    PRI"
-#ifdef CONFIG_STACK_COLORATION
-         "      USED"
-#endif
-         "     STACK"
-#ifdef CONFIG_STACK_COLORATION
-         "   FILLED "
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "      CPU"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   COMMAND"
-#endif
-         "\n");
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  _alert("  ----   ----"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#  endif
-         "   %7lu"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#  endif
-#  ifdef CONFIG_SCHED_CPULOAD
-         "     ----"
-#  endif
-#  if CONFIG_TASK_NAME_SIZE > 0
-         "   irq"
-#  endif
-         "\n"
-#  ifdef CONFIG_STACK_COLORATION
-         , (unsigned long)stack_used
-#  endif
-         , (unsigned long)(CONFIG_ARCH_INTERRUPTSTACK & ~7)
-#  ifdef CONFIG_STACK_COLORATION
-         , stack_filled / 10, stack_filled % 10,
-         (stack_filled >= 10 * 80 ? '!' : ' ')
-#  endif
-        );
-#endif
-
-  nxsched_foreach(up_dump_task, NULL);
-#ifdef CONFIG_SCHED_BACKTRACE
-  nxsched_foreach(up_dump_backtrace, NULL);
-#endif
-}
-
-/****************************************************************************
- * Name: assert_tracecallback
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_USBDUMP
-static int usbtrace_syslog(FAR const char *fmt, ...)
-{
-  va_list ap;
-
-  /* Let vsyslog do the real work */
-
-  va_start(ap, fmt);
-  vsyslog(LOG_EMERG, fmt, ap);
-  va_end(ap);
-  return OK;
-}
-
-static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
-{
-  usbtrace_trprintf(usbtrace_syslog, trace->event, trace->value);
-  return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: up_dumpstate
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
-{
-  FAR struct tcb_s *rtcb = running_task();
-  uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
-
-  /* Show back trace */
-
-#ifdef CONFIG_SCHED_BACKTRACE
-  sched_dumpstack(rtcb->pid);
-#endif
-
-  /* Dump the registers (if available) */
-
-  arm_registerdump(CURRENT_REGS);
-
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Get the limits on the interrupt stack memory */
-
-#ifdef CONFIG_SMP
-  istackbase = (uint32_t)arm_intstack_alloc();
-#else
-  istackbase = (uint32_t)&g_intstackalloc;
-#endif
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-
-  /* Show interrupt stack info */
-
-  _alert("sp:     %08x\n", sp);
-  _alert("IRQ stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-
-  /* Does the current stack pointer lie within the interrupt
-   * stack?
-   */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
-
-  if (CURRENT_REGS)
-    {
-      sp = CURRENT_REGS[REG_R13];
-      _alert("sp:     %08x\n", sp);
-    }
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-#else
-  _alert("sp:         %08x\n", sp);
-  _alert("stack base: %08x\n", ustackbase);
-  _alert("stack size: %08x\n", ustacksize);
-#endif
-
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-  else
-    {
-      _alert("ERROR: Stack pointer is not within the allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-    }
-
-#ifdef CONFIG_SMP
-  /* Show the CPU number */
-
-  _alert("CPU%d:\n", up_cpu_index());
-#endif
-
-  /* Dump the state of all tasks (if available) */
-
-  up_showtasks();
-
-#ifdef CONFIG_ARCH_USBDUMP
-  /* Dump USB trace data */
-
-  usbtrace_enumerate(assert_tracecallback, NULL);
-#endif
-}
-#else
-# define up_dumpstate()
-#endif
-
-/****************************************************************************
- * Name: _up_assert
- ****************************************************************************/
-
-static void _up_assert(void)
-{
-  /* Flush any buffered SYSLOG data */
-
-  syslog_flush();
-
-  /* Are we in an interrupt handler or the idle task? */
-
-  if (CURRENT_REGS || (running_task())->flink == NULL)
-    {
-      up_irq_save();
-      for (; ; )
-        {
-#ifdef CONFIG_SMP
-          /* Try (again) to stop activity on other CPUs */
-
-          spin_trylock(&g_cpu_irqlock);
-#endif
-
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
-          board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-#ifdef CONFIG_ARCH_LEDS
-          board_autoled_on(LED_PANIC);
-          up_mdelay(250);
-          board_autoled_off(LED_PANIC);
-          up_mdelay(250);
-#endif
-        }
-    }
-  else
-    {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
-      board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-    }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_assert
- ****************************************************************************/
-
-void up_assert(const char *filename, int lineno)
-{
-  board_autoled_on(LED_ASSERTION);
-
-  /* Flush any buffered SYSLOG data (prior to the assertion) */
-
-  syslog_flush();
-
-#ifdef CONFIG_SMP
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed CPU%d at file:%s line: %d task: %s\n",
-         up_cpu_index(), filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed CPU%d at file:%s line: %d\n",
-         up_cpu_index(), filename, lineno);
-#endif
-#else
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
-#endif
-#endif
-
-  up_dumpstate();
-
-  /* Flush any buffered SYSLOG data (from the above) */
-
-  syslog_flush();
-
-#ifdef CONFIG_BOARD_CRASHDUMP
-  board_crashdump(up_getsp(), running_task(), filename, lineno);
-#endif
-
-  _up_assert();
-}
diff --git a/arch/arm/src/armv7-r/arm_assert.c b/arch/arm/src/armv7-r/arm_assert.c
deleted file mode 100644
index 77bb59e..0000000
--- a/arch/arm/src/armv7-r/arm_assert.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/****************************************************************************
- * arch/arm/src/armv7-r/arm_assert.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.  The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/irq.h>
-#include <nuttx/arch.h>
-#include <nuttx/board.h>
-#include <nuttx/syslog/syslog.h>
-#include <nuttx/usb/usbdev_trace.h>
-
-#include <arch/board/board.h>
-
-#include "arm_arch.h"
-#include "sched/sched.h"
-#include "arm_internal.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* USB trace dumping */
-
-#ifndef CONFIG_USBDEV_TRACE
-#  undef CONFIG_ARCH_USBDUMP
-#endif
-
-#ifndef CONFIG_BOARD_RESET_ON_ASSERT
-#  define CONFIG_BOARD_RESET_ON_ASSERT 0
-#endif
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: arm_stackdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void arm_stackdump(uint32_t sp, uint32_t stack_top)
-{
-  uint32_t stack;
-
-  /* Flush any buffered SYSLOG data to avoid overwrite */
-
-  syslog_flush();
-
-  for (stack = sp & ~0x1f; stack < (stack_top & ~0x1f); stack += 32)
-    {
-      uint32_t *ptr = (uint32_t *)stack;
-      _alert("%08x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-             stack, ptr[0], ptr[1], ptr[2], ptr[3],
-             ptr[4], ptr[5], ptr[6], ptr[7]);
-    }
-}
-#endif
-
-/****************************************************************************
- * Name: arm_registerdump
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(FAR volatile uint32_t *regs)
-{
-  /* Are user registers available from interrupt processing? */
-
-  if (regs == NULL)
-    {
-      /* No.. capture user registers by hand */
-
-      arm_saveusercontext(s_last_regs);
-      regs = s_last_regs;
-    }
-
-  /* Dump the interrupt registers */
-
-  _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
-         regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
-  _alert("R4: %08x R5: %08x R6: %08x  "
-#ifdef CONFIG_ARM_THUMB
-         "FP: %08x\n",
-#else
-         "R7: %08x\n",
-#endif
-         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
-  _alert("R8: %08x SB: %08x SL: %08x "
-#ifdef CONFIG_ARM_THUMB
-         "R11: %08x\n",
-#else
-         " FP: %08x\n",
-#endif
-         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
-  _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
-         regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
-
-  _alert("CPSR: %08x\n", regs[REG_CPSR]);
-}
-#else
-# define arm_registerdump(regs)
-#endif
-
-/****************************************************************************
- * Name: arm_dump_task
- ****************************************************************************/
-
-static void arm_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
-{
-#ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_filled = 0;
-  uint32_t stack_used;
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-  struct cpuload_s cpuload;
-  uint32_t fracpart;
-  uint32_t intpart;
-  uint32_t tmp;
-
-  clock_cpuload(tcb->pid, &cpuload);
-
-  if (cpuload.total > 0)
-    {
-      tmp      = (1000 * cpuload.active) / cpuload.total;
-      intpart  = tmp / 10;
-      fracpart = tmp - 10 * intpart;
-    }
-  else
-    {
-      intpart  = 0;
-      fracpart = 0;
-    }
-#endif
-
-#ifdef CONFIG_STACK_COLORATION
-  stack_used = up_check_tcbstack(tcb);
-  if (tcb->adj_stack_size > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 * stack_used / tcb->adj_stack_size;
-    }
-#endif
-
-  /* Dump interesting properties of this task */
-
-  _alert("  %4d   %4d"
-#ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#endif
-         "   %7lu"
-#ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "   %3" PRId32 ".%01" PRId32 "%%"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   %s"
-#endif
-         "\n",
-         tcb->pid, tcb->sched_priority,
-#ifdef CONFIG_STACK_COLORATION
-         (unsigned long)up_check_tcbstack(tcb),
-#endif
-         (unsigned long)tcb->adj_stack_size
-#ifdef CONFIG_STACK_COLORATION
-         , stack_filled / 10, stack_filled % 10,
-         (stack_filled >= 10 * 80 ? '!' : ' ')
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         , intpart, fracpart
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         , tcb->name
-#endif
-        );
-}
-
-/****************************************************************************
- * Name: arm_dump_backtrace
- ****************************************************************************/
-
-#ifdef CONFIG_SCHED_BACKTRACE
-static void arm_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
-{
-  /* Show back trace */
-
-  sched_dumpstack(tcb->pid);
-}
-#endif
-
-/****************************************************************************
- * Name: arm_showtasks
- ****************************************************************************/
-
-static inline void arm_showtasks(void)
-{
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-#  ifdef CONFIG_STACK_COLORATION
-  uint32_t stack_used = up_check_intstack();
-  uint32_t stack_filled = 0;
-
-  if ((CONFIG_ARCH_INTERRUPTSTACK & ~7) > 0 && stack_used > 0)
-    {
-      /* Use fixed-point math with one decimal place */
-
-      stack_filled = 10 * 100 *
-                     stack_used / (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-    }
-#  endif
-#endif
-
-  /* Dump interesting properties of each task in the crash environment */
-
-  _alert("   PID    PRI"
-#ifdef CONFIG_STACK_COLORATION
-         "      USED"
-#endif
-         "     STACK"
-#ifdef CONFIG_STACK_COLORATION
-         "   FILLED "
-#endif
-#ifdef CONFIG_SCHED_CPULOAD
-         "      CPU"
-#endif
-#if CONFIG_TASK_NAME_SIZE > 0
-         "   COMMAND"
-#endif
-         "\n");
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  _alert("  ----   ----"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %7lu"
-#  endif
-         "   %7lu"
-#  ifdef CONFIG_STACK_COLORATION
-         "   %3" PRId32 ".%1" PRId32 "%%%c"
-#  endif
-#  ifdef CONFIG_SCHED_CPULOAD
-         "     ----"
-#  endif
-#  if CONFIG_TASK_NAME_SIZE > 0
-         "   irq"
-#  endif
-         "\n"
-#  ifdef CONFIG_STACK_COLORATION
-         , (unsigned long)stack_used
-#  endif
-         , (unsigned long)(CONFIG_ARCH_INTERRUPTSTACK & ~7)
-#  ifdef CONFIG_STACK_COLORATION
-         , stack_filled / 10, stack_filled % 10,
-         (stack_filled >= 10 * 80 ? '!' : ' ')
-#  endif
-        );
-#endif
-
-  nxsched_foreach(arm_dump_task, NULL);
-#ifdef CONFIG_SCHED_BACKTRACE
-  nxsched_foreach(arm_dump_backtrace, NULL);
-#endif
-}
-
-/****************************************************************************
- * Name: assert_tracecallback
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_USBDUMP
-static int usbtrace_syslog(FAR const char *fmt, ...)
-{
-  va_list ap;
-
-  /* Let vsyslog do the real work */
-
-  va_start(ap, fmt);
-  vsyslog(LOG_EMERG, fmt, ap);
-  va_end(ap);
-  return OK;
-}
-
-static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
-{
-  usbtrace_trprintf(usbtrace_syslog, trace->event, trace->value);
-  return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: up_dumpstate
- ****************************************************************************/
-
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
-{
-  FAR struct tcb_s *rtcb = running_task();
-  uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  uint32_t kstackbase = 0;
-#endif
-
-  /* Show back trace */
-
-#ifdef CONFIG_SCHED_BACKTRACE
-  sched_dumpstack(rtcb->pid);
-#endif
-
-  /* Dump the registers (if available) */
-
-  arm_registerdump(CURRENT_REGS);
-
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
-
-  _alert("Current sp: %08x\n", sp);
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Get the limits on the interrupt stack memory */
-
-  istackbase = (uint32_t)&g_intstackalloc;
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-
-  /* Show interrupt stack info */
-
-  _alert("Interrupt stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-#endif
-
-  /* Show user stack info */
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  /* Does this thread have a kernel stack allocated? */
-
-  if (rtcb->xcp.kstack)
-    {
-      kstackbase = (uint32_t)rtcb->xcp.kstack;
-
-      _alert("Kernel stack:\n");
-      _alert("  base: %08x\n", kstackbase);
-      _alert("  size: %08x\n", CONFIG_ARCH_KERNEL_STACKSIZE);
-    }
-#endif
-
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Does the current stack pointer lie within the interrupt stack? */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      _alert("Interrupt Stack\n", sp);
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-#endif
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
-
-  if (CURRENT_REGS)
-    {
-      sp = CURRENT_REGS[REG_R13];
-      _alert("User sp: %08x\n", sp);
-    }
-
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      _alert("User Stack\n", sp);
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-
-#ifdef CONFIG_ARCH_KERNEL_STACK
-  /* Dump the user stack if the stack pointer lies within the allocated
-   * kernel stack memory.
-   */
-
-  else if (sp >= kstackbase &&
-           sp < kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE)
-    {
-      _alert("Kernel Stack\n", sp);
-      arm_stackdump(sp, kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE);
-    }
-#endif
-  else
-    {
-      _alert("ERROR: Stack pointer is not within the allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-#ifdef CONFIG_ARCH_KERNEL_STACK
-      arm_stackdump(kstackbase, kstackbase + CONFIG_ARCH_KERNEL_STACKSIZE);
-#endif
-    }
-
-  /* Dump the state of all tasks (if available) */
-
-  arm_showtasks();
-
-#ifdef CONFIG_ARCH_USBDUMP
-  /* Dump USB trace data */
-
-  usbtrace_enumerate(assert_tracecallback, NULL);
-#endif
-}
-#else
-# define up_dumpstate()
-#endif
-
-/****************************************************************************
- * Name: _up_assert
- ****************************************************************************/
-
-static void _up_assert(void)
-{
-  /* Flush any buffered SYSLOG data */
-
-  syslog_flush();
-
-  /* Are we in an interrupt handler or the idle task? */
-
-  if (CURRENT_REGS || (running_task())->flink == NULL)
-    {
-      up_irq_save();
-      for (; ; )
-        {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 1
-          board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-#ifdef CONFIG_ARCH_LEDS
-          board_autoled_on(LED_PANIC);
-          up_mdelay(250);
-          board_autoled_off(LED_PANIC);
-          up_mdelay(250);
-#endif
-        }
-    }
-  else
-    {
-#if CONFIG_BOARD_RESET_ON_ASSERT >= 2
-      board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
-#endif
-    }
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_assert
- ****************************************************************************/
-
-void up_assert(const char *filename, int lineno)
-{
-  board_autoled_on(LED_ASSERTION);
-
-  /* Flush any buffered SYSLOG data (prior to the assertion) */
-
-  syslog_flush();
-
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
-#endif
-
-  up_dumpstate();
-
-  /* Flush any buffered SYSLOG data (from the above) */
-
-  syslog_flush();
-
-#ifdef CONFIG_BOARD_CRASHDUMP
-  board_crashdump(up_getsp(), running_task(), filename, lineno);
-#endif
-
-  _up_assert();
-}
diff --git a/arch/arm/src/armv8-m/arm_assert.c b/arch/arm/src/common/arm_assert.c
similarity index 76%
rename from arch/arm/src/armv8-m/arm_assert.c
rename to arch/arm/src/common/arm_assert.c
index 7f9b4a4..6c1abb7 100644
--- a/arch/arm/src/armv8-m/arm_assert.c
+++ b/arch/arm/src/common/arm_assert.c
@@ -1,5 +1,5 @@
 /****************************************************************************
- * arch/arm/src/armv8-m/arm_assert.c
+ * arch/arm/src/common/arm_assert.c
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -64,7 +64,6 @@
 
 #ifdef CONFIG_ARCH_STACKDUMP
 static uint32_t s_last_regs[XCPTCONTEXT_REGS];
-#endif
 
 /****************************************************************************
  * Private Functions
@@ -74,7 +73,6 @@ static uint32_t s_last_regs[XCPTCONTEXT_REGS];
  * Name: arm_stackdump
  ****************************************************************************/
 
-#ifdef CONFIG_ARCH_STACKDUMP
 static void arm_stackdump(uint32_t sp, uint32_t stack_top)
 {
   uint32_t stack;
@@ -91,14 +89,12 @@ static void arm_stackdump(uint32_t sp, uint32_t stack_top)
              ptr[4], ptr[5], ptr[6], ptr[7]);
     }
 }
-#endif
 
 /****************************************************************************
  * Name: arm_registerdump
  ****************************************************************************/
 
-#ifdef CONFIG_ARCH_STACKDUMP
-static inline void arm_registerdump(FAR volatile uint32_t *regs)
+static void arm_registerdump(FAR volatile uint32_t *regs)
 {
   /* Are user registers available from interrupt processing? */
 
@@ -114,32 +110,40 @@ static inline void arm_registerdump(FAR volatile uint32_t *regs)
 
   _alert("R0: %08x R1: %08x R2: %08x  R3: %08x\n",
          regs[REG_R0], regs[REG_R1], regs[REG_R2], regs[REG_R3]);
+#ifdef CONFIG_ARM_THUMB
   _alert("R4: %08x R5: %08x R6: %08x  FP: %08x\n",
          regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
   _alert("R8: %08x SB: %08x SL: %08x R11: %08x\n",
          regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
+#else
+  _alert("R4: %08x R5: %08x R6: %08x  R7: %08x\n",
+         regs[REG_R4], regs[REG_R5], regs[REG_R6], regs[REG_R7]);
+  _alert("R8: %08x SB: %08x SL: %08x  FP: %08x\n",
+         regs[REG_R8], regs[REG_R9], regs[REG_R10], regs[REG_R11]);
+#endif
   _alert("IP: %08x SP: %08x LR: %08x  PC: %08x\n",
          regs[REG_R12], regs[REG_R13], regs[REG_R14], regs[REG_R15]);
 
-#ifdef CONFIG_ARMV8M_USEBASEPRI
+#if defined(REG_BASEPRI)
   _alert("xPSR: %08x BASEPRI: %08x CONTROL: %08x\n",
          regs[REG_XPSR], regs[REG_BASEPRI], getcontrol());
-#else
+#elif defined(REG_PRIMASK)
   _alert("xPSR: %08x PRIMASK: %08x CONTROL: %08x\n",
          regs[REG_XPSR], regs[REG_PRIMASK], getcontrol());
+#elif defined(REG_CPSR)
+  _alert("CPSR: %08x\n", regs[REG_CPSR]);
 #endif
 
-#ifdef CONFIG_BUILD_PROTECTED
+#ifdef REG_EXC_RETURN
   _alert("EXC_RETURN: %08x\n", regs[REG_EXC_RETURN]);
 #endif
 }
-#endif
 
 /****************************************************************************
- * Name: up_taskdump
+ * Name: arm_dump_task
  ****************************************************************************/
 
-static void up_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
+static void arm_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
 {
 #ifdef CONFIG_STACK_COLORATION
   uint32_t stack_filled = 0;
@@ -199,24 +203,24 @@ static void up_dump_task(FAR struct tcb_s *tcb, FAR void *arg)
 #endif
          (unsigned long)tcb->adj_stack_size
 #ifdef CONFIG_STACK_COLORATION
-        , stack_filled / 10, stack_filled % 10,
-        (stack_filled >= 10 * 80 ? '!' : ' ')
+         , stack_filled / 10, stack_filled % 10,
+         (stack_filled >= 10 * 80 ? '!' : ' ')
 #endif
 #ifdef CONFIG_SCHED_CPULOAD
-        , intpart, fracpart
+         , intpart, fracpart
 #endif
 #if CONFIG_TASK_NAME_SIZE > 0
-        , tcb->name
+         , tcb->name
 #endif
         );
 }
 
 /****************************************************************************
- * Name: up_dump_backtrace
+ * Name: arm_dump_backtrace
  ****************************************************************************/
 
 #ifdef CONFIG_SCHED_BACKTRACE
-static void up_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
+static void arm_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
 {
   /* Show back trace */
 
@@ -225,10 +229,10 @@ static void up_dump_backtrace(FAR struct tcb_s *tcb, FAR void *arg)
 #endif
 
 /****************************************************************************
- * Name: up_showtasks
+ * Name: arm_showtasks
  ****************************************************************************/
 
-static inline void up_showtasks(void)
+static void arm_showtasks(void)
 {
 #if CONFIG_ARCH_INTERRUPTSTACK > 7
 #  ifdef CONFIG_STACK_COLORATION
@@ -290,9 +294,9 @@ static inline void up_showtasks(void)
         );
 #endif
 
-  nxsched_foreach(up_dump_task, NULL);
+  nxsched_foreach(arm_dump_task, NULL);
 #ifdef CONFIG_SCHED_BACKTRACE
-  nxsched_foreach(up_dump_backtrace, NULL);
+  nxsched_foreach(arm_dump_backtrace, NULL);
 #endif
 }
 
@@ -321,20 +325,42 @@ static int assert_tracecallback(FAR struct usbtrace_s *trace, FAR void *arg)
 #endif
 
 /****************************************************************************
- * Name: up_dumpstate
+ * Name: arm_dump_stack
  ****************************************************************************/
 
-#ifdef CONFIG_ARCH_STACKDUMP
-static void up_dumpstate(void)
+static void arm_dump_stack(const char *tag, uint32_t sp,
+                           uint32_t base, uint32_t size, bool force)
+{
+  uint32_t top = base + size;
+
+  _alert("%s Stack:\n", tag);
+  _alert("sp:     %08x\n", sp);
+  _alert("  base: %08x\n", base);
+  _alert("  size: %08x\n", size);
+
+  if (sp >= base && sp < top)
+    {
+      arm_stackdump(sp, top);
+    }
+  else
+    {
+      _alert("ERROR: %s Stack pointer is not within the stack\n", tag);
+
+      if (force)
+        {
+          arm_stackdump(base, top);
+        }
+    }
+}
+
+/****************************************************************************
+ * Name: arm_dumpstate
+ ****************************************************************************/
+
+static void arm_dumpstate(void)
 {
   FAR struct tcb_s *rtcb = running_task();
   uint32_t sp = up_getsp();
-  uint32_t ustackbase;
-  uint32_t ustacksize;
-#if CONFIG_ARCH_INTERRUPTSTACK > 7
-  uint32_t istackbase;
-  uint32_t istacksize;
-#endif
 
   /* Show back trace */
 
@@ -346,87 +372,46 @@ static void up_dumpstate(void)
 
   arm_registerdump(CURRENT_REGS);
 
-  /* Get the limits on the user stack memory */
-
-  ustackbase = (uint32_t)rtcb->stack_base_ptr;
-  ustacksize = (uint32_t)rtcb->adj_stack_size;
+  /* Dump the irq stack */
 
 #if CONFIG_ARCH_INTERRUPTSTACK > 7
-  /* Get the limits on the interrupt stack memory */
-
-#ifdef CONFIG_SMP
-  istackbase = (uint32_t)arm_intstack_alloc();
-#else
-  istackbase = (uint32_t)&g_intstackalloc;
-#endif
-  istacksize = (CONFIG_ARCH_INTERRUPTSTACK & ~7);
-
-  /* Show interrupt stack info */
-
-  _alert("sp:     %08x\n", sp);
-  _alert("IRQ stack:\n");
-  _alert("  base: %08x\n", istackbase);
-  _alert("  size: %08x\n", istacksize);
-
-  /* Does the current stack pointer lie within the interrupt
-   * stack?
-   */
-
-  if (sp >= istackbase && sp < istackbase + istacksize)
-    {
-      /* Yes.. dump the interrupt stack */
-
-      arm_stackdump(sp, istackbase + istacksize);
-    }
-  else if (CURRENT_REGS)
-    {
-      _alert("ERROR: Stack pointer is not within the interrupt stack\n");
-      arm_stackdump(istackbase, istackbase + istacksize);
-    }
-
-  /* Extract the user stack pointer if we are in an interrupt handler.
-   * If we are not in an interrupt handler.  Then sp is the user stack
-   * pointer (and the above range check should have failed).
-   */
+  arm_dump_stack("IRQ", sp,
+#  ifdef CONFIG_SMP
+                 (uint32_t)arm_intstack_alloc(),
+#  else
+                 (uint32_t)&g_intstackalloc,
+#  endif
+                 (CONFIG_ARCH_INTERRUPTSTACK & ~7),
+                 !!CURRENT_REGS);
 
   if (CURRENT_REGS)
     {
       sp = CURRENT_REGS[REG_R13];
-      _alert("sp:     %08x\n", sp);
     }
-
-  _alert("User stack:\n");
-  _alert("  base: %08x\n", ustackbase);
-  _alert("  size: %08x\n", ustacksize);
-#else
-  _alert("sp:         %08x\n", sp);
-  _alert("stack base: %08x\n", ustackbase);
-  _alert("stack size: %08x\n", ustacksize);
 #endif
 
-  /* Dump the user stack if the stack pointer lies within the allocated user
-   * stack memory.
-   */
-
-  if (sp >= ustackbase && sp < ustackbase + ustacksize)
-    {
-      arm_stackdump(sp, ustackbase + ustacksize);
-    }
-  else
-    {
-      _alert("ERROR: Stack pointer is not within the allocated stack\n");
-      arm_stackdump(ustackbase, ustackbase + ustacksize);
-    }
+  /* Dump the user stack */
 
-#ifdef CONFIG_SMP
-  /* Show the CPU number */
+  arm_dump_stack("User", sp,
+                 (uint32_t)rtcb->stack_base_ptr,
+                 (uint32_t)rtcb->adj_stack_size,
+#ifdef CONFIG_ARCH_KERNEL_STACK
+                 false
+#else
+                 true
+#endif
+                );
 
-  _alert("CPU%d:\n", up_cpu_index());
+#ifdef CONFIG_ARCH_KERNEL_STACK
+  arm_dump_stack("Kernel", sp,
+                 (uint32_t)rtcb->xcp.kstack,
+                 CONFIG_ARCH_KERNEL_STACKSIZE,
+                 false);
 #endif
 
   /* Dump the state of all tasks (if available) */
 
-  up_showtasks();
+  arm_showtasks();
 
 #ifdef CONFIG_ARCH_USBDUMP
   /* Dump USB trace data */
@@ -434,15 +419,13 @@ static void up_dumpstate(void)
   usbtrace_enumerate(assert_tracecallback, NULL);
 #endif
 }
-#else
-# define up_dumpstate()
-#endif
+#endif /* CONFIG_ARCH_STACKDUMP */
 
 /****************************************************************************
- * Name: _up_assert
+ * Name: arm_assert
  ****************************************************************************/
 
-static void _up_assert(void)
+static void arm_assert(void)
 {
   /* Flush any buffered SYSLOG data */
 
@@ -452,7 +435,10 @@ static void _up_assert(void)
 
   if (CURRENT_REGS || (running_task())->flink == NULL)
     {
+      /* Disable interrupts on this CPU */
+
       up_irq_save();
+
       for (; ; )
         {
 #ifdef CONFIG_SMP
@@ -465,6 +451,8 @@ static void _up_assert(void)
           board_reset(CONFIG_BOARD_ASSERT_RESET_VALUE);
 #endif
 #ifdef CONFIG_ARCH_LEDS
+          /* FLASH LEDs a 2Hz */
+
           board_autoled_on(LED_PANIC);
           up_mdelay(250);
           board_autoled_off(LED_PANIC);
@@ -496,25 +484,27 @@ void up_assert(const char *filename, int lineno)
 
   syslog_flush();
 
+  _alert("Assertion failed "
 #ifdef CONFIG_SMP
-#if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed CPU%d at file:%s line: %d task: %s\n",
-         up_cpu_index(), filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed CPU%d at file:%s line: %d\n",
-         up_cpu_index(), filename, lineno);
+         "CPU%d "
 #endif
-#else
+         "at file:%s line: %d"
 #if CONFIG_TASK_NAME_SIZE > 0
-  _alert("Assertion failed at file:%s line: %d task: %s\n",
-         filename, lineno, running_task()->name);
-#else
-  _alert("Assertion failed at file:%s line: %d\n",
-         filename, lineno);
+         " task: %s"
 #endif
+         "\n",
+#ifdef CONFIG_SMP
+         up_cpu_index(),
 #endif
+         filename, lineno
+#if CONFIG_TASK_NAME_SIZE > 0
+         , running_task()->name
+#endif
+        );
 
-  up_dumpstate();
+#ifdef CONFIG_ARCH_STACKDUMP
+  arm_dumpstate();
+#endif
 
   /* Flush any buffered SYSLOG data (from the above) */
 
@@ -524,5 +514,5 @@ void up_assert(const char *filename, int lineno)
   board_crashdump(up_getsp(), running_task(), filename, lineno);
 #endif
 
-  _up_assert();
+  arm_assert();
 }