]> Zhao Yanbai Git Server - minix.git/commitdiff
NOT_REACHABLE macro
authorTomas Hruby <tom@minix3.org>
Tue, 22 Sep 2009 21:46:47 +0000 (21:46 +0000)
committerTomas Hruby <tom@minix3.org>
Tue, 22 Sep 2009 21:46:47 +0000 (21:46 +0000)
- marks code path that should be unreachable (never executed)

- if hit, panics and reports the problem

- the end of main() marked as such. The SMP changes need some magic with stack
  switching before the AP can be started as they need to run on the boot stack
  before figuring out what is their own stack. As main() uses the boot stack to,
  we need to switch to to the stack of BSP before executing the last part of
  main() which needs to be in a separate function so we can jump to it.
  Therefore restart() won't be the last call in main() which may be confusing.
  The macro can/should be used in other such places too.

kernel/debug.h
kernel/main.c

index e25605e0c0ddfb73ea9f143aa2954f1ce0a17f55..e9de2a5ca79aee75249c0c725318f2d86591c0d9 100644 (file)
 #define vmassert(t) { }
 #endif
 
+#define NOT_REACHABLE(__x) do {                                                \
+       kprintf("NOT_REACHABLE at %s:%d\n", __FILE__, __LINE__);        \
+       minix_panic("execution at an unexpected location\n", NO_NUM);   \
+       for(;;);                                                        \
+} while(0)
+
 #endif /* DEBUG_H */
index b847b2bef14104e5719496a96b209805b2248b9a..1f63e08ac198ada40e2d9faff0383090bb9e7a66 100755 (executable)
@@ -206,6 +206,7 @@ PUBLIC void main()
   FIXME("PROC check enabled");
 #endif
   restart();
+  NOT_REACHABLE();
 }
 
 /*===========================================================================*