Index: c/src/exec/libcsupport/include/rtems/assoc.h
===================================================================
--- c/src/exec/libcsupport/include/rtems/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/exec/libcsupport/include/rtems/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: c/src/exec/libcsupport/include/rtems/error.h
===================================================================
--- c/src/exec/libcsupport/include/rtems/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/exec/libcsupport/include/rtems/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: c/src/exec/libcsupport/src/assoc.c
===================================================================
--- c/src/exec/libcsupport/src/assoc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/exec/libcsupport/src/assoc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)assoc.c	1.6 - 95/10/25
- *
- *
  * assoc.c
  *      rtems assoc routines
Index: c/src/exec/libcsupport/src/error.c
===================================================================
--- c/src/exec/libcsupport/src/error.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/exec/libcsupport/src/error.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)error.c	1.6 - 95/12/12
- *	
- *
  *  report errors and panics to RTEMS' stderr.
  *  Currently just used by RTEMS monitor.
Index: c/src/exec/score/tools/hppa1.1/genoffsets.c
===================================================================
--- c/src/exec/score/tools/hppa1.1/genoffsets.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/exec/score/tools/hppa1.1/genoffsets.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,11 +1,8 @@
 /*
- *	@(#)genoffsets.c	1.7 - 95/09/25
- *	
- *
  *  genoffsets.c
  *
  *  This file generates the offsets.h for the HP PA-RISC port of RTEMS.
  *
- *  NOTE:  It only prints the offset for structures actually used 
+ *  NOTE:  It only prints the offset for structures actually used
  *         by the assembly code.
  *
@@ -18,5 +15,4 @@
  *
  *  $Id$
- *
  */
 
@@ -71,5 +67,5 @@
 
 #define PRINT_SIZE( STRING, item ) \
-  printf( "#define\t%s\t%d\t\t/* 0x%x */\n", \
+  printf( "#ifdef ASM\n#define\t%s\t%d\t\t/* 0x%x */\n#endif\n", \
           STRING, \
           sizeof(item), \
@@ -146,4 +142,37 @@
   PRINT_COMMENT("Context_Control_fp information");
 
+  PRINT_IT( "FR0_OFFSET", Context_Control_fp *, fr0 );
+  PRINT_IT( "FR1_OFFSET", Context_Control_fp *, fr1 );
+  PRINT_IT( "FR2_OFFSET", Context_Control_fp *, fr2 );
+  PRINT_IT( "FR3_OFFSET", Context_Control_fp *, fr3 );
+  PRINT_IT( "FR4_OFFSET", Context_Control_fp *, fr4 );
+  PRINT_IT( "FR5_OFFSET", Context_Control_fp *, fr5 );
+  PRINT_IT( "FR6_OFFSET", Context_Control_fp *, fr6 );
+  PRINT_IT( "FR7_OFFSET", Context_Control_fp *, fr7 );
+  PRINT_IT( "FR8_OFFSET", Context_Control_fp *, fr8 );
+  PRINT_IT( "FR9_OFFSET", Context_Control_fp *, fr9 );
+  PRINT_IT( "FR10_OFFSET", Context_Control_fp *, fr10 );
+  PRINT_IT( "FR11_OFFSET", Context_Control_fp *, fr11 );
+  PRINT_IT( "FR12_OFFSET", Context_Control_fp *, fr12 );
+  PRINT_IT( "FR13_OFFSET", Context_Control_fp *, fr13 );
+  PRINT_IT( "FR14_OFFSET", Context_Control_fp *, fr14 );
+  PRINT_IT( "FR15_OFFSET", Context_Control_fp *, fr15 );
+  PRINT_IT( "FR16_OFFSET", Context_Control_fp *, fr16 );
+  PRINT_IT( "FR17_OFFSET", Context_Control_fp *, fr17 );
+  PRINT_IT( "FR18_OFFSET", Context_Control_fp *, fr18 );
+  PRINT_IT( "FR19_OFFSET", Context_Control_fp *, fr19 );
+  PRINT_IT( "FR20_OFFSET", Context_Control_fp *, fr20 );
+  PRINT_IT( "FR21_OFFSET", Context_Control_fp *, fr21 );
+  PRINT_IT( "FR22_OFFSET", Context_Control_fp *, fr22 );
+  PRINT_IT( "FR23_OFFSET", Context_Control_fp *, fr23 );
+  PRINT_IT( "FR24_OFFSET", Context_Control_fp *, fr24 );
+  PRINT_IT( "FR25_OFFSET", Context_Control_fp *, fr25 );
+  PRINT_IT( "FR26_OFFSET", Context_Control_fp *, fr26 );
+  PRINT_IT( "FR27_OFFSET", Context_Control_fp *, fr27 );
+  PRINT_IT( "FR28_OFFSET", Context_Control_fp *, fr28 );
+  PRINT_IT( "FR29_OFFSET", Context_Control_fp *, fr29 );
+  PRINT_IT( "FR30_OFFSET", Context_Control_fp *, fr30 );
+  PRINT_IT( "FR31_OFFSET", Context_Control_fp *, fr31 );
+
   PRINT_SIZE("CPU_CONTEXT_FP_SIZE", Context_Control_fp);
 
Index: c/src/lib/include/rtems/assoc.h
===================================================================
--- c/src/lib/include/rtems/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/include/rtems/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: c/src/lib/include/rtems/error.h
===================================================================
--- c/src/lib/include/rtems/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/include/rtems/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h
===================================================================
--- c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -98,28 +98,5 @@
 #define BSP_LIBIO_MAX_FDS       20
 
-/*
- *  Device Driver Table Entries
- */
-
-/*
- * When not doing printf to a buffer, we do printf thru RTEMS libio
- * and our tty driver.  Set it up so that console is right.
- */
-
-#define CONSOLE_DRIVER_TABLE_ENTRY \
-  { tty_initialize, tty_open, tty_close, tty_read, tty_write, tty_control }
-
-/*
- * NOTE: Use the standard Clock driver entry
- */
-
-/*
- * How many libio files we want
- */
-#define BSP_LIBIO_MAX_FDS       20
-
 #define HPPA_INTERRUPT_EXTERNAL_MPCI        HPPA_INTERRUPT_EXTERNAL_10
-
-rtems_isr_entry set_vector(rtems_isr_entry, rtems_vector_number, int);
 
 rtems_isr_entry set_vector(rtems_isr_entry, rtems_vector_number, int);
Index: c/src/lib/libbsp/hppa1.1/simhppa/include/ttydrv.h
===================================================================
--- c/src/lib/libbsp/hppa1.1/simhppa/include/ttydrv.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libbsp/hppa1.1/simhppa/include/ttydrv.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)ttydrv.h	1.1 - 95/06/02
- *	
  *  $Id$
  */
Index: c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c
===================================================================
--- c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,2 @@
-/*
- *	@(#)bspstart.c	1.16 - 95/06/28
- */
-
 /*  bsp_start()
  *
@@ -353,4 +349,10 @@
     Cpu_table.itimer_clicks_per_microsecond = 1;
 
+#ifdef 0
+    /*
+     * Commented by DIVISION INC.  External interrupt
+     * processing is now divorced from RTEMS for HPPA.
+     */
+
     /*
      * Determine the external interrupt processing order
@@ -370,4 +372,5 @@
       Cpu_table.external_interrupts++;
     }
+#endif
 
     /*
Index: c/src/lib/libc/assoc.c
===================================================================
--- c/src/lib/libc/assoc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libc/assoc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)assoc.c	1.6 - 95/10/25
- *
- *
  * assoc.c
  *      rtems assoc routines
Index: c/src/lib/libc/assoc.h
===================================================================
--- c/src/lib/libc/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libc/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: c/src/lib/libc/error.c
===================================================================
--- c/src/lib/libc/error.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libc/error.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)error.c	1.6 - 95/12/12
- *	
- *
  *  report errors and panics to RTEMS' stderr.
  *  Currently just used by RTEMS monitor.
Index: c/src/lib/libc/error.h
===================================================================
--- c/src/lib/libc/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libc/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: c/src/lib/libmisc/assoc/assoc.c
===================================================================
--- c/src/lib/libmisc/assoc/assoc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/assoc/assoc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)assoc.c	1.6 - 95/10/25
- *
- *
  * assoc.c
  *      rtems assoc routines
Index: c/src/lib/libmisc/assoc/assoc.h
===================================================================
--- c/src/lib/libmisc/assoc/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/assoc/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: c/src/lib/libmisc/error/error.c
===================================================================
--- c/src/lib/libmisc/error/error.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/error/error.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)error.c	1.6 - 95/12/12
- *	
- *
  *  report errors and panics to RTEMS' stderr.
  *  Currently just used by RTEMS monitor.
Index: c/src/lib/libmisc/error/error.h
===================================================================
--- c/src/lib/libmisc/error/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/error/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: c/src/lib/libmisc/monitor/mon-command.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-command.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-command.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)command.c	1.5 - 95/08/02
- *	
- *
  * Command parsing routines for RTEMS monitor
  *
Index: c/src/lib/libmisc/monitor/mon-config.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-config.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-config.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)config.c	1.5 - 95/08/02
- *	
- *
  * RTEMS Config display support
  *
Index: c/src/lib/libmisc/monitor/mon-dname.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-dname.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-dname.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)dname.c	1.5 - 96/01/03
- *	
- *
  * RTEMS monitor driver names support.
  *
Index: c/src/lib/libmisc/monitor/mon-driver.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-driver.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-driver.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)driver.c	1.4 - 95/08/02
- *	
- *
  * RTEMS monitor IO (device drivers) support
  *
Index: c/src/lib/libmisc/monitor/mon-extension.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-extension.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-extension.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)extension.c	1.6 - 95/09/25
- *	
- *
  * RTEMS Monitor extension support
  *
Index: c/src/lib/libmisc/monitor/mon-itask.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-itask.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-itask.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)itask.c	1.6 - 96/01/03
- *	
- *
- *  RTEMS Monitor init task support
+ * RTEMS Monitor init task support
  *
  *  $Id$
Index: c/src/lib/libmisc/monitor/mon-manager.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-manager.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-manager.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,8 +1,5 @@
 /*
- *	@(#)manager.c	1.4 - 96/01/03
- *	
- *
- *  RTEMS Monitor "manager" support.
- *  Used to traverse object (chain) lists and print them out.
+ * RTEMS Monitor "manager" support.
+ * Used to traverse object (chain) lists and print them out.
  *
  *  $Id$
Index: c/src/lib/libmisc/monitor/mon-monitor.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-monitor.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-monitor.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
 /*
- *	@(#)monitor.c	1.23 - 96/01/03
- *	
- *
- *
  * RTEMS monitor main body
  *	
@@ -19,5 +15,5 @@
  *      remote request/response stuff should be cleaned up
  *         maybe we can use real rpc??
- *      'info' commadn to print out:
+ *      'info' command to print out:
  *           interrupt stack location, direction and size
  *           floating point config stuff
@@ -263,4 +259,16 @@
 }
 
+void
+rtems_monitor_debugger_cmd(
+    int        argc,
+    char     **argv,
+    unsigned32 command_arg,
+    boolean    verbose
+)
+{
+#ifdef CPU_INVOKE_DEBUGGER
+    CPU_INVOKE_DEBUGGER;
+#endif
+}
 
 void
@@ -304,17 +312,4 @@
 
 void
-rtems_monitor_debugger_cmd(
-    int        argc,
-    char     **argv,
-    unsigned32 command_arg,
-    boolean    verbose
-)
-{
-#ifdef CPU_INVOKE_DEBUGGER
-    CPU_INVOKE_DEBUGGER;
-#endif
-}
-
-void
 rtems_monitor_node_cmd(
     int     argc,
@@ -341,6 +336,8 @@
     }
 
-    if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
-        rtems_monitor_default_node = new_node;
+    if ((new_node >= 1) &&
+        _Configuration_MP_table &&
+        (new_node <= _Configuration_MP_table->maximum_nodes))
+            rtems_monitor_default_node = new_node;
 }
 
@@ -384,9 +381,5 @@
         return;
 
-#ifdef SIMHPPA
-    fp = fdopen(8, "r");                /* don't ask; don't tell */
-#else
     fp = fopen("symbols", "r");
-#endif
     
     if (fp == 0)
Index: c/src/lib/libmisc/monitor/mon-mpci.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-mpci.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-mpci.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)mpci.c	1.6 - 95/08/02
- *	
- *
  * RTEMS MPCI Config display support
  *
Index: c/src/lib/libmisc/monitor/mon-object.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-object.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-object.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)object.c	1.9 - 96/01/03
- *	
- *
  * RTEMS Monitor "object" support.
  *
@@ -342,5 +339,5 @@
         for (arg=1; argv[arg]; arg++)
         {
-            id = (rtems_id) strtoul(argv[arg], 0, 0);
+            id = (rtems_id) strtoul(argv[arg], 0, 16);
             id = rtems_monitor_id_fixup(id, default_node, type);
             type = (rtems_monitor_object_type_t) rtems_get_class(id);
Index: c/src/lib/libmisc/monitor/mon-prmisc.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-prmisc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-prmisc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)prmisc.c	1.9 - 95/08/02
- *	
- *
  * Print misc stuff for the monitor dump routines
  * Each routine returns the number of characters it output.
Index: c/src/lib/libmisc/monitor/mon-queue.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-queue.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-queue.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)queue.c	1.5 - 95/07/31
- *	
  *  $Id$
  */
Index: c/src/lib/libmisc/monitor/mon-server.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-server.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-server.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)server.c	1.5 - 96/01/03
- *	
- *
- *  RTEMS monitor server (handles requests for info from RTEMS monitors
+ * RTEMS monitor server (handles requests for info from RTEMS monitors
  *             running on other nodes)
  *
Index: c/src/lib/libmisc/monitor/mon-symbols.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-symbols.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-symbols.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,10 +1,2 @@
-/*
- *      @(#)symbols.c	1.10 - 95/08/02
- *      
- *  $Id$
- */
-
-/* #define qsort _quicksort */
-
 /*
  *  File:	symbols.c
@@ -16,4 +8,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -51,9 +45,4 @@
             (void) free(table->addresses);
         table->addresses = 0;
-
-        if (table->symbols)
-            (void) free(table->symbols);
-        table->symbols = 0;
-
         p = table->string_buffer_head;
         while (p)
@@ -94,9 +83,4 @@
         if (table->addresses == 0)        /* blew it; lost orig */
             goto failed;
-
-        table->symbols = (rtems_symbol_t *) realloc((void *) table->symbols, newsize * sizeof(rtems_symbol_t));
-        if (table->symbols == 0)        /* blew it; lost orig */
-            goto failed;
-
         table->size = newsize;
     }
@@ -130,7 +114,4 @@
 
     table->strings_next += symbol_length;
-
-    table->symbols[table->next] = *sp;
-
     table->sorted = 0;
     table->next++;
@@ -148,5 +129,5 @@
  */
 
-int
+static int
 rtems_symbol_compare(const void *e1,
                      const void *e2)
@@ -163,19 +144,4 @@
 }
 
-/*
- * Qsort entry point for compare by string name (case independent)
- */
-
-int
-rtems_symbol_string_compare(const void *e1,
-                            const void *e2)
-{
-    rtems_symbol_t *s1, *s2;
-    s1 = (rtems_symbol_t *) e1;
-    s2 = (rtems_symbol_t *) e2;
-
-    return strcasecmp(s1->name, s2->name);
-}
-
 
 /*
@@ -183,25 +149,12 @@
  */
 
-void
+static void
 rtems_symbol_sort(rtems_symbol_table_t *table)
 {
-#ifdef RTEMS_ON_SIMULATOR
-    printf("Sorting symbols ... ");         /* so slow we need a msg */
-    fflush(stdout);
-#endif
-
     qsort((void *) table->addresses, (size_t) table->next,
           sizeof(rtems_symbol_t), rtems_symbol_compare);
-
-    qsort((void *) table->symbols, (size_t) table->next,
-          sizeof(rtems_symbol_t), rtems_symbol_string_compare);
-
-#ifdef RTEMS_ON_SIMULATOR
-    /* so slow we need a msg */
-    printf("done\n");
-#endif
-
     table->sorted = 1;
 }
+
 
 /*
@@ -263,4 +216,51 @@
 
 /*
+ * Search the symbol table for the exact matching address.
+ * If the symbol table has already been sorted, then
+ * call the regular symbol value lookup, however, it it
+ * has not yet been sorted, search it sequentially.
+ * This routine is primarily used for low level symbol
+ * lookups (eg. from exception handler and interrupt routines)
+ * where the penality of sorted is not wanted and where
+ * an exact match is needed such that symbol table order
+ * is not important.
+ */
+const rtems_symbol_t *
+rtems_symbol_value_lookup_exact(
+    rtems_symbol_table_t *table,
+    rtems_unsigned32      value
+  )
+{
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
+        table = rtems_monitor_symbols;
+        if (table == 0)
+            return NULL;
+    }
+    
+    if (table->sorted)
+    {
+        sp = rtems_symbol_value_lookup(table, value);
+        if ( rtems_symbol_value(sp) == value )
+            return sp;
+        else
+            return NULL;  /* not an exact match */
+    }
+ 
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( sp->value == value )
+            return sp;
+    }
+
+    return NULL;
+
+}
+
+
+/*
  * Search the symbol table by string name (case independent)
  */
@@ -272,31 +272,21 @@
   )
 {
-    rtems_symbol_t *sp = 0;
-    rtems_symbol_t  key;
-
-    if (table == 0)
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
         table = rtems_monitor_symbols;
-
-    if ((table == 0) || (name == 0))
-        goto done;
-
-    if (table->sorted == 0)
-        rtems_symbol_sort(table);
-
-    /*
-     * dummy up one for bsearch()
-     */
-
-    key.name = name;
-    key.value = 0;
-
-    sp = (rtems_symbol_t *) bsearch((const void *) &key,
-                                    (const void *) table->symbols,
-                                    (size_t) table->next,
-                                    sizeof(rtems_symbol_t),
-                                    rtems_symbol_string_compare);
-
-done:
-    return sp;
+        if (table == 0)
+            return NULL;
+    }
+    
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( strcasecmp(sp->name, name) == 0 )
+            return sp;
+    }
+
+    return NULL;
 }
 
@@ -326,5 +316,5 @@
 
     *next_id += 1;
-    return (void *) (table->symbols + n);
+    return (void *) (table->addresses + n);
 
 failed:
@@ -439,5 +429,5 @@
         rtems_symbol_sort(table);
 
-    for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
     {
         rtems_monitor_symbol_t canonical_symbol;
Index: c/src/lib/libmisc/monitor/mon-task.c
===================================================================
--- c/src/lib/libmisc/monitor/mon-task.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/mon-task.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)task.c	1.9 - 95/08/01
- *	
- *
  * RTEMS Monitor task support
  *
Index: c/src/lib/libmisc/monitor/monitor.h
===================================================================
--- c/src/lib/libmisc/monitor/monitor.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/monitor.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,9 +1,2 @@
-/*
- *      @(#)monitor.h	1.21 - 96/01/03
- *      
- *
- *  monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
- */
-
 /*
  *  File:	monitor.h
@@ -13,4 +6,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -26,5 +21,5 @@
 
 /*
- * XXX this should be in rtems proper when type becomes part of id
+ * Monitor types are derived from rtems object classes
  */
 
@@ -307,5 +302,5 @@
 
 typedef struct {
-    rtems_monitor_object_type_t                 type;
+    rtems_monitor_object_type_t         type;
     void                               *object_information;
     int                                 size;	/* of canonical object */
@@ -420,4 +415,5 @@
 rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32);
 rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32);
+const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, unsigned32);
 rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
 void   *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
Index: c/src/lib/libmisc/monitor/symbols.h
===================================================================
--- c/src/lib/libmisc/monitor/symbols.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/monitor/symbols.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)symbols.h	1.3 - 95/06/09
- *	
- *
  *  RTEMS monitor symbol table functions
  *
@@ -49,12 +46,4 @@
 
     /*
-     * String list -- sorted by name (when we do a lookup)
-     * This is a duplicate of the info in table->addresses, but it's
-     * pretty small, so I don't worry about it.
-     */
-
-    rtems_symbol_t  *symbols;           /* symbol array */
-
-    /*
      * String pool, unsorted, a list of blocks of string data
      */
Index: c/src/lib/libmisc/stackchk/check.c
===================================================================
--- c/src/lib/libmisc/stackchk/check.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/lib/libmisc/stackchk/check.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -20,4 +20,17 @@
 
 #include <rtems.h>
+
+/*
+ * HACK
+ * the stack dump information should be printed by a "fatal" extension.
+ * Fatal extensions only get called via rtems_fatal_error_occurred()
+ * and not when rtems_shutdown_executive() is called.
+ * I hope/think this is changing so that fatal extensions are renamed
+ * to "shutdown" extensions.
+ * When that happens, this #define should be deleted and all the code
+ * it marks.
+ */
+#define DONT_USE_FATAL_EXTENSION
+
 
 extern rtems_configuration_table BSP_Configuration;
@@ -50,5 +63,9 @@
   Stack_check_Begin_extension,      /* task_begin   */
   0,                                /* task_exitted */
+#ifdef DONT_USE_FATAL_EXTENSION
+  0,                                /* fatal        */
+#else
   Stack_check_Fatal_extension,      /* fatal        */
+#endif
 };
 
@@ -167,8 +184,4 @@
 
   Stack_check_Blown_task = 0;
-
-#ifdef STACK_CHECKER_REPORT_USAGE
-  atexit( Stack_check_Dump_usage );
-#endif
 
   /*
@@ -218,4 +231,15 @@
   }
 
+#ifdef DONT_USE_FATAL_EXTENSION
+#ifdef RTEMS_DEBUG
+    /*
+     * this would normally be called by a fatal extension
+     * handler, but we don't run fatal extensions unless
+     * we fatal error.
+     */
+  atexit(Stack_check_Dump_usage);
+#endif
+#endif
+
   stack_check_initialized = 1;
 }
@@ -432,5 +456,5 @@
  */
 
-void Stack_check_Fatal_extension( 
+void Stack_check_Fatal_extension(
     Internal_errors_Source  source,
     boolean                 is_internal,
@@ -438,6 +462,8 @@
 )
 {
+#ifndef DONT_USE_FATAL_EXTENSION
     if (status == 0)
         Stack_check_Dump_usage();
+#endif
 }
 
Index: c/src/libmisc/assoc/assoc.c
===================================================================
--- c/src/libmisc/assoc/assoc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/assoc/assoc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)assoc.c	1.6 - 95/10/25
- *
- *
  * assoc.c
  *      rtems assoc routines
Index: c/src/libmisc/assoc/assoc.h
===================================================================
--- c/src/libmisc/assoc/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/assoc/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: c/src/libmisc/error/error.c
===================================================================
--- c/src/libmisc/error/error.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/error/error.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)error.c	1.6 - 95/12/12
- *	
- *
  *  report errors and panics to RTEMS' stderr.
  *  Currently just used by RTEMS monitor.
Index: c/src/libmisc/error/error.h
===================================================================
--- c/src/libmisc/error/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/error/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: c/src/libmisc/monitor/mon-command.c
===================================================================
--- c/src/libmisc/monitor/mon-command.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-command.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)command.c	1.5 - 95/08/02
- *	
- *
  * Command parsing routines for RTEMS monitor
  *
Index: c/src/libmisc/monitor/mon-config.c
===================================================================
--- c/src/libmisc/monitor/mon-config.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-config.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)config.c	1.5 - 95/08/02
- *	
- *
  * RTEMS Config display support
  *
Index: c/src/libmisc/monitor/mon-dname.c
===================================================================
--- c/src/libmisc/monitor/mon-dname.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-dname.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)dname.c	1.5 - 96/01/03
- *	
- *
  * RTEMS monitor driver names support.
  *
Index: c/src/libmisc/monitor/mon-driver.c
===================================================================
--- c/src/libmisc/monitor/mon-driver.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-driver.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)driver.c	1.4 - 95/08/02
- *	
- *
  * RTEMS monitor IO (device drivers) support
  *
Index: c/src/libmisc/monitor/mon-extension.c
===================================================================
--- c/src/libmisc/monitor/mon-extension.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-extension.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)extension.c	1.6 - 95/09/25
- *	
- *
  * RTEMS Monitor extension support
  *
Index: c/src/libmisc/monitor/mon-itask.c
===================================================================
--- c/src/libmisc/monitor/mon-itask.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-itask.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)itask.c	1.6 - 96/01/03
- *	
- *
- *  RTEMS Monitor init task support
+ * RTEMS Monitor init task support
  *
  *  $Id$
Index: c/src/libmisc/monitor/mon-manager.c
===================================================================
--- c/src/libmisc/monitor/mon-manager.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-manager.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,8 +1,5 @@
 /*
- *	@(#)manager.c	1.4 - 96/01/03
- *	
- *
- *  RTEMS Monitor "manager" support.
- *  Used to traverse object (chain) lists and print them out.
+ * RTEMS Monitor "manager" support.
+ * Used to traverse object (chain) lists and print them out.
  *
  *  $Id$
Index: c/src/libmisc/monitor/mon-monitor.c
===================================================================
--- c/src/libmisc/monitor/mon-monitor.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-monitor.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
 /*
- *	@(#)monitor.c	1.23 - 96/01/03
- *	
- *
- *
  * RTEMS monitor main body
  *	
@@ -19,5 +15,5 @@
  *      remote request/response stuff should be cleaned up
  *         maybe we can use real rpc??
- *      'info' commadn to print out:
+ *      'info' command to print out:
  *           interrupt stack location, direction and size
  *           floating point config stuff
@@ -263,4 +259,16 @@
 }
 
+void
+rtems_monitor_debugger_cmd(
+    int        argc,
+    char     **argv,
+    unsigned32 command_arg,
+    boolean    verbose
+)
+{
+#ifdef CPU_INVOKE_DEBUGGER
+    CPU_INVOKE_DEBUGGER;
+#endif
+}
 
 void
@@ -304,17 +312,4 @@
 
 void
-rtems_monitor_debugger_cmd(
-    int        argc,
-    char     **argv,
-    unsigned32 command_arg,
-    boolean    verbose
-)
-{
-#ifdef CPU_INVOKE_DEBUGGER
-    CPU_INVOKE_DEBUGGER;
-#endif
-}
-
-void
 rtems_monitor_node_cmd(
     int     argc,
@@ -341,6 +336,8 @@
     }
 
-    if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
-        rtems_monitor_default_node = new_node;
+    if ((new_node >= 1) &&
+        _Configuration_MP_table &&
+        (new_node <= _Configuration_MP_table->maximum_nodes))
+            rtems_monitor_default_node = new_node;
 }
 
@@ -384,9 +381,5 @@
         return;
 
-#ifdef SIMHPPA
-    fp = fdopen(8, "r");                /* don't ask; don't tell */
-#else
     fp = fopen("symbols", "r");
-#endif
     
     if (fp == 0)
Index: c/src/libmisc/monitor/mon-mpci.c
===================================================================
--- c/src/libmisc/monitor/mon-mpci.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-mpci.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)mpci.c	1.6 - 95/08/02
- *	
- *
  * RTEMS MPCI Config display support
  *
Index: c/src/libmisc/monitor/mon-object.c
===================================================================
--- c/src/libmisc/monitor/mon-object.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-object.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)object.c	1.9 - 96/01/03
- *	
- *
  * RTEMS Monitor "object" support.
  *
@@ -342,5 +339,5 @@
         for (arg=1; argv[arg]; arg++)
         {
-            id = (rtems_id) strtoul(argv[arg], 0, 0);
+            id = (rtems_id) strtoul(argv[arg], 0, 16);
             id = rtems_monitor_id_fixup(id, default_node, type);
             type = (rtems_monitor_object_type_t) rtems_get_class(id);
Index: c/src/libmisc/monitor/mon-prmisc.c
===================================================================
--- c/src/libmisc/monitor/mon-prmisc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-prmisc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)prmisc.c	1.9 - 95/08/02
- *	
- *
  * Print misc stuff for the monitor dump routines
  * Each routine returns the number of characters it output.
Index: c/src/libmisc/monitor/mon-queue.c
===================================================================
--- c/src/libmisc/monitor/mon-queue.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-queue.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)queue.c	1.5 - 95/07/31
- *	
  *  $Id$
  */
Index: c/src/libmisc/monitor/mon-server.c
===================================================================
--- c/src/libmisc/monitor/mon-server.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-server.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)server.c	1.5 - 96/01/03
- *	
- *
- *  RTEMS monitor server (handles requests for info from RTEMS monitors
+ * RTEMS monitor server (handles requests for info from RTEMS monitors
  *             running on other nodes)
  *
Index: c/src/libmisc/monitor/mon-symbols.c
===================================================================
--- c/src/libmisc/monitor/mon-symbols.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-symbols.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,10 +1,2 @@
-/*
- *      @(#)symbols.c	1.10 - 95/08/02
- *      
- *  $Id$
- */
-
-/* #define qsort _quicksort */
-
 /*
  *  File:	symbols.c
@@ -16,4 +8,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -51,9 +45,4 @@
             (void) free(table->addresses);
         table->addresses = 0;
-
-        if (table->symbols)
-            (void) free(table->symbols);
-        table->symbols = 0;
-
         p = table->string_buffer_head;
         while (p)
@@ -94,9 +83,4 @@
         if (table->addresses == 0)        /* blew it; lost orig */
             goto failed;
-
-        table->symbols = (rtems_symbol_t *) realloc((void *) table->symbols, newsize * sizeof(rtems_symbol_t));
-        if (table->symbols == 0)        /* blew it; lost orig */
-            goto failed;
-
         table->size = newsize;
     }
@@ -130,7 +114,4 @@
 
     table->strings_next += symbol_length;
-
-    table->symbols[table->next] = *sp;
-
     table->sorted = 0;
     table->next++;
@@ -148,5 +129,5 @@
  */
 
-int
+static int
 rtems_symbol_compare(const void *e1,
                      const void *e2)
@@ -163,19 +144,4 @@
 }
 
-/*
- * Qsort entry point for compare by string name (case independent)
- */
-
-int
-rtems_symbol_string_compare(const void *e1,
-                            const void *e2)
-{
-    rtems_symbol_t *s1, *s2;
-    s1 = (rtems_symbol_t *) e1;
-    s2 = (rtems_symbol_t *) e2;
-
-    return strcasecmp(s1->name, s2->name);
-}
-
 
 /*
@@ -183,25 +149,12 @@
  */
 
-void
+static void
 rtems_symbol_sort(rtems_symbol_table_t *table)
 {
-#ifdef RTEMS_ON_SIMULATOR
-    printf("Sorting symbols ... ");         /* so slow we need a msg */
-    fflush(stdout);
-#endif
-
     qsort((void *) table->addresses, (size_t) table->next,
           sizeof(rtems_symbol_t), rtems_symbol_compare);
-
-    qsort((void *) table->symbols, (size_t) table->next,
-          sizeof(rtems_symbol_t), rtems_symbol_string_compare);
-
-#ifdef RTEMS_ON_SIMULATOR
-    /* so slow we need a msg */
-    printf("done\n");
-#endif
-
     table->sorted = 1;
 }
+
 
 /*
@@ -263,4 +216,51 @@
 
 /*
+ * Search the symbol table for the exact matching address.
+ * If the symbol table has already been sorted, then
+ * call the regular symbol value lookup, however, it it
+ * has not yet been sorted, search it sequentially.
+ * This routine is primarily used for low level symbol
+ * lookups (eg. from exception handler and interrupt routines)
+ * where the penality of sorted is not wanted and where
+ * an exact match is needed such that symbol table order
+ * is not important.
+ */
+const rtems_symbol_t *
+rtems_symbol_value_lookup_exact(
+    rtems_symbol_table_t *table,
+    rtems_unsigned32      value
+  )
+{
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
+        table = rtems_monitor_symbols;
+        if (table == 0)
+            return NULL;
+    }
+    
+    if (table->sorted)
+    {
+        sp = rtems_symbol_value_lookup(table, value);
+        if ( rtems_symbol_value(sp) == value )
+            return sp;
+        else
+            return NULL;  /* not an exact match */
+    }
+ 
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( sp->value == value )
+            return sp;
+    }
+
+    return NULL;
+
+}
+
+
+/*
  * Search the symbol table by string name (case independent)
  */
@@ -272,31 +272,21 @@
   )
 {
-    rtems_symbol_t *sp = 0;
-    rtems_symbol_t  key;
-
-    if (table == 0)
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
         table = rtems_monitor_symbols;
-
-    if ((table == 0) || (name == 0))
-        goto done;
-
-    if (table->sorted == 0)
-        rtems_symbol_sort(table);
-
-    /*
-     * dummy up one for bsearch()
-     */
-
-    key.name = name;
-    key.value = 0;
-
-    sp = (rtems_symbol_t *) bsearch((const void *) &key,
-                                    (const void *) table->symbols,
-                                    (size_t) table->next,
-                                    sizeof(rtems_symbol_t),
-                                    rtems_symbol_string_compare);
-
-done:
-    return sp;
+        if (table == 0)
+            return NULL;
+    }
+    
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( strcasecmp(sp->name, name) == 0 )
+            return sp;
+    }
+
+    return NULL;
 }
 
@@ -326,5 +316,5 @@
 
     *next_id += 1;
-    return (void *) (table->symbols + n);
+    return (void *) (table->addresses + n);
 
 failed:
@@ -439,5 +429,5 @@
         rtems_symbol_sort(table);
 
-    for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
     {
         rtems_monitor_symbol_t canonical_symbol;
Index: c/src/libmisc/monitor/mon-task.c
===================================================================
--- c/src/libmisc/monitor/mon-task.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/mon-task.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)task.c	1.9 - 95/08/01
- *	
- *
  * RTEMS Monitor task support
  *
Index: c/src/libmisc/monitor/monitor.h
===================================================================
--- c/src/libmisc/monitor/monitor.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/monitor.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,9 +1,2 @@
-/*
- *      @(#)monitor.h	1.21 - 96/01/03
- *      
- *
- *  monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
- */
-
 /*
  *  File:	monitor.h
@@ -13,4 +6,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -26,5 +21,5 @@
 
 /*
- * XXX this should be in rtems proper when type becomes part of id
+ * Monitor types are derived from rtems object classes
  */
 
@@ -307,5 +302,5 @@
 
 typedef struct {
-    rtems_monitor_object_type_t                 type;
+    rtems_monitor_object_type_t         type;
     void                               *object_information;
     int                                 size;	/* of canonical object */
@@ -420,4 +415,5 @@
 rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32);
 rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32);
+const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, unsigned32);
 rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
 void   *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
Index: c/src/libmisc/monitor/symbols.h
===================================================================
--- c/src/libmisc/monitor/symbols.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/monitor/symbols.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)symbols.h	1.3 - 95/06/09
- *	
- *
  *  RTEMS monitor symbol table functions
  *
@@ -49,12 +46,4 @@
 
     /*
-     * String list -- sorted by name (when we do a lookup)
-     * This is a duplicate of the info in table->addresses, but it's
-     * pretty small, so I don't worry about it.
-     */
-
-    rtems_symbol_t  *symbols;           /* symbol array */
-
-    /*
      * String pool, unsorted, a list of blocks of string data
      */
Index: c/src/libmisc/stackchk/check.c
===================================================================
--- c/src/libmisc/stackchk/check.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/libmisc/stackchk/check.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -20,4 +20,17 @@
 
 #include <rtems.h>
+
+/*
+ * HACK
+ * the stack dump information should be printed by a "fatal" extension.
+ * Fatal extensions only get called via rtems_fatal_error_occurred()
+ * and not when rtems_shutdown_executive() is called.
+ * I hope/think this is changing so that fatal extensions are renamed
+ * to "shutdown" extensions.
+ * When that happens, this #define should be deleted and all the code
+ * it marks.
+ */
+#define DONT_USE_FATAL_EXTENSION
+
 
 extern rtems_configuration_table BSP_Configuration;
@@ -50,5 +63,9 @@
   Stack_check_Begin_extension,      /* task_begin   */
   0,                                /* task_exitted */
+#ifdef DONT_USE_FATAL_EXTENSION
+  0,                                /* fatal        */
+#else
   Stack_check_Fatal_extension,      /* fatal        */
+#endif
 };
 
@@ -167,8 +184,4 @@
 
   Stack_check_Blown_task = 0;
-
-#ifdef STACK_CHECKER_REPORT_USAGE
-  atexit( Stack_check_Dump_usage );
-#endif
 
   /*
@@ -218,4 +231,15 @@
   }
 
+#ifdef DONT_USE_FATAL_EXTENSION
+#ifdef RTEMS_DEBUG
+    /*
+     * this would normally be called by a fatal extension
+     * handler, but we don't run fatal extensions unless
+     * we fatal error.
+     */
+  atexit(Stack_check_Dump_usage);
+#endif
+#endif
+
   stack_check_initialized = 1;
 }
@@ -432,5 +456,5 @@
  */
 
-void Stack_check_Fatal_extension( 
+void Stack_check_Fatal_extension(
     Internal_errors_Source  source,
     boolean                 is_internal,
@@ -438,6 +462,8 @@
 )
 {
+#ifndef DONT_USE_FATAL_EXTENSION
     if (status == 0)
         Stack_check_Dump_usage();
+#endif
 }
 
Index: c/src/tests/sptests/spfatal/fatal.c
===================================================================
--- c/src/tests/sptests/spfatal/fatal.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/tests/sptests/spfatal/fatal.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -58,5 +58,6 @@
 
 rtems_extension Fatal_extension(
-  rtems_unsigned32 error
+  rtems_unsigned32 error,
+  boolean          is_internal
 )
 {
Index: c/src/tests/sptests/spfatal/system.h
===================================================================
--- c/src/tests/sptests/spfatal/system.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/tests/sptests/spfatal/system.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -29,5 +29,6 @@
  
 rtems_extension Fatal_extension(
-  rtems_unsigned32 error
+  rtems_unsigned32 error,
+  boolean          is_internal
 );
  
Index: c/src/tests/tmtests/tm21/task1.c
===================================================================
--- c/src/tests/tmtests/tm21/task1.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/tests/tmtests/tm21/task1.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -71,5 +71,5 @@
     status = rtems_message_queue_create(
       index,
-      1,
+      OPERATION_COUNT,
       16,
       RTEMS_DEFAULT_ATTRIBUTES,
Index: c/src/tests/tools/generic/difftest
===================================================================
--- c/src/tests/tools/generic/difftest	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ c/src/tests/tools/generic/difftest	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -2,4 +2,5 @@
 #
 #  Check test results against official output in the src tree
+#
 #  $Id$
 #
@@ -65,6 +66,5 @@
 #
 
-cd $RTEMS_HOME/tests/$logdir ||
-  fatal "No log directory: $RTEMS_HOME/tests/$logdir"
+cd $RTEMS_HOME/tests/$logdir || fatal "No log directory: $RTEMS_HOME/tests/$logdir"
 
 tests="$args"
Index: cpukit/libcsupport/include/rtems/assoc.h
===================================================================
--- cpukit/libcsupport/include/rtems/assoc.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libcsupport/include/rtems/assoc.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)assoc.h	1.4 - 95/10/25
- *	
  *
  *  Rtems associativity routines.  Mainly used to convert a value from
Index: cpukit/libcsupport/include/rtems/error.h
===================================================================
--- cpukit/libcsupport/include/rtems/error.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libcsupport/include/rtems/error.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
-
 /*
- *	@(#)error.h	1.3 - 95/10/25
- *	
- *
  *  Defines and externs for rtems error reporting
  *
@@ -25,5 +21,10 @@
 const char *rtems_status_text(rtems_status_code);
 int   rtems_error(int error_code, const char *printf_format, ...);
+#ifdef __GNUC__
+void  rtems_panic(const char *printf_format, ...) 
+                                         __attribute__ ((__noreturn__));
+#else
 void  rtems_panic(const char *printf_format, ...);
+#endif
 
 extern int rtems_panic_in_progress;
Index: cpukit/libcsupport/src/assoc.c
===================================================================
--- cpukit/libcsupport/src/assoc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libcsupport/src/assoc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)assoc.c	1.6 - 95/10/25
- *
- *
  * assoc.c
  *      rtems assoc routines
Index: cpukit/libcsupport/src/error.c
===================================================================
--- cpukit/libcsupport/src/error.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libcsupport/src/error.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)error.c	1.6 - 95/12/12
- *	
- *
  *  report errors and panics to RTEMS' stderr.
  *  Currently just used by RTEMS monitor.
Index: cpukit/libmisc/monitor/mon-command.c
===================================================================
--- cpukit/libmisc/monitor/mon-command.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-command.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)command.c	1.5 - 95/08/02
- *	
- *
  * Command parsing routines for RTEMS monitor
  *
Index: cpukit/libmisc/monitor/mon-config.c
===================================================================
--- cpukit/libmisc/monitor/mon-config.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-config.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)config.c	1.5 - 95/08/02
- *	
- *
  * RTEMS Config display support
  *
Index: cpukit/libmisc/monitor/mon-dname.c
===================================================================
--- cpukit/libmisc/monitor/mon-dname.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-dname.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)dname.c	1.5 - 96/01/03
- *	
- *
  * RTEMS monitor driver names support.
  *
Index: cpukit/libmisc/monitor/mon-driver.c
===================================================================
--- cpukit/libmisc/monitor/mon-driver.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-driver.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)driver.c	1.4 - 95/08/02
- *	
- *
  * RTEMS monitor IO (device drivers) support
  *
Index: cpukit/libmisc/monitor/mon-extension.c
===================================================================
--- cpukit/libmisc/monitor/mon-extension.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-extension.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)extension.c	1.6 - 95/09/25
- *	
- *
  * RTEMS Monitor extension support
  *
Index: cpukit/libmisc/monitor/mon-itask.c
===================================================================
--- cpukit/libmisc/monitor/mon-itask.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-itask.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)itask.c	1.6 - 96/01/03
- *	
- *
- *  RTEMS Monitor init task support
+ * RTEMS Monitor init task support
  *
  *  $Id$
Index: cpukit/libmisc/monitor/mon-manager.c
===================================================================
--- cpukit/libmisc/monitor/mon-manager.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-manager.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,8 +1,5 @@
 /*
- *	@(#)manager.c	1.4 - 96/01/03
- *	
- *
- *  RTEMS Monitor "manager" support.
- *  Used to traverse object (chain) lists and print them out.
+ * RTEMS Monitor "manager" support.
+ * Used to traverse object (chain) lists and print them out.
  *
  *  $Id$
Index: cpukit/libmisc/monitor/mon-monitor.c
===================================================================
--- cpukit/libmisc/monitor/mon-monitor.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-monitor.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,3 @@
 /*
- *	@(#)monitor.c	1.23 - 96/01/03
- *	
- *
- *
  * RTEMS monitor main body
  *	
@@ -19,5 +15,5 @@
  *      remote request/response stuff should be cleaned up
  *         maybe we can use real rpc??
- *      'info' commadn to print out:
+ *      'info' command to print out:
  *           interrupt stack location, direction and size
  *           floating point config stuff
@@ -263,4 +259,16 @@
 }
 
+void
+rtems_monitor_debugger_cmd(
+    int        argc,
+    char     **argv,
+    unsigned32 command_arg,
+    boolean    verbose
+)
+{
+#ifdef CPU_INVOKE_DEBUGGER
+    CPU_INVOKE_DEBUGGER;
+#endif
+}
 
 void
@@ -304,17 +312,4 @@
 
 void
-rtems_monitor_debugger_cmd(
-    int        argc,
-    char     **argv,
-    unsigned32 command_arg,
-    boolean    verbose
-)
-{
-#ifdef CPU_INVOKE_DEBUGGER
-    CPU_INVOKE_DEBUGGER;
-#endif
-}
-
-void
 rtems_monitor_node_cmd(
     int     argc,
@@ -341,6 +336,8 @@
     }
 
-    if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
-        rtems_monitor_default_node = new_node;
+    if ((new_node >= 1) &&
+        _Configuration_MP_table &&
+        (new_node <= _Configuration_MP_table->maximum_nodes))
+            rtems_monitor_default_node = new_node;
 }
 
@@ -384,9 +381,5 @@
         return;
 
-#ifdef SIMHPPA
-    fp = fdopen(8, "r");                /* don't ask; don't tell */
-#else
     fp = fopen("symbols", "r");
-#endif
     
     if (fp == 0)
Index: cpukit/libmisc/monitor/mon-mpci.c
===================================================================
--- cpukit/libmisc/monitor/mon-mpci.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-mpci.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)mpci.c	1.6 - 95/08/02
- *	
- *
  * RTEMS MPCI Config display support
  *
Index: cpukit/libmisc/monitor/mon-object.c
===================================================================
--- cpukit/libmisc/monitor/mon-object.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-object.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)object.c	1.9 - 96/01/03
- *	
- *
  * RTEMS Monitor "object" support.
  *
@@ -342,5 +339,5 @@
         for (arg=1; argv[arg]; arg++)
         {
-            id = (rtems_id) strtoul(argv[arg], 0, 0);
+            id = (rtems_id) strtoul(argv[arg], 0, 16);
             id = rtems_monitor_id_fixup(id, default_node, type);
             type = (rtems_monitor_object_type_t) rtems_get_class(id);
Index: cpukit/libmisc/monitor/mon-prmisc.c
===================================================================
--- cpukit/libmisc/monitor/mon-prmisc.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-prmisc.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)prmisc.c	1.9 - 95/08/02
- *	
- *
  * Print misc stuff for the monitor dump routines
  * Each routine returns the number of characters it output.
Index: cpukit/libmisc/monitor/mon-queue.c
===================================================================
--- cpukit/libmisc/monitor/mon-queue.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-queue.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,5 +1,3 @@
 /*
- *	@(#)queue.c	1.5 - 95/07/31
- *	
  *  $Id$
  */
Index: cpukit/libmisc/monitor/mon-server.c
===================================================================
--- cpukit/libmisc/monitor/mon-server.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-server.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,7 +1,4 @@
 /*
- *	@(#)server.c	1.5 - 96/01/03
- *	
- *
- *  RTEMS monitor server (handles requests for info from RTEMS monitors
+ * RTEMS monitor server (handles requests for info from RTEMS monitors
  *             running on other nodes)
  *
Index: cpukit/libmisc/monitor/mon-symbols.c
===================================================================
--- cpukit/libmisc/monitor/mon-symbols.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-symbols.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,10 +1,2 @@
-/*
- *      @(#)symbols.c	1.10 - 95/08/02
- *      
- *  $Id$
- */
-
-/* #define qsort _quicksort */
-
 /*
  *  File:	symbols.c
@@ -16,4 +8,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -51,9 +45,4 @@
             (void) free(table->addresses);
         table->addresses = 0;
-
-        if (table->symbols)
-            (void) free(table->symbols);
-        table->symbols = 0;
-
         p = table->string_buffer_head;
         while (p)
@@ -94,9 +83,4 @@
         if (table->addresses == 0)        /* blew it; lost orig */
             goto failed;
-
-        table->symbols = (rtems_symbol_t *) realloc((void *) table->symbols, newsize * sizeof(rtems_symbol_t));
-        if (table->symbols == 0)        /* blew it; lost orig */
-            goto failed;
-
         table->size = newsize;
     }
@@ -130,7 +114,4 @@
 
     table->strings_next += symbol_length;
-
-    table->symbols[table->next] = *sp;
-
     table->sorted = 0;
     table->next++;
@@ -148,5 +129,5 @@
  */
 
-int
+static int
 rtems_symbol_compare(const void *e1,
                      const void *e2)
@@ -163,19 +144,4 @@
 }
 
-/*
- * Qsort entry point for compare by string name (case independent)
- */
-
-int
-rtems_symbol_string_compare(const void *e1,
-                            const void *e2)
-{
-    rtems_symbol_t *s1, *s2;
-    s1 = (rtems_symbol_t *) e1;
-    s2 = (rtems_symbol_t *) e2;
-
-    return strcasecmp(s1->name, s2->name);
-}
-
 
 /*
@@ -183,25 +149,12 @@
  */
 
-void
+static void
 rtems_symbol_sort(rtems_symbol_table_t *table)
 {
-#ifdef RTEMS_ON_SIMULATOR
-    printf("Sorting symbols ... ");         /* so slow we need a msg */
-    fflush(stdout);
-#endif
-
     qsort((void *) table->addresses, (size_t) table->next,
           sizeof(rtems_symbol_t), rtems_symbol_compare);
-
-    qsort((void *) table->symbols, (size_t) table->next,
-          sizeof(rtems_symbol_t), rtems_symbol_string_compare);
-
-#ifdef RTEMS_ON_SIMULATOR
-    /* so slow we need a msg */
-    printf("done\n");
-#endif
-
     table->sorted = 1;
 }
+
 
 /*
@@ -263,4 +216,51 @@
 
 /*
+ * Search the symbol table for the exact matching address.
+ * If the symbol table has already been sorted, then
+ * call the regular symbol value lookup, however, it it
+ * has not yet been sorted, search it sequentially.
+ * This routine is primarily used for low level symbol
+ * lookups (eg. from exception handler and interrupt routines)
+ * where the penality of sorted is not wanted and where
+ * an exact match is needed such that symbol table order
+ * is not important.
+ */
+const rtems_symbol_t *
+rtems_symbol_value_lookup_exact(
+    rtems_symbol_table_t *table,
+    rtems_unsigned32      value
+  )
+{
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
+        table = rtems_monitor_symbols;
+        if (table == 0)
+            return NULL;
+    }
+    
+    if (table->sorted)
+    {
+        sp = rtems_symbol_value_lookup(table, value);
+        if ( rtems_symbol_value(sp) == value )
+            return sp;
+        else
+            return NULL;  /* not an exact match */
+    }
+ 
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( sp->value == value )
+            return sp;
+    }
+
+    return NULL;
+
+}
+
+
+/*
  * Search the symbol table by string name (case independent)
  */
@@ -272,31 +272,21 @@
   )
 {
-    rtems_symbol_t *sp = 0;
-    rtems_symbol_t  key;
-
-    if (table == 0)
+    int s;
+    rtems_symbol_t *sp;
+
+    if (table == 0)
+    {
         table = rtems_monitor_symbols;
-
-    if ((table == 0) || (name == 0))
-        goto done;
-
-    if (table->sorted == 0)
-        rtems_symbol_sort(table);
-
-    /*
-     * dummy up one for bsearch()
-     */
-
-    key.name = name;
-    key.value = 0;
-
-    sp = (rtems_symbol_t *) bsearch((const void *) &key,
-                                    (const void *) table->symbols,
-                                    (size_t) table->next,
-                                    sizeof(rtems_symbol_t),
-                                    rtems_symbol_string_compare);
-
-done:
-    return sp;
+        if (table == 0)
+            return NULL;
+    }
+    
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
+    {
+        if ( strcasecmp(sp->name, name) == 0 )
+            return sp;
+    }
+
+    return NULL;
 }
 
@@ -326,5 +316,5 @@
 
     *next_id += 1;
-    return (void *) (table->symbols + n);
+    return (void *) (table->addresses + n);
 
 failed:
@@ -439,5 +429,5 @@
         rtems_symbol_sort(table);
 
-    for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
+    for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
     {
         rtems_monitor_symbol_t canonical_symbol;
Index: cpukit/libmisc/monitor/mon-task.c
===================================================================
--- cpukit/libmisc/monitor/mon-task.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/mon-task.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)task.c	1.9 - 95/08/01
- *	
- *
  * RTEMS Monitor task support
  *
Index: cpukit/libmisc/monitor/monitor.h
===================================================================
--- cpukit/libmisc/monitor/monitor.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/monitor.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,9 +1,2 @@
-/*
- *      @(#)monitor.h	1.21 - 96/01/03
- *      
- *
- *  monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
- */
-
 /*
  *  File:	monitor.h
@@ -13,4 +6,6 @@
  *
  *  TODO:
+ *
+ *  $Id$
  */
 
@@ -26,5 +21,5 @@
 
 /*
- * XXX this should be in rtems proper when type becomes part of id
+ * Monitor types are derived from rtems object classes
  */
 
@@ -307,5 +302,5 @@
 
 typedef struct {
-    rtems_monitor_object_type_t                 type;
+    rtems_monitor_object_type_t         type;
     void                               *object_information;
     int                                 size;	/* of canonical object */
@@ -420,4 +415,5 @@
 rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32);
 rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32);
+const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, unsigned32);
 rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
 void   *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
Index: cpukit/libmisc/monitor/symbols.h
===================================================================
--- cpukit/libmisc/monitor/symbols.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/monitor/symbols.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,6 +1,3 @@
 /*
- *	@(#)symbols.h	1.3 - 95/06/09
- *	
- *
  *  RTEMS monitor symbol table functions
  *
@@ -49,12 +46,4 @@
 
     /*
-     * String list -- sorted by name (when we do a lookup)
-     * This is a duplicate of the info in table->addresses, but it's
-     * pretty small, so I don't worry about it.
-     */
-
-    rtems_symbol_t  *symbols;           /* symbol array */
-
-    /*
      * String pool, unsorted, a list of blocks of string data
      */
Index: cpukit/libmisc/stackchk/check.c
===================================================================
--- cpukit/libmisc/stackchk/check.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ cpukit/libmisc/stackchk/check.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -20,4 +20,17 @@
 
 #include <rtems.h>
+
+/*
+ * HACK
+ * the stack dump information should be printed by a "fatal" extension.
+ * Fatal extensions only get called via rtems_fatal_error_occurred()
+ * and not when rtems_shutdown_executive() is called.
+ * I hope/think this is changing so that fatal extensions are renamed
+ * to "shutdown" extensions.
+ * When that happens, this #define should be deleted and all the code
+ * it marks.
+ */
+#define DONT_USE_FATAL_EXTENSION
+
 
 extern rtems_configuration_table BSP_Configuration;
@@ -50,5 +63,9 @@
   Stack_check_Begin_extension,      /* task_begin   */
   0,                                /* task_exitted */
+#ifdef DONT_USE_FATAL_EXTENSION
+  0,                                /* fatal        */
+#else
   Stack_check_Fatal_extension,      /* fatal        */
+#endif
 };
 
@@ -167,8 +184,4 @@
 
   Stack_check_Blown_task = 0;
-
-#ifdef STACK_CHECKER_REPORT_USAGE
-  atexit( Stack_check_Dump_usage );
-#endif
 
   /*
@@ -218,4 +231,15 @@
   }
 
+#ifdef DONT_USE_FATAL_EXTENSION
+#ifdef RTEMS_DEBUG
+    /*
+     * this would normally be called by a fatal extension
+     * handler, but we don't run fatal extensions unless
+     * we fatal error.
+     */
+  atexit(Stack_check_Dump_usage);
+#endif
+#endif
+
   stack_check_initialized = 1;
 }
@@ -432,5 +456,5 @@
  */
 
-void Stack_check_Fatal_extension( 
+void Stack_check_Fatal_extension(
     Internal_errors_Source  source,
     boolean                 is_internal,
@@ -438,6 +462,8 @@
 )
 {
+#ifndef DONT_USE_FATAL_EXTENSION
     if (status == 0)
         Stack_check_Dump_usage();
+#endif
 }
 
Index: testsuites/sptests/spfatal/fatal.c
===================================================================
--- testsuites/sptests/spfatal/fatal.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ testsuites/sptests/spfatal/fatal.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -58,5 +58,6 @@
 
 rtems_extension Fatal_extension(
-  rtems_unsigned32 error
+  rtems_unsigned32 error,
+  boolean          is_internal
 )
 {
Index: testsuites/sptests/spfatal/system.h
===================================================================
--- testsuites/sptests/spfatal/system.h	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ testsuites/sptests/spfatal/system.h	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -29,5 +29,6 @@
  
 rtems_extension Fatal_extension(
-  rtems_unsigned32 error
+  rtems_unsigned32 error,
+  boolean          is_internal
 );
  
Index: testsuites/tmtests/tm21/task1.c
===================================================================
--- testsuites/tmtests/tm21/task1.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ testsuites/tmtests/tm21/task1.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -71,5 +71,5 @@
     status = rtems_message_queue_create(
       index,
-      1,
+      OPERATION_COUNT,
       16,
       RTEMS_DEFAULT_ATTRIBUTES,
Index: tools/cpu/hppa1.1/genoffsets.c
===================================================================
--- tools/cpu/hppa1.1/genoffsets.c	(revision 5a36154a60ce528d331602469ffea4ca4b9a0ea1)
+++ tools/cpu/hppa1.1/genoffsets.c	(revision 8389628c1be0f40fb94c1d2859138a09616acf06)
@@ -1,11 +1,8 @@
 /*
- *	@(#)genoffsets.c	1.7 - 95/09/25
- *	
- *
  *  genoffsets.c
  *
  *  This file generates the offsets.h for the HP PA-RISC port of RTEMS.
  *
- *  NOTE:  It only prints the offset for structures actually used 
+ *  NOTE:  It only prints the offset for structures actually used
  *         by the assembly code.
  *
@@ -18,5 +15,4 @@
  *
  *  $Id$
- *
  */
 
@@ -71,5 +67,5 @@
 
 #define PRINT_SIZE( STRING, item ) \
-  printf( "#define\t%s\t%d\t\t/* 0x%x */\n", \
+  printf( "#ifdef ASM\n#define\t%s\t%d\t\t/* 0x%x */\n#endif\n", \
           STRING, \
           sizeof(item), \
@@ -146,4 +142,37 @@
   PRINT_COMMENT("Context_Control_fp information");
 
+  PRINT_IT( "FR0_OFFSET", Context_Control_fp *, fr0 );
+  PRINT_IT( "FR1_OFFSET", Context_Control_fp *, fr1 );
+  PRINT_IT( "FR2_OFFSET", Context_Control_fp *, fr2 );
+  PRINT_IT( "FR3_OFFSET", Context_Control_fp *, fr3 );
+  PRINT_IT( "FR4_OFFSET", Context_Control_fp *, fr4 );
+  PRINT_IT( "FR5_OFFSET", Context_Control_fp *, fr5 );
+  PRINT_IT( "FR6_OFFSET", Context_Control_fp *, fr6 );
+  PRINT_IT( "FR7_OFFSET", Context_Control_fp *, fr7 );
+  PRINT_IT( "FR8_OFFSET", Context_Control_fp *, fr8 );
+  PRINT_IT( "FR9_OFFSET", Context_Control_fp *, fr9 );
+  PRINT_IT( "FR10_OFFSET", Context_Control_fp *, fr10 );
+  PRINT_IT( "FR11_OFFSET", Context_Control_fp *, fr11 );
+  PRINT_IT( "FR12_OFFSET", Context_Control_fp *, fr12 );
+  PRINT_IT( "FR13_OFFSET", Context_Control_fp *, fr13 );
+  PRINT_IT( "FR14_OFFSET", Context_Control_fp *, fr14 );
+  PRINT_IT( "FR15_OFFSET", Context_Control_fp *, fr15 );
+  PRINT_IT( "FR16_OFFSET", Context_Control_fp *, fr16 );
+  PRINT_IT( "FR17_OFFSET", Context_Control_fp *, fr17 );
+  PRINT_IT( "FR18_OFFSET", Context_Control_fp *, fr18 );
+  PRINT_IT( "FR19_OFFSET", Context_Control_fp *, fr19 );
+  PRINT_IT( "FR20_OFFSET", Context_Control_fp *, fr20 );
+  PRINT_IT( "FR21_OFFSET", Context_Control_fp *, fr21 );
+  PRINT_IT( "FR22_OFFSET", Context_Control_fp *, fr22 );
+  PRINT_IT( "FR23_OFFSET", Context_Control_fp *, fr23 );
+  PRINT_IT( "FR24_OFFSET", Context_Control_fp *, fr24 );
+  PRINT_IT( "FR25_OFFSET", Context_Control_fp *, fr25 );
+  PRINT_IT( "FR26_OFFSET", Context_Control_fp *, fr26 );
+  PRINT_IT( "FR27_OFFSET", Context_Control_fp *, fr27 );
+  PRINT_IT( "FR28_OFFSET", Context_Control_fp *, fr28 );
+  PRINT_IT( "FR29_OFFSET", Context_Control_fp *, fr29 );
+  PRINT_IT( "FR30_OFFSET", Context_Control_fp *, fr30 );
+  PRINT_IT( "FR31_OFFSET", Context_Control_fp *, fr31 );
+
   PRINT_SIZE("CPU_CONTEXT_FP_SIZE", Context_Control_fp);
 
