changeset 12:4cc3eff958ab ecos-sw-1999-06-04

Merge from eCos master repository on 1999-06-04-22:24:56-BST
author jlarmour
date Fri, 04 Jun 1999 15:08:16 +0000
parents 0efcb019050f
children acb4fa7cb179
files packages/ChangeLog packages/NEWS packages/hal/common/current/ChangeLog packages/hal/common/current/src/hal_stub.c packages/hal/mips/arch/current/ChangeLog packages/hal/mips/arch/current/src/hal_misc.c packages/hal/mips/jmr3904/current/ChangeLog packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt packages/hal/mips/sim/current/ChangeLog packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.ldi packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.mlt packages/hal/mips/tx39/current/ChangeLog packages/hal/mips/tx39/current/src/mips_tx39.ld packages/hal/powerpc/arch/current/ChangeLog packages/hal/powerpc/arch/current/src/ppc_860.h packages/hal/sparclite/arch/current/ChangeLog packages/hal/sparclite/arch/current/src/hal_boot.c packages/io/serial/current/ChangeLog packages/kernel/current/tests/PKGconf.mak packages/language/c/libm/current/ChangeLog packages/language/c/libm/current/src/PKGconf.mak packages/pkgconf.tcl
diffstat 25 files changed, 281 insertions(+), 99 deletions(-) [+]
line wrap: on
line diff
--- a/packages/ChangeLog
+++ b/packages/ChangeLog
@@ -1,3 +1,13 @@
+1999-06-04  Gary Thomas  <gthomas@cygnus.co.uk>
+
+	* pkgconf.tcl (command_prefix): Allow command_prefix to be overridden
+	on a per-platform basis.
+
+1999-06-03  Gary Thomas  <gthomas@cygnus.co.uk>
+
+	* pkgconf.tcl: Support 'base_platform' in target specification.  This
+	performs the inverse of what the "platform" entry in CDL options does.
+
 1999-05-26  Jesper Skov  <jskov@cygnus.co.uk>
 
 	* NEWS: Added Kernel/Debugging entry.
new file mode 100644
--- /dev/null
+++ b/packages/NEWS
@@ -0,0 +1,77 @@
+* Will be new in eCos 1.3
+
+** Target side platforms
+
+*** These are the eCos 1.2.1 platforms...
+
+**** ARM:
+     ARM7TDMI - ARM PID7T board
+     Sharp LH77790 (ARM7DI core) - ARM AEB-1 board
+
+**** Fujitsu SPARClite:
+     MB86831, MB86832, MB86833 - Fujitsu MB86800-MA01 board
+     SIS - SPARClite simulator
+
+**** Matsushita MN10300:
+     MN103002 - standard evaluation board
+     MN103002 - standard evaluation board simulator
+
+**** Toshiba TX39 (MIPS R3900 derivative):
+     TX39 - JMR3904 evaluation board
+     TX39 - JMR3904 evaluation board simulator
+
+**** MPC800 PowerPC:
+     MPC823 - Cogent CMA287-23
+     MPC850 - Cogent CMA287-50
+     MPC860 - Cogent CMA286-60
+     MPC860 - MPC8xxFADS (NB unsupported by Cygnus,
+                          contributed by Kevin Hester)
+     MPC823, MPC850, MPC860 - PSIM simulator
+
+**** i386/Linux synthetic target
+     
+*** The following are the new target platforms...
+
+
+
+
+** Host side platforms
+
+*** These are the eCos 1.2.1 platforms....
+**** Redhat Linux 4.2 and later
+**** Solaris 2.5.1 and later
+**** Windows NT 4.0SP3 and later
+**** Windows 95/98 (Beta)
+
+*** These are the new host platforms...
+
+**** FIXME
+
+** Host tool features
+
+**** FIXME
+
+** New toolchain features
+
+** API additions (are there any?)
+
+*** FIXME
+
+** API changes
+
+*** Kernel
+
+**** Debugging
+	The file <cyg/kernel/test/stackmon.h> defines some functions
+	that can be used to profile stack usage.
+
+**** KAPI
+	include/kapi.h (cyg_thread_delete): is now a boolean function to
+	indicate success.  Failure is when the thread needs to run in
+	order to become killed.
+
+** ISO C library
+
+** HAL changes
+
+*** Common
--- a/packages/hal/common/current/ChangeLog
+++ b/packages/hal/common/current/ChangeLog
@@ -1,3 +1,7 @@
+1999-05-31  Jesper Skov  <jskov@cygnus.co.uk>
+
+	* src/hal_stub.c: Respect HAL_BREAKINST_SIZE setting.
+
 1999-05-28  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/hal_stub.c (initHardware): Added call to
--- a/packages/hal/common/current/src/hal_stub.c
+++ b/packages/hal/common/current/src/hal_stub.c
@@ -117,7 +117,13 @@ void
 
 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
 
-typedef unsigned long t_inst;
+#if (HAL_BREAKINST_SIZE == 2)
+typedef cyg_uint16 t_inst;
+#elif (HAL_BREAKINST_SIZE == 4)
+typedef cyg_uint32 t_inst;
+#else
+#error "Don't know how to handle that size"
+#endif
 
 typedef struct
 {
--- a/packages/hal/mips/arch/current/ChangeLog
+++ b/packages/hal/mips/arch/current/ChangeLog
@@ -1,3 +1,9 @@
+1999-06-02  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* src/hal_misc.c (cyg_hal_invoke_constructors): 
+	Rework for new constructor scheme for new compilers. Should work
+	with old compilers too.
+
 1999-05-28  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/vectors.S:
--- a/packages/hal/mips/arch/current/src/hal_misc.c
+++ b/packages/hal/mips/arch/current/src/hal_misc.c
@@ -147,41 +147,28 @@ cyg_bool cyg_hal_stop_constructors;
 
 typedef void (*pfunc) (void);
 extern pfunc __CTOR_LIST__[];
+extern pfunc __CTOR_END__[];
 
 void
 cyg_hal_invoke_constructors(void)
 {
-#if 0
-
-#else    
-
-    pfunc p;
-
 #ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
-    static long i = 0;
-    long j = (long)(__CTOR_LIST__[0]);
+    static pfunc *p = &__CTOR_END__[-1];
     
-    cyg_hal_stop_constructors=0;
-    for ( ; i < j; i++ )
-    {
-        p = __CTOR_LIST__[j - i];
-        p ();
+    cyg_hal_stop_constructors = 0;
+    for (; p >= __CTOR_LIST__; p--) {
+        (*p) ();
         if (cyg_hal_stop_constructors) {
-            i++;
+            p--;
             break;
         }
     }
 #else
-    long i = (long)(__CTOR_LIST__[0]);
-    
-    for ( ; i > 0; i-- )
-    {
-        p = __CTOR_LIST__[i];
-        p ();
-    }
+    pfunc *p;
+
+    for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--)
+        (*p) ();
 #endif
-
-#endif    
     
 } // cyg_hal_invoke_constructors()
 
--- a/packages/hal/mips/jmr3904/current/ChangeLog
+++ b/packages/hal/mips/jmr3904/current/ChangeLog
@@ -1,3 +1,11 @@
+1999-06-02  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt: 
+	* include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt: 
+	* include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi: 
+	* include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi: 
+	Use ctors/dtors sections as required by new compilers
+
 1999-05-27  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/plf_misc.c: Reorganized and generally fixed up Ctrl-C
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi
+++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi
@@ -37,6 +37,8 @@ SECTIONS
     SECTION_rom_vectors (ram, 0x80008000, LMA_EQ_VMA)
     SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_ctors (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_dtors (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_fixup (ram, ALIGN (0x1), LMA_EQ_VMA)
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt
+++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt
@@ -2,7 +2,9 @@ version 0
 region ram 80008000 78000 0 !
 section rom_vectors 0 1 0 1 1 1 1 1 80008000 80008000 text text !
 section text 0 1 0 1 0 1 0 1 fini fini !
-section fini 0 1 0 1 0 1 0 1 rodata rodata !
+section fini 0 1 0 1 0 1 0 1 ctors ctors !
+section ctors 0 1 0 1 0 1 0 1 dtors dtors !
+section dtors 0 1 0 1 0 1 0 1 rodata rodata !
 section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 !
 section rodata1 0 1 0 1 0 1 0 1 fixup fixup !
 section fixup 0 1 0 1 0 1 0 1 rel.dyn rel.dyn !
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi
+++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi
@@ -38,6 +38,8 @@ SECTIONS
     SECTION_rom_vectors (rom, 0xbfc00000, LMA_EQ_VMA)
     SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_ctors (rom, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_dtors (rom, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata (rom, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata1 (rom, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_fixup (rom, ALIGN (0x1), LMA_EQ_VMA)
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt
+++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt
@@ -5,7 +5,9 @@ section data 0 1 1 1 1 1 0 0 80000200 bs
 section bss 0 4 0 1 0 0 0 0 !
 section rom_vectors 0 1 0 1 1 1 1 1 bfc00000 bfc00000 text text !
 section text 0 1 0 1 0 1 0 1 fini fini !
-section fini 0 1 0 1 0 1 0 1 rodata rodata !
+section fini 0 1 0 1 0 1 0 1 ctors ctors !
+section ctors 0 1 0 1 0 1 0 1 dtors dtors !
+section dtors 0 1 0 1 0 1 0 1 rodata rodata !
 section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 !
 section rodata1 0 1 0 1 0 1 0 1 fixup fixup !
 section fixup 0 1 0 1 0 1 0 1 rel.dyn rel.dyn !
--- a/packages/hal/mips/sim/current/ChangeLog
+++ b/packages/hal/mips/sim/current/ChangeLog
@@ -1,3 +1,9 @@
+1999-06-02  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* include/pkgconf/mlt_mips_tx39_sim_ram.ldi: 
+	* include/pkgconf/mlt_mips_tx39_sim_ram.mlt: 
+	Add support for ctors/dtors sections required by new compiler
+
 1999-05-20  Gary Thomas  <gthomas@cygnus.co.uk>
 
 	* include/pkgconf/hal_mips_sim.h: Move RTC setup here.
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.ldi
+++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.ldi
@@ -37,6 +37,8 @@ SECTIONS
     SECTION_rom_vectors (ram, 0x80000000, LMA_EQ_VMA)
     SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_ctors (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_dtors (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_vsr_table (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_rodata1 (ram, ALIGN (0x1), LMA_EQ_VMA)
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.mlt
+++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.mlt
@@ -2,7 +2,9 @@ version 0
 region ram 80000000 80000 0 !
 section rom_vectors 0 1 0 1 1 1 1 1 80000000 80000000 text text !
 section text 0 1 0 1 0 1 0 1 fini fini !
-section fini 0 1 0 1 0 1 0 1 rodata rodata !
+section fini 0 1 0 1 0 1 0 1 ctors ctors !
+section ctors 0 1 0 1 0 1 0 1 dtors dtors !
+section dtors 0 1 0 1 0 1 0 1 rodata rodata !
 section rodata 0 1 0 1 0 1 0 1 vsr_table vsr_table !
 section vsr_table 0 1 0 1 0 1 0 1 rodata1 rodata1 !
 section rodata1 0 1 0 1 0 1 0 1 fixup fixup !
--- a/packages/hal/mips/tx39/current/ChangeLog
+++ b/packages/hal/mips/tx39/current/ChangeLog
@@ -1,3 +1,9 @@
+1999-06-02  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* src/mips_tx39.ld: 
+	Add .ctors and .dtors sections as required by new compilers, but
+	keep around old SORT(CONSTRUCTORS) for use by old compilers.
+
 1999-05-27  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/hal_diag.c (hal_diag_write_char): Tidied away defunct code
--- a/packages/hal/mips/tx39/current/src/mips_tx39.ld
+++ b/packages/hal/mips/tx39/current/src/mips_tx39.ld
@@ -79,6 +79,24 @@ GROUP(libtarget.a libgcc.a)
     { FORCE_OUTPUT; *(.fini) } \
     > _region_
 
+#define SECTION_ctors(_region_, _vma_, _lma_)	\
+   .ctors _vma_ : _lma_				\
+   {						\
+     __CTOR_LIST__ = ABSOLUTE (.);		\
+     KEEP(*(.ctors))				\
+     KEEP(*(SORT(.ctors.*)))			\
+     __CTOR_END__ = ABSOLUTE (.);		\
+   } > _region_
+
+#define SECTION_dtors(_region_, _vma_, _lma_)	\
+   .dtors _vma_ : _lma_				\
+   {						\
+     __DTOR_LIST__ = ABSOLUTE (.);		\
+     KEEP(*(SORT(.dtors.*)))			\
+     KEEP(*(.dtors))				\
+     __DTOR_END__ = ABSOLUTE (.);		\
+   } > _region_
+
 #define SECTION_rodata(_region_, _vma_, _lma_) \
     .rodata _vma_ : _lma_ \
     { FORCE_OUTPUT; *(.rodata*) } \
@@ -109,6 +127,9 @@ GROUP(libtarget.a libgcc.a)
     { FORCE_OUTPUT; *(.gcc_except_table) } \
     > _region_
 
+/* FIXME: The SORT(CONSTRUCTORS) line below is for backwards compatibility
+ * with older (pre-99r1) toolchains
+ */
 #define SECTION_data(_region_, _vma_, _lma_) \
     .data _vma_ : _lma_ \
     { __ram_data_start = ABSOLUTE (.); \
@@ -116,7 +137,7 @@ GROUP(libtarget.a libgcc.a)
     _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \
     _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \
     . = ALIGN (8); \
-    SORT (CONSTRUCTORS) *(.ctors*) *(.dtors*) \
+    SORT (CONSTRUCTORS) \
     . = ALIGN (8); \
     __DEVTAB__ = ABSOLUTE (.); KEEP (*(SORT (.devtab*))) __DEVTAB_END__ = ABSOLUTE (.); \
     . = ALIGN (8); \
--- a/packages/hal/powerpc/arch/current/ChangeLog
+++ b/packages/hal/powerpc/arch/current/ChangeLog
@@ -1,3 +1,8 @@
+1999-06-04  Jesper Skov  <jskov@cygnus.co.uk>
+	PR 20146
+	* src/ppc_860.h: Added padding to some structures, reported by
+	Jean-Dominique Orvoen (orvoen@email.enst.fr)
+
 1999-05-26  Jesper Skov  <jskov@cygnus.co.uk>
 
 	* include/hal_cache.h (HAL_DCACHE_LOCK):
--- a/packages/hal/powerpc/arch/current/src/ppc_860.h
+++ b/packages/hal/powerpc/arch/current/src/ppc_860.h
@@ -562,6 +562,8 @@ struct spi_pram
    cyg_uint16   tbptr;          /* Tx BD pointer */
    cyg_uint16   tcount;         /* Tx byte count */
    cyg_uint32      ttemp;               /* Tx temp */
+
+    cyg_uint8     RESERVED12[8]; /* Reserved */
 };
 
 
@@ -591,8 +593,20 @@ struct i2c_pram
    cyg_uint16   tbptr;          /* Tx BD pointer */
    cyg_uint16   tcount;         /* Tx byte count */
    cyg_uint32      ttemp;               /* Tx temp */
+
+    cyg_uint8     RESERVED13[8];    
 };
 
+/*--------------------------------------------------------------------------*/
+/*                       MISC parameter RAM                                                                             */
+/*--------------------------------------------------------------------------*/
+
+struct misc_pram 
+{
+    cyg_uint8    RESERVED14[16];
+};
+
+
 
 /*--------------------------------------------------------------------------*/
 /*                      PIP Centronics parameter RAM                                                   */
@@ -1143,6 +1157,7 @@ typedef struct eppc
          
             {
                struct i2c_pram  i2c;     /* I2C   */
+               struct misc_pram misc;    /* MISC  */
                struct idma_pram idma1;   /* IDMA1 */
 
             } i2c_idma; 
--- a/packages/hal/sparclite/arch/current/ChangeLog
+++ b/packages/hal/sparclite/arch/current/ChangeLog
@@ -1,3 +1,14 @@
+1999-06-03  Hugo Tyson  <hmt@cygnus.co.uk>
+
+	* src/hal_boot.c: Add a dummy __gccmain() to prevent ctors being
+	called twice.  This seems to be a recent compiler change:
+	[from gcc/ChangeLog]
+	Sat May 22 18:18:43 1999  Jason Merrill  <jason@yorick.cygnus.com>
+           * sparc/liteelf.h: Handle ctors like MIPS crosses.
+           * sparc/lite.h (STARTFILE_SPEC, LIB_SPEC): Define to "".
+           * configure.in: Don't use libgloss.h on sparclite-elf.
+           Use collect2 on sparclite-aout.
+
 1999-05-20  Hugo Tyson  <hmt@cygnus.co.uk>
 
 	* include/hal_intr.h (HAL_INTERRUPT_STACK_CALL_PENDING_DSRS): 
--- a/packages/hal/sparclite/arch/current/src/hal_boot.c
+++ b/packages/hal/sparclite/arch/current/src/hal_boot.c
@@ -107,9 +107,9 @@ cyg_hal_invoke_constructors (void)
 #endif
 }
 
-// Override any __eabi the compiler might generate. We don't want
+// Override any __gccmain the compiler might generate. We don't want
 // constructors to be called twice.
-void __eabi (void) {}
+void  __gccmain(void) {}
 
 /*------------------------------------------------------------------------*/
 /*   CYG_HAL_START - pre-main-entrypoint                                  */
--- a/packages/io/serial/current/ChangeLog
+++ b/packages/io/serial/current/ChangeLog
@@ -12,7 +12,6 @@ 1999-05-27  Jonathan Larmour  <jlarmour@
 	Fix for PR 20047
 	
 
-
 1999-05-25  Jonathan Larmour  <jlarmour@cygnus.co.uk>
 
 	* tests/ser_test_protocol.inl: 
@@ -23,7 +22,6 @@ 1999-05-25  Jonathan Larmour  <jlarmour@
 
 	* src/PKGconf.mak (EXTRAS_COMPILE): Change CYG_HAL_TX39 to
 	CYG_HAL_MIPS_TX39
-
 1999-05-18  Jesper Skov  <jskov@cygnus.co.uk>
         PR 19926
 	* src/sparclite/sleb_sdtr.c (sleb_sdtr_rx_DSR): Only read chan if
--- a/packages/kernel/current/tests/PKGconf.mak
+++ b/packages/kernel/current/tests/PKGconf.mak
@@ -48,7 +48,5 @@ ifndef CYGPKG_HAL_ARM_AEB
 TESTS   += stress_threads
 endif
 
+
 include $(COMPONENT_REPOSITORY)/pkgconf/makrules.tst
-
-
-
--- a/packages/language/c/libm/current/ChangeLog
+++ b/packages/language/c/libm/current/ChangeLog
@@ -1,3 +1,19 @@
+1999-06-04  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* src/PKGconf.mak: 
+	Only use -fno-strict-aliasing if we have enough a recent toolchain
+	
+1999-06-03  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* src/PKGconf.mak: 
+	Finally found the option to do the right workaround:
+	-fno-strict-aliasing
+
+1999-06-02  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+	* src/PKGconf.mak (SPECIAL_FLAGS): Don't use -fschedule-insns[2] on
+	mn10300
+
 1999-05-27  Jonathan Larmour  <jlarmour@cygnus.co.uk>
 
 	* src/PKGconf.mak (SPECIAL_FLAGS): Add workaround flags for new
--- a/packages/language/c/libm/current/src/PKGconf.mak
+++ b/packages/language/c/libm/current/src/PKGconf.mak
@@ -73,66 +73,12 @@ OTHER_CLEAN   :=
 
 # Work-around for PR 19698
 
-SPECIAL_FLAGS := -O1 -fschedule-insns -fschedule-insns2 -fexpensive-optimizations -fstrength-reduce -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop
-
-ifdef CYG_HAL_SPARCLITE
-SPECIAL_FLAGS += -fdelayed-branch
-endif
-ifdef CYG_HAL_MIPS_TX39
-SPECIAL_FLAGS += -fdelayed-branch
-endif
-ifdef CYG_HAL_POWERPC
-SPECIAL_FLAGS += -fdelayed-branch
+ifdef CYGPKG_HAL_ARM
+RECENT_TOOLCHAIN=1
 endif
 
-s_atan.c-CFLAGS += $(SPECIAL_FLAGS)
-s_ceil.c-CFLAGS += $(SPECIAL_FLAGS)
-s_copysign.c-CFLAGS += $(SPECIAL_FLAGS)
-s_cos.c-CFLAGS += $(SPECIAL_FLAGS)
-s_expm1.c-CFLAGS += $(SPECIAL_FLAGS)
-s_fabs.c-CFLAGS += $(SPECIAL_FLAGS)
-s_finite.c-CFLAGS += $(SPECIAL_FLAGS)
-s_floor.c-CFLAGS += $(SPECIAL_FLAGS)
-s_frexp.c-CFLAGS += $(SPECIAL_FLAGS)
-s_isnan.c-CFLAGS += $(SPECIAL_FLAGS)
-s_ldexp.c-CFLAGS += $(SPECIAL_FLAGS)
-s_rint.c-CFLAGS += $(SPECIAL_FLAGS)
-s_scalbn.c-CFLAGS += $(SPECIAL_FLAGS)
-s_sin.c-CFLAGS += $(SPECIAL_FLAGS)
-s_tan.c-CFLAGS += $(SPECIAL_FLAGS)
-s_modf.c-CFLAGS += $(SPECIAL_FLAGS)
-s_tanh.c-CFLAGS += $(SPECIAL_FLAGS)
-s_asinh.c-CFLAGS += $(SPECIAL_FLAGS)
-s_cbrt.c-CFLAGS += $(SPECIAL_FLAGS)
-s_erf.c-CFLAGS += $(SPECIAL_FLAGS)
-s_ilogb.c-CFLAGS += $(SPECIAL_FLAGS)
-s_log1p.c-CFLAGS += $(SPECIAL_FLAGS)
-s_logb.c-CFLAGS += $(SPECIAL_FLAGS)
-s_nextafter.c-CFLAGS += $(SPECIAL_FLAGS)
-s_significand.c-CFLAGS += $(SPECIAL_FLAGS)
-e_fmod.c-CFLAGS += $(SPECIAL_FLAGS)
-w_fmod.c-CFLAGS += $(SPECIAL_FLAGS)
-e_acos.c-CFLAGS += $(SPECIAL_FLAGS)
-e_acosh.c-CFLAGS += $(SPECIAL_FLAGS)
-e_asin.c-CFLAGS += $(SPECIAL_FLAGS)
-e_atan2.c-CFLAGS += $(SPECIAL_FLAGS)
-e_atanh.c-CFLAGS += $(SPECIAL_FLAGS)
-e_cosh.c-CFLAGS += $(SPECIAL_FLAGS)
-e_exp.c-CFLAGS += $(SPECIAL_FLAGS)
-e_fmod.c-CFLAGS += $(SPECIAL_FLAGS)
-e_hypot.c-CFLAGS += $(SPECIAL_FLAGS)
-e_j0.c-CFLAGS += $(SPECIAL_FLAGS)
-e_j1.c-CFLAGS += $(SPECIAL_FLAGS)
-e_jn.c-CFLAGS += $(SPECIAL_FLAGS)
-e_lgamma_r.c-CFLAGS += $(SPECIAL_FLAGS)
-e_log.c-CFLAGS += $(SPECIAL_FLAGS)
-e_log10.c-CFLAGS += $(SPECIAL_FLAGS)
-e_pow.c-CFLAGS += $(SPECIAL_FLAGS)
-e_rem_pio2.c-CFLAGS += $(SPECIAL_FLAGS)
-e_remainder.c-CFLAGS += $(SPECIAL_FLAGS)
-e_sinh.c-CFLAGS += $(SPECIAL_FLAGS)
-e_sqrt.c-CFLAGS += $(SPECIAL_FLAGS)
-k_cos.c-CFLAGS += $(SPECIAL_FLAGS)
-k_tan.c-CFLAGS += $(SPECIAL_FLAGS)
+ifeq ($(RECENT_TOOLCHAIN),1)
+CFLAGS += -fno-strict-aliasing
+endif
 
 include $(COMPONENT_REPOSITORY)/pkgconf/makrules.src
--- a/packages/pkgconf.tcl
+++ b/packages/pkgconf.tcl
@@ -1160,7 +1160,12 @@ proc pkgconf::read_targets { } {
 	}
 	
 	proc command_prefix { str } {
-	    set_target_data "$::current_target,prefix" $str
+	    # Allow the command prefix to be overridden on a per-platform basis
+	    if { $::current_platform != "" } {
+		set_target_data "$::current_target,$::current_platform,prefix" $str
+	    } else {
+		set_target_data "$::current_target,prefix" $str
+	    }
 	}
 
 	proc packages { list } {
@@ -1179,6 +1184,14 @@ proc pkgconf::read_targets { } {
 	    }
 	}
 	
+	proc base_platform { str } {
+	    if { $::current_platform != "" } {
+		set_target_data "$::current_target,$::current_platform,base_platform" $str
+	    } else {
+		set_target_data "$::current_target,base_platform" $str
+	    }
+	}
+	
 	proc platform { name body } {
 
 	    add_known_platform $::current_target $name
@@ -1511,6 +1524,24 @@ proc pkgconf::get_default_platform { tar
     return $platform
 }
 
+proc pkgconf::get_base_platform { target platform } {
+
+    ASSERT { $target   != "" }
+    ASSERT { $platform != "" }
+
+    set target [find_target $target]
+    ASSERT { $target != "" }
+    set platform [find_platform $target $platform]
+    ASSERT { $platform != "" }
+    
+    if [info exists pkgconf::target_data($target,$platform,base_platform) ] {
+	set base_platform [lindex $pkgconf::target_data($target,$platform,base_platform) 0]
+    } else {
+	set base_platform $platform
+    }
+    return $base_platform
+}
+
 proc pkgconf::get_default_startup { target platform } {
 
     ASSERT { $target   != "" }
@@ -1550,6 +1581,7 @@ proc pkgconf::setup_defaults { } {
     
     set pkgconf::config_data(target)    ""
     set pkgconf::config_data(platform)  ""
+    set pkgconf::config_data(base_platform)  ""
     set pkgconf::config_data(startup)   ""
     set pkgconf::config_data(prefix)    ""
     set pkgconf::config_data(use_links) 0
@@ -1590,6 +1622,7 @@ proc pkgconf::setup_defaults { } {
 
 	ASSERT { $pkgconf::target_data($pkgconf::config_data(target),known_platforms) != "" }
 	set pkgconf::config_data(platform) [get_default_platform $pkgconf::config_data(target)]
+	set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::config_data(platform)]
 
 	ASSERT { $pkgconf::target_data($pkgconf::config_data(target),$pkgconf::config_data(platform),startup) != "" }
 	set pkgconf::config_data(startup) [get_default_startup $pkgconf::config_data(target) $pkgconf::config_data(platform)]
@@ -1670,6 +1703,7 @@ proc pkgconf::read_save_file { } {
 	    set pkgconf::saved_data(target)    $target_name
 	    set pkgconf::config_data(target)   $target_name
 	    set pkgconf::config_data(platform) [get_default_platform $pkgconf::config_data(target)]
+	    set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::config_data(platform)]
 	    set pkgconf::config_data(startup) \
 		    [get_default_startup $pkgconf::config_data(target) $pkgconf::config_data(platform)]
 	}
@@ -1690,6 +1724,7 @@ The platform $pkgconf::config_data(platf
 	    } else {
 		set pkgconf::saved_data(platform)  $platform_name
 		set pkgconf::config_data(platform) $platform_name
+		set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::saved_data(platform)]
 		set pkgconf::config_data(startup) [get_default_startup $pkgconf::config_data(target) $platform_name]
 	    }
 	    
@@ -1865,6 +1900,10 @@ proc pkgconf::write_save_file { } {
 	    puts $open_file "set_saved_data platform $pkgconf::config_data(platform)"
 	    set pkgconf::saved_data(platform) $pkgconf::config_data(platform)
 	}
+	if { $pkgconf::config_data(base_platform) != "" } {
+	    puts $open_file "set_saved_data base_platform $pkgconf::config_data(base_platform)"
+	    set pkgconf::saved_data(base_platform) $pkgconf::config_data(base_platform)
+	}
 	if { $pkgconf::config_data(startup) != "" } {
 	    puts $open_file "set_saved_data startup  $pkgconf::config_data(startup)"
 	    set pkgconf::saved_data(startup) $pkgconf::config_data(startup)
@@ -1990,6 +2029,7 @@ proc pkgconf::process_arguments { } {
 	if { $platform != "" } {
 	    set platform [find_platform $target $platform]
 	    set pkgconf::config_data(platform) $platform
+	    set pkgconf::config_data(base_platform) [get_base_platform $target $platform]
 	    if { ($platform != "") && ($startup != "") } {
 		if { [lsearch -exact $pkgconf::target_data($target,$platform,startup) $startup] == -1 } {
 		    set startup ""
@@ -2022,6 +2062,8 @@ proc pkgconf::process_arguments { } {
 	set pkgconf::config_data(platform) $platform
     }
 
+    set pkgconf::config_data(base_platform) [get_base_platform $target $platform]
+
     if { ($target != "") && ($platform != "") && ($pkgconf::startup_arg != "" ) } {
 	
 	if { [lsearch -exact $pkgconf::target_data($target,$platform,startup) $pkgconf::startup_arg] == -1 } {
@@ -3041,6 +3083,7 @@ proc pkgconf::nbpage_targets_leave { win
 
 	set config_data(target)     [lindex $target_page_data(selection) 0]
 	set config_data(platform)   [lindex $target_page_data(selection) 1]
+	set config_data(base_platform) [get_base_platform $config_data(target) $config_data(platform)]
 	set config_data(startup)    [lindex $target_page_data(selection) 2]
 	set build_tree_needs_update 1
 
@@ -5437,7 +5480,12 @@ proc pkgconf::produce_misc_files { } {
 	# and hence the default.
 	puts $file "\ndefault: build\n"
 	
-	set command_prefix $pkgconf::target_data($pkgconf::config_data(target),prefix)
+	set platform $pkgconf::config_data(platform)
+	if [info exists pkgconf::target_data($pkgconf::config_data(target),$platform,prefix)] {
+	    set command_prefix $pkgconf::target_data($pkgconf::config_data(target),$platform,prefix)
+	} else {
+	    set command_prefix $pkgconf::target_data($pkgconf::config_data(target),prefix)
+	}
 
 	puts $file ""
 	puts $file "COMPONENT_REPOSITORY\t\t:= [get_pathname_for_make $pkgconf::component_repository]"
@@ -5447,6 +5495,7 @@ proc pkgconf::produce_misc_files { } {
 	# per-target files.
 	puts $file "TARGET\t\t\t\t:= $pkgconf::config_data(target)"
 	puts $file "PLATFORM\t\t\t:= $pkgconf::config_data(platform)"
+	puts $file "BASE_PLATFORM\t\t\t:= $pkgconf::config_data(base_platform)"
 	puts $file "STARTUP\t\t\t\t:= $pkgconf::config_data(startup)"
 	
 	# The prefix (i.e. install directory) should default to somewhere
@@ -5558,13 +5607,13 @@ endif"
 
 	# Additions for the MLT
 	puts $file "\n"
-	puts $file "#define CYGHWR_MEMORY_LAYOUT_LDI <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(platform)]_[set pkgconf::config_data(startup)].ldi>"
-	puts $file "#define CYGHWR_MEMORY_LAYOUT_H   <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(platform)]_[set pkgconf::config_data(startup)].h>"
+	puts $file "#define CYGHWR_MEMORY_LAYOUT_LDI <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(base_platform)]_[set pkgconf::config_data(startup)].ldi>"
+	puts $file "#define CYGHWR_MEMORY_LAYOUT_H   <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(base_platform)]_[set pkgconf::config_data(startup)].h>"
 
 	# Also output details of the HAL header files that should be included
 	puts $file "\n"
 	puts $file "#define CYGBLD_HAL_TARGET_H   <pkgconf/hal_[set pkgconf::config_data(target)].h>"
-	puts $file "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_[set pkgconf::config_data(target)]_[set pkgconf::config_data(platform)].h>"
+	puts $file "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_[set pkgconf::config_data(target)]_[set pkgconf::config_data(base_platform)].h>"
 	
 	puts $file "\
 \n#endif  /* CYGONCE_PKGCONF_SYSTEM_H */ 		
@@ -5879,6 +5928,7 @@ proc pkgconf::initialise_data { } {
     if { 0 } {
 	puts "target:   $pkgconf::config_data(target)"
 	puts "platform: $pkgconf::config_data(platform)"
+	puts "base_platform: $pkgconf::config_data(base_platform)"
 	puts "startup:  $pkgconf::config_data(startup)"
 	puts "prefix:   $pkgconf::config_data(prefix)"
 	puts "packages: $pkgconf::config_data(packages)"